From 63b7024cb98717dd785ae888f419002b9835c6b1 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Fri, 14 Apr 2023 23:59:23 +0200 Subject: xtask: build usage examples and general improvements --- xtask/src/cargo_commands.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index 9cbdaef..9b07088 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -126,6 +126,33 @@ pub fn cargo<'c>( runner.run_and_coalesce() } +/// Cargo command to build a usage example. +/// +/// The usage examples are in examples/ +pub fn cargo_usage_example( + globals: &Globals, + operation: BuildOrCheck, + usage_examples: Vec, +) -> Vec> { + examples_iter(&usage_examples) + .map(|example| { + let path = format!("examples/{example}"); + + let command = match operation { + BuildOrCheck::Check => CargoCommand::CheckInDir { + mode: BuildMode::Release, + dir: path.into(), + }, + BuildOrCheck::Build => CargoCommand::BuildInDir { + mode: BuildMode::Release, + dir: path.into(), + }, + }; + (globals, command, false) + }) + .run_and_coalesce() +} + /// Cargo command to either build or check all examples /// /// The examples are in rtic/examples -- cgit v1.2.3 From 6517a4bec2e909b40eb9974e063f95e44e4d9a31 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sat, 15 Apr 2023 20:44:06 +0200 Subject: Also check for CommandErrors in error checking --- xtask/src/cargo_commands.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index 9b07088..ead6eaa 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -10,10 +10,11 @@ use rayon::prelude::*; use iters::*; +#[derive(Debug)] pub enum FinalRunResult<'c> { Success(CargoCommand<'c>, RunResult), Failed(CargoCommand<'c>, RunResult), - CommandError(anyhow::Error), + CommandError(CargoCommand<'c>, anyhow::Error), } fn run_and_convert<'a>( @@ -21,7 +22,8 @@ fn run_and_convert<'a>( ) -> FinalRunResult<'a> { // Run the command let result = command_parser(global, &command, overwrite); - match result { + + let output = match result { // If running the command succeeded without looking at any of the results, // log the data and see if the actual execution was succesfull too. Ok(result) => { @@ -32,8 +34,12 @@ fn run_and_convert<'a>( } } // If it didn't and some IO error occured, just panic - Err(e) => FinalRunResult::CommandError(e), - } + Err(e) => FinalRunResult::CommandError(command, e), + }; + + log::trace!("Final result: {output:?}"); + + output } pub trait CoalescingRunner<'c> { -- cgit v1.2.3 From 1c84ccf6e4169b4b45f0e22e709e4265a10324a5 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sat, 15 Apr 2023 22:19:13 +0200 Subject: Fix running of tests --- xtask/src/cargo_commands.rs | 47 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 24 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index ead6eaa..42895d8 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -302,7 +302,7 @@ pub fn cargo_book<'c>( /// Run examples /// /// Supports updating the expected output via the overwrite argument -pub fn run_test<'c>( +pub fn qemu_run_examples<'c>( globals: &Globals, cargoarg: &'c Option<&'c str>, backend: Backends, @@ -312,31 +312,30 @@ pub fn run_test<'c>( let target = backend.to_target(); let features = Some(target.and_features(backend.to_rtic_feature())); - examples_iter(examples) - .map(|example| { - let cmd = CargoCommand::ExampleBuild { - cargoarg: &Some("--quiet"), - example, - target, - features: features.clone(), - mode: BuildMode::Release, - }; - - if let Err(err) = command_parser(globals, &cmd, false) { - error!("{err}"); - } + let build = examples_iter(examples).map(|example| { + let cmd_build = CargoCommand::ExampleBuild { + // We need to be in the correct + cargoarg: &None, + example, + target, + features: features.clone(), + mode: BuildMode::Release, + }; + (globals, cmd_build, overwrite) + }); - let cmd = CargoCommand::Qemu { - cargoarg, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - }; + let run = examples_iter(examples).map(|example| { + let cmd_qemu = CargoCommand::Qemu { + cargoarg, + example, + target, + features: features.clone(), + mode: BuildMode::Release, + }; + (globals, cmd_qemu, overwrite) + }); - (globals, cmd, overwrite) - }) - .run_and_coalesce() + build.chain(run).run_and_coalesce() } /// Check the binary sizes of examples -- cgit v1.2.3 From deeb3877f061fb71389ec7730c6c21e81e9e3050 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sat, 15 Apr 2023 22:40:25 +0200 Subject: Improve locality of error messages & ExampleBuild + Qemu commands, and indicate failure earlier --- xtask/src/cargo_commands.rs | 50 +++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index 42895d8..2e30997 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -312,30 +312,36 @@ pub fn qemu_run_examples<'c>( let target = backend.to_target(); let features = Some(target.and_features(backend.to_rtic_feature())); - let build = examples_iter(examples).map(|example| { - let cmd_build = CargoCommand::ExampleBuild { - // We need to be in the correct - cargoarg: &None, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - }; - (globals, cmd_build, overwrite) - }); + examples_iter(examples) + .flat_map(|example| { + let cmd_build = CargoCommand::ExampleBuild { + cargoarg: &None, + example, + target, + features: features.clone(), + mode: BuildMode::Release, + }; - let run = examples_iter(examples).map(|example| { - let cmd_qemu = CargoCommand::Qemu { - cargoarg, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - }; - (globals, cmd_qemu, overwrite) - }); + let cmd_qemu = CargoCommand::Qemu { + cargoarg, + example, + target, + features: features.clone(), + mode: BuildMode::Release, + }; + + #[cfg(not(feature = "rayon"))] + { + [cmd_build, cmd_qemu].into_iter() + } - build.chain(run).run_and_coalesce() + #[cfg(feature = "rayon")] + { + [cmd_build, cmd_qemu].into_par_iter() + } + }) + .map(|cmd| (globals, cmd, overwrite)) + .run_and_coalesce() } /// Check the binary sizes of examples -- cgit v1.2.3 From 9dc9f492639daace5222562c124846fb0d3cb154 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sat, 15 Apr 2023 23:22:00 +0200 Subject: Use chdir() instead of unstable option, also confirm whenver a command succeeds because why not --- xtask/src/cargo_commands.rs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index 2e30997..ec91eae 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use crate::{ argument_parsing::{Backends, BuildOrCheck, ExtraArguments, Globals, PackageOpt, TestMetadata}, command::{BuildMode, CargoCommand}, @@ -186,6 +188,7 @@ pub fn cargo_example<'c>( target: backend.to_target(), features, mode: BuildMode::Release, + dir: Some(PathBuf::from("./rtic")), }, }; (globals, command, false) @@ -320,6 +323,7 @@ pub fn qemu_run_examples<'c>( target, features: features.clone(), mode: BuildMode::Release, + dir: Some(PathBuf::from("./rtic")), }; let cmd_qemu = CargoCommand::Qemu { @@ -328,6 +332,7 @@ pub fn qemu_run_examples<'c>( target, features: features.clone(), mode: BuildMode::Release, + dir: Some(PathBuf::from("./rtic")), }; #[cfg(not(feature = "rayon"))] @@ -363,6 +368,7 @@ pub fn build_and_check_size<'c>( target, features: features.clone(), mode: BuildMode::Release, + dir: Some(PathBuf::from("./rtic")), }; if let Err(err) = command_parser(globals, &cmd, false) { error!("{err}"); @@ -375,6 +381,7 @@ pub fn build_and_check_size<'c>( features: features.clone(), mode: BuildMode::Release, arguments: arguments.clone(), + dir: Some(PathBuf::from("./rtic")), }; (globals, cmd, false) }); -- cgit v1.2.3 From 404867cdf92990cb0aba415dfbee97c7fef78b60 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sun, 16 Apr 2023 09:44:30 +0200 Subject: CargoCommand can take any package --- xtask/src/cargo_commands.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index ec91eae..c290e95 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -114,14 +114,14 @@ pub fn cargo<'c>( let command = match operation { BuildOrCheck::Check => CargoCommand::Check { cargoarg, - package: Some(package), + package: Some(package.name()), target, features, mode: BuildMode::Release, }, BuildOrCheck::Build => CargoCommand::Build { cargoarg, - package: Some(package), + package: Some(package.name()), target, features, mode: BuildMode::Release, @@ -224,7 +224,7 @@ pub fn cargo_clippy<'c>( globals, CargoCommand::Clippy { cargoarg, - package: Some(package), + package: Some(package.name()), target, features, }, @@ -247,7 +247,7 @@ pub fn cargo_format<'c>( globals, CargoCommand::Format { cargoarg, - package: Some(p), + package: Some(p.name()), check_only, }, false, -- cgit v1.2.3 From b59bf686c1e10bb8068d89e43779d7777f553c48 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sun, 16 Apr 2023 11:00:39 +0200 Subject: Redo command building so that we don't repeat as much, and to make it easier to add new ones --- xtask/src/cargo_commands.rs | 46 ++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index c290e95..e2982e4 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -111,6 +111,7 @@ pub fn cargo<'c>( } }) .map(move |(package, target, features)| { + let target = target.into(); let command = match operation { BuildOrCheck::Check => CargoCommand::Check { cargoarg, @@ -118,6 +119,7 @@ pub fn cargo<'c>( target, features, mode: BuildMode::Release, + dir: None, }, BuildOrCheck::Build => CargoCommand::Build { cargoarg, @@ -125,6 +127,7 @@ pub fn cargo<'c>( target, features, mode: BuildMode::Release, + dir: None, }, }; @@ -147,13 +150,21 @@ pub fn cargo_usage_example( let path = format!("examples/{example}"); let command = match operation { - BuildOrCheck::Check => CargoCommand::CheckInDir { + BuildOrCheck::Check => CargoCommand::Check { + cargoarg: &None, mode: BuildMode::Release, - dir: path.into(), + dir: Some(path.into()), + package: None, + target: None, + features: None, }, - BuildOrCheck::Build => CargoCommand::BuildInDir { + BuildOrCheck::Build => CargoCommand::Build { + cargoarg: &None, + package: None, + target: None, + features: None, mode: BuildMode::Release, - dir: path.into(), + dir: Some(path.into()), }, }; (globals, command, false) @@ -178,14 +189,14 @@ pub fn cargo_example<'c>( BuildOrCheck::Check => CargoCommand::ExampleCheck { cargoarg, example, - target: backend.to_target(), + target: Some(backend.to_target()), features, mode: BuildMode::Release, }, BuildOrCheck::Build => CargoCommand::ExampleBuild { cargoarg, example, - target: backend.to_target(), + target: Some(backend.to_target()), features, mode: BuildMode::Release, dir: Some(PathBuf::from("./rtic")), @@ -220,16 +231,14 @@ pub fn cargo_clippy<'c>( } }) .map(move |(package, target, features)| { - ( - globals, - CargoCommand::Clippy { - cargoarg, - package: Some(package.name()), - target, - features, - }, - false, - ) + let command = CargoCommand::Clippy { + cargoarg, + package: Some(package.name()), + target: target.into(), + features, + }; + + (globals, command, false) }); runner.run_and_coalesce() @@ -317,6 +326,7 @@ pub fn qemu_run_examples<'c>( examples_iter(examples) .flat_map(|example| { + let target = target.into(); let cmd_build = CargoCommand::ExampleBuild { cargoarg: &None, example, @@ -361,6 +371,8 @@ pub fn build_and_check_size<'c>( let features = Some(target.and_features(backend.to_rtic_feature())); let runner = examples_iter(examples).map(|example| { + let target = target.into(); + // Make sure the requested example(s) are built let cmd = CargoCommand::ExampleBuild { cargoarg: &Some("--quiet"), @@ -377,7 +389,7 @@ pub fn build_and_check_size<'c>( let cmd = CargoCommand::ExampleSize { cargoarg, example, - target: backend.to_target(), + target, features: features.clone(), mode: BuildMode::Release, arguments: arguments.clone(), -- cgit v1.2.3 From 66a3d02b4585a76615d750c33a37edd5e8fd30e6 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sun, 16 Apr 2023 11:02:49 +0200 Subject: Rename cargo_commands -> run Rename command -> cargo_command --- xtask/src/cargo_commands.rs | 402 -------------------------------------------- 1 file changed, 402 deletions(-) delete mode 100644 xtask/src/cargo_commands.rs (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs deleted file mode 100644 index e2982e4..0000000 --- a/xtask/src/cargo_commands.rs +++ /dev/null @@ -1,402 +0,0 @@ -use std::path::PathBuf; - -use crate::{ - argument_parsing::{Backends, BuildOrCheck, ExtraArguments, Globals, PackageOpt, TestMetadata}, - command::{BuildMode, CargoCommand}, - command_parser, RunResult, -}; -use log::error; - -#[cfg(feature = "rayon")] -use rayon::prelude::*; - -use iters::*; - -#[derive(Debug)] -pub enum FinalRunResult<'c> { - Success(CargoCommand<'c>, RunResult), - Failed(CargoCommand<'c>, RunResult), - CommandError(CargoCommand<'c>, anyhow::Error), -} - -fn run_and_convert<'a>( - (global, command, overwrite): (&Globals, CargoCommand<'a>, bool), -) -> FinalRunResult<'a> { - // Run the command - let result = command_parser(global, &command, overwrite); - - let output = match result { - // If running the command succeeded without looking at any of the results, - // log the data and see if the actual execution was succesfull too. - Ok(result) => { - if result.exit_status.success() { - FinalRunResult::Success(command, result) - } else { - FinalRunResult::Failed(command, result) - } - } - // If it didn't and some IO error occured, just panic - Err(e) => FinalRunResult::CommandError(command, e), - }; - - log::trace!("Final result: {output:?}"); - - output -} - -pub trait CoalescingRunner<'c> { - /// Run all the commands in this iterator, and coalesce the results into - /// one error (if any individual commands failed) - fn run_and_coalesce(self) -> Vec>; -} - -#[cfg(not(feature = "rayon"))] -mod iters { - use super::*; - - pub fn examples_iter(examples: &[String]) -> impl Iterator { - examples.into_iter() - } - - impl<'g, 'c, I> CoalescingRunner<'c> for I - where - I: Iterator, bool)>, - { - fn run_and_coalesce(self) -> Vec> { - self.map(run_and_convert).collect() - } - } -} - -#[cfg(feature = "rayon")] -mod iters { - use super::*; - - pub fn examples_iter(examples: &[String]) -> impl ParallelIterator { - examples.into_par_iter() - } - - impl<'g, 'c, I> CoalescingRunner<'c> for I - where - I: ParallelIterator, bool)>, - { - fn run_and_coalesce(self) -> Vec> { - self.map(run_and_convert).collect() - } - } -} - -/// Cargo command to either build or check -pub fn cargo<'c>( - globals: &Globals, - operation: BuildOrCheck, - cargoarg: &'c Option<&'c str>, - package: &'c PackageOpt, - backend: Backends, -) -> Vec> { - let runner = package - .packages() - .flat_map(|package| { - let target = backend.to_target(); - let features = package.features(target, backend, globals.partial); - - #[cfg(feature = "rayon")] - { - features.into_par_iter().map(move |f| (package, target, f)) - } - - #[cfg(not(feature = "rayon"))] - { - features.into_iter().map(move |f| (package, target, f)) - } - }) - .map(move |(package, target, features)| { - let target = target.into(); - let command = match operation { - BuildOrCheck::Check => CargoCommand::Check { - cargoarg, - package: Some(package.name()), - target, - features, - mode: BuildMode::Release, - dir: None, - }, - BuildOrCheck::Build => CargoCommand::Build { - cargoarg, - package: Some(package.name()), - target, - features, - mode: BuildMode::Release, - dir: None, - }, - }; - - (globals, command, false) - }); - - runner.run_and_coalesce() -} - -/// Cargo command to build a usage example. -/// -/// The usage examples are in examples/ -pub fn cargo_usage_example( - globals: &Globals, - operation: BuildOrCheck, - usage_examples: Vec, -) -> Vec> { - examples_iter(&usage_examples) - .map(|example| { - let path = format!("examples/{example}"); - - let command = match operation { - BuildOrCheck::Check => CargoCommand::Check { - cargoarg: &None, - mode: BuildMode::Release, - dir: Some(path.into()), - package: None, - target: None, - features: None, - }, - BuildOrCheck::Build => CargoCommand::Build { - cargoarg: &None, - package: None, - target: None, - features: None, - mode: BuildMode::Release, - dir: Some(path.into()), - }, - }; - (globals, command, false) - }) - .run_and_coalesce() -} - -/// Cargo command to either build or check all examples -/// -/// The examples are in rtic/examples -pub fn cargo_example<'c>( - globals: &Globals, - operation: BuildOrCheck, - cargoarg: &'c Option<&'c str>, - backend: Backends, - examples: &'c [String], -) -> Vec> { - let runner = examples_iter(examples).map(|example| { - let features = Some(backend.to_target().and_features(backend.to_rtic_feature())); - - let command = match operation { - BuildOrCheck::Check => CargoCommand::ExampleCheck { - cargoarg, - example, - target: Some(backend.to_target()), - features, - mode: BuildMode::Release, - }, - BuildOrCheck::Build => CargoCommand::ExampleBuild { - cargoarg, - example, - target: Some(backend.to_target()), - features, - mode: BuildMode::Release, - dir: Some(PathBuf::from("./rtic")), - }, - }; - (globals, command, false) - }); - runner.run_and_coalesce() -} - -/// Run cargo clippy on selected package -pub fn cargo_clippy<'c>( - globals: &Globals, - cargoarg: &'c Option<&'c str>, - package: &'c PackageOpt, - backend: Backends, -) -> Vec> { - let runner = package - .packages() - .flat_map(|package| { - let target = backend.to_target(); - let features = package.features(target, backend, globals.partial); - - #[cfg(feature = "rayon")] - { - features.into_par_iter().map(move |f| (package, target, f)) - } - - #[cfg(not(feature = "rayon"))] - { - features.into_iter().map(move |f| (package, target, f)) - } - }) - .map(move |(package, target, features)| { - let command = CargoCommand::Clippy { - cargoarg, - package: Some(package.name()), - target: target.into(), - features, - }; - - (globals, command, false) - }); - - runner.run_and_coalesce() -} - -/// Run cargo fmt on selected package -pub fn cargo_format<'c>( - globals: &Globals, - cargoarg: &'c Option<&'c str>, - package: &'c PackageOpt, - check_only: bool, -) -> Vec> { - let runner = package.packages().map(|p| { - ( - globals, - CargoCommand::Format { - cargoarg, - package: Some(p.name()), - check_only, - }, - false, - ) - }); - runner.run_and_coalesce() -} - -/// Run cargo doc -pub fn cargo_doc<'c>( - globals: &Globals, - cargoarg: &'c Option<&'c str>, - backend: Backends, - arguments: &'c Option, -) -> Vec> { - let features = Some(backend.to_target().and_features(backend.to_rtic_feature())); - - let command = CargoCommand::Doc { - cargoarg, - features, - arguments: arguments.clone(), - }; - - vec![run_and_convert((globals, command, false))] -} - -/// Run cargo test on the selected package or all packages -/// -/// If no package is specified, loop through all packages -pub fn cargo_test<'c>( - globals: &Globals, - package: &'c PackageOpt, - backend: Backends, -) -> Vec> { - package - .packages() - .map(|p| (globals, TestMetadata::match_package(p, backend), false)) - .run_and_coalesce() -} - -/// Use mdbook to build the book -pub fn cargo_book<'c>( - globals: &Globals, - arguments: &'c Option, -) -> Vec> { - vec![run_and_convert(( - globals, - CargoCommand::Book { - arguments: arguments.clone(), - }, - false, - ))] -} - -/// Run examples -/// -/// Supports updating the expected output via the overwrite argument -pub fn qemu_run_examples<'c>( - globals: &Globals, - cargoarg: &'c Option<&'c str>, - backend: Backends, - examples: &'c [String], - overwrite: bool, -) -> Vec> { - let target = backend.to_target(); - let features = Some(target.and_features(backend.to_rtic_feature())); - - examples_iter(examples) - .flat_map(|example| { - let target = target.into(); - let cmd_build = CargoCommand::ExampleBuild { - cargoarg: &None, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - dir: Some(PathBuf::from("./rtic")), - }; - - let cmd_qemu = CargoCommand::Qemu { - cargoarg, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - dir: Some(PathBuf::from("./rtic")), - }; - - #[cfg(not(feature = "rayon"))] - { - [cmd_build, cmd_qemu].into_iter() - } - - #[cfg(feature = "rayon")] - { - [cmd_build, cmd_qemu].into_par_iter() - } - }) - .map(|cmd| (globals, cmd, overwrite)) - .run_and_coalesce() -} - -/// Check the binary sizes of examples -pub fn build_and_check_size<'c>( - globals: &Globals, - cargoarg: &'c Option<&'c str>, - backend: Backends, - examples: &'c [String], - arguments: &'c Option, -) -> Vec> { - let target = backend.to_target(); - let features = Some(target.and_features(backend.to_rtic_feature())); - - let runner = examples_iter(examples).map(|example| { - let target = target.into(); - - // Make sure the requested example(s) are built - let cmd = CargoCommand::ExampleBuild { - cargoarg: &Some("--quiet"), - example, - target, - features: features.clone(), - mode: BuildMode::Release, - dir: Some(PathBuf::from("./rtic")), - }; - if let Err(err) = command_parser(globals, &cmd, false) { - error!("{err}"); - } - - let cmd = CargoCommand::ExampleSize { - cargoarg, - example, - target, - features: features.clone(), - mode: BuildMode::Release, - arguments: arguments.clone(), - dir: Some(PathBuf::from("./rtic")), - }; - (globals, cmd, false) - }); - - runner.run_and_coalesce() -} -- cgit v1.2.3