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(()) }