1use anyhow::{Context, Result};
 2use clap::Parser;
 3use std::fs;
 4use std::path::Path;
 5
 6mod danger;
 7mod nix_build;
 8// mod release;
 9mod run_bundling;
10// mod run_tests;
11
12mod runners;
13mod steps;
14mod vars;
15
16#[derive(Parser)]
17pub struct GenerateWorkflowArgs {}
18
19pub fn run_workflows(_: GenerateWorkflowArgs) -> Result<()> {
20    let dir = Path::new(".github/workflows");
21
22    let workflows = vec![
23        ("danger.yml", danger::danger()),
24        ("nix_build.yml", nix_build::nix_build()),
25        ("run_bundling.yml", run_bundling::run_bundling()),
26        // ("run_tests.yml", run_tests::run_tests()),
27        // ("release.yml", release::release()),
28    ];
29    fs::create_dir_all(dir)
30        .with_context(|| format!("Failed to create directory: {}", dir.display()))?;
31
32    for (filename, workflow) in workflows {
33        let content = workflow
34            .to_string()
35            .map_err(|e| anyhow::anyhow!("{}: {:?}", filename, e))?;
36        let content = format!(
37            "# Generated from xtask::workflows::{}\n# Rebuild with `cargo xtask workflows`.\n{}",
38            workflow.name.unwrap(),
39            content
40        );
41        let file_path = dir.join(filename);
42        fs::write(&file_path, content)?;
43    }
44
45    Ok(())
46}