diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-28 18:29:57 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-28 18:31:02 +0200 |
commit | 86f4c08b81e2129b5d1012c1350e68e3c0560282 (patch) | |
tree | 750c520fcf6518d96a51d84dd279e437203518d1 /crates/driver/src/main.rs | |
parent | b35a75f4cb5417bb464639079d266fd708549b32 (diff) | |
download | rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.tar rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.zip |
Rename executor to driver
Diffstat (limited to 'crates/driver/src/main.rs')
-rw-r--r-- | crates/driver/src/main.rs | 56 |
1 files changed, 56 insertions, 0 deletions
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<usize>, + /// The tasks to run + #[clap(name = "task", required = true)] + tasks: Vec<String>, +} + +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); + } +} |