mirror of
https://codeberg.org/Toasterson/solstice-ci.git
synced 2026-04-10 21:30:41 +00:00
40 lines
1.2 KiB
Rust
40 lines
1.2 KiB
Rust
|
|
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(())
|
||
|
|
}
|