1use anyhow::{Context, Result};
2use clap::Parser;
3use std::fs;
4use std::path::Path;
5
6mod danger;
7mod nix_build;
8mod release_nightly;
9mod run_bundling;
10
11mod runners;
12mod steps;
13mod vars;
14
15#[derive(Parser)]
16pub struct GenerateWorkflowArgs {}
17
18pub fn run_workflows(_: GenerateWorkflowArgs) -> Result<()> {
19 let dir = Path::new(".github/workflows");
20
21 let workflows = vec![
22 ("danger.yml", danger::danger()),
23 ("nix_build.yml", nix_build::nix_build()),
24 ("run_bundling.yml", run_bundling::run_bundling()),
25 ("release_nightly.yml", release_nightly::release_nightly()),
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}