diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 94cc2f26978..7182b49ac97 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -3,12 +3,12 @@ mod build; mod cargo_command; mod run; -use argument_parsing::ExtraArguments; +use argument_parsing::{ExtraArguments, FormatOpt, PackageOpt}; use clap::Parser; use core::fmt; use std::{path::Path, str}; -use log::{error, info, log_enabled, trace, Level}; +use log::{error, log_enabled, trace, Level}; use crate::{ argument_parsing::{BuildOrCheck, Cli, Commands, Platforms}, @@ -176,10 +176,119 @@ fn main() -> anyhow::Result<()> { Some("--quiet") }; + let formatoptcheckonly = FormatOpt { + // Only check, do not reformat + check: true, + ..Default::default() + }; + + // Default set of all packages + // CI always runs on all packages + let package = PackageOpt::default(); + let final_run_results = match &cli.command { - Commands::AllCi => {} - Commands::Format(args) => cargo_format(globals, &cargologlevel, &args.package, args.check), - Commands::Clippy(args) => cargo_clippy(globals, &cargologlevel, args, backend), + Commands::AllCi(args) => { + // TODO: Reduce code duplication and repetition + let mut results = cargo_format(globals, &cargologlevel, &formatoptcheckonly); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + + results.append(&mut cargo_clippy( + globals, + &cargologlevel, + &package, + backend, + )); + + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + + results.append(&mut cargo( + globals, + BuildOrCheck::Check, + &cargologlevel, + &package, + backend, + )); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + results.append(&mut cargo( + globals, + BuildOrCheck::Build, + &cargologlevel, + &package, + backend, + )); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + + results.append(&mut cargo_example( + globals, + BuildOrCheck::Check, + &cargologlevel, + platform, + backend, + &examples_to_run, + )); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + results.append(&mut cargo_example( + globals, + BuildOrCheck::Build, + &cargologlevel, + platform, + backend, + &examples_to_run, + )); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + results.append(&mut qemu_run_examples( + globals, + &cargologlevel, + platform, + backend, + &examples_to_run, + false, + )); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + + results.append(&mut cargo_doc(globals, &cargologlevel, backend, &None)); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + results.append(&mut cargo_test(globals, &package, backend)); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + results.append(&mut cargo_book(globals, &None)); + if args.failearly { + return handle_results(globals, results) + .map_err(|_| anyhow::anyhow!("Commands failed")); + } + + results + } + Commands::Format(formatopts) => cargo_format(globals, &cargologlevel, formatopts), + Commands::Clippy(packageopts) => { + cargo_clippy(globals, &cargologlevel, packageopts, backend) + } Commands::Check(args) => cargo(globals, BuildOrCheck::Check, &cargologlevel, args, backend), Commands::Build(args) => cargo(globals, BuildOrCheck::Build, &cargologlevel, args, backend), Commands::ExampleCheck => cargo_example(