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