solstice-ci/crates/workflow-runner/src/main.rs

40 lines
1.2 KiB
Rust
Raw Normal View History

use clap::Parser;
use miette::{IntoDiagnostic, Result};
use tracing::{info, error};
#[derive(Parser, Debug)]
#[command(name = "solstice-runner", version, about = "Solstice CI Workflow Runner (VM agent)")]
struct Opts {
/// Path to workflow KDL file
#[arg(long, env = "SOL_WORKFLOW_PATH")]
workflow: String,
}
#[tokio::main(flavor = "multi_thread")]
async fn main() -> Result<()> {
let _t = common::init_tracing("solstice-workflow-runner")?;
let opts = Opts::parse();
let wf = match common::parse_workflow_file(&opts.workflow) {
Ok(wf) => wf,
Err(e) => {
error!(error = %e, "failed to parse workflow KDL");
return Err(e);
}
};
info!(name = ?wf.name, jobs = wf.jobs.len(), "loaded workflow");
for (id, job) in &wf.jobs {
println!("Job: {id}");
if let Some(ro) = &job.runs_on { println!(" runs_on: {ro}"); }
for (idx, step) in job.steps.iter().enumerate() {
let n = step.name.as_deref().unwrap_or("(unnamed)");
println!(" Step {}/{}: {}", idx + 1, job.steps.len(), n);
println!(" run: {}", step.run);
}
}
Ok(())
}