From 86f4c08b81e2129b5d1012c1350e68e3c0560282 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 28 Oct 2021 18:29:57 +0200 Subject: Rename executor to driver --- crates/driver/src/main.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 crates/driver/src/main.rs (limited to 'crates/driver/src/main.rs') diff --git a/crates/driver/src/main.rs b/crates/driver/src/main.rs new file mode 100644 index 0000000..286480d --- /dev/null +++ b/crates/driver/src/main.rs @@ -0,0 +1,56 @@ +mod args; +mod context; +mod driver; +mod recipe; +mod resolve; +mod task; +mod template; + +use clap::Parser; + +use runner::Runner; + +#[derive(Parser)] +#[clap(version = clap::crate_version!())] +struct Opts { + /// Allow N jobs at once. + /// Defaults to the number of available CPUs + #[clap(short, long)] + jobs: Option, + /// The tasks to run + #[clap(name = "task", required = true)] + tasks: Vec, +} + +fn main() { + let opts: Opts = Opts::parse(); + + let runner = unsafe { Runner::new(&runner::Options { jobs: opts.jobs }) }.unwrap(); + + let ctx = context::Context::new(recipe::read_recipes("examples").unwrap()); + + let mut rsv = resolve::Resolver::new(&ctx); + + for task in opts.tasks { + let task_ref = match ctx.parse(&task) { + Ok(task_ref) => task_ref, + Err(err) => { + eprintln!("{}", err); + std::process::exit(1); + } + }; + let errors = rsv.add_goal(&task_ref); + if !errors.is_empty() { + for error in errors { + eprintln!("{}", error); + } + std::process::exit(1); + } + } + let taskset = rsv.into_taskset(); + let mut driver = driver::Driver::new(&ctx, taskset).unwrap(); + if let Err(error) = driver.run(&runner) { + eprintln!("{}", error); + std::process::exit(1); + } +} -- cgit v1.2.3