summaryrefslogtreecommitdiffstats
path: root/crates/driver/src/main.rs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-28 18:29:57 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-28 18:31:02 +0200
commit86f4c08b81e2129b5d1012c1350e68e3c0560282 (patch)
tree750c520fcf6518d96a51d84dd279e437203518d1 /crates/driver/src/main.rs
parentb35a75f4cb5417bb464639079d266fd708549b32 (diff)
downloadrebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.tar
rebel-86f4c08b81e2129b5d1012c1350e68e3c0560282.zip
Rename executor to driver
Diffstat (limited to 'crates/driver/src/main.rs')
-rw-r--r--crates/driver/src/main.rs56
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);
+ }
+}