SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
1851bae verified
Raw
History Blame Contribute Delete
3.53 kB
use gh_workflow::generate::Generate;
use gh_workflow::*;
use crate::jobs::{self, ReleaseBuilderJob};
use crate::steps::setup_protoc;
/// Generate the main CI workflow
pub fn generate_ci_workflow() {
// Create a basic build job for CI with coverage
let build_job = Job::new("Build and Test")
.permissions(Permissions::default().contents(Level::Read))
.add_step(Step::new("Checkout Code").uses("actions", "checkout", "v6"))
.add_step(setup_protoc())
.add_step(Step::toolchain().add_stable())
.add_step(Step::new("Install cargo-llvm-cov").run("cargo install cargo-llvm-cov"))
.add_step(
Step::new("Generate coverage")
.run("cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info"),
);
// Create a performance test job to ensure zsh rprompt stays fast
let perf_test_job = Job::new("zsh-rprompt-performance")
.name("Performance: zsh rprompt")
.permissions(Permissions::default().contents(Level::Read))
.add_step(Step::new("Checkout Code").uses("actions", "checkout", "v6"))
.add_step(setup_protoc())
.add_step(Step::toolchain().add_stable())
.add_step(
Step::new("Run performance benchmark")
.run("./scripts/benchmark.sh --threshold 60 zsh rprompt"),
);
let draft_release_job = jobs::create_draft_release_job("build");
let draft_release_pr_job = jobs::create_draft_release_pr_job();
let events = Event::default()
.push(Push::default().add_branch("main").add_tag("v*"))
.pull_request(
PullRequest::default()
.add_type(PullRequestType::Opened)
.add_type(PullRequestType::Synchronize)
.add_type(PullRequestType::Reopened)
.add_type(PullRequestType::Labeled)
.add_branch("main"),
);
let build_release_pr_job =
ReleaseBuilderJob::new("${{ needs.draft_release_pr.outputs.crate_release_name }}")
.into_job()
.add_needs("draft_release_pr")
.cond(Expression::new(
[
"github.event_name == 'pull_request'",
"contains(github.event.pull_request.labels.*.name, 'ci: build all targets')",
]
.join(" && "),
));
let build_release_job =
ReleaseBuilderJob::new("${{ needs.draft_release.outputs.crate_release_name }}")
.release_id("${{ needs.draft_release.outputs.crate_release_id }}")
.into_job()
.add_needs("draft_release")
.cond(Expression::new(
[
"github.event_name == 'push'",
"github.ref == 'refs/heads/main'",
]
.join(" && "),
));
let workflow = Workflow::default()
.name("ci")
.add_env(RustFlags::deny("warnings"))
.on(events)
.concurrency(Concurrency::default().group("${{ github.workflow }}-${{ github.ref }}"))
.add_env(("OPENROUTER_API_KEY", "${{secrets.OPENROUTER_API_KEY}}"))
.add_job("build", build_job)
.add_job("zsh_rprompt_perf", perf_test_job)
.add_job("draft_release", draft_release_job)
.add_job("draft_release_pr", draft_release_pr_job)
.add_job("build_release", build_release_job)
.add_job("build_release_pr", build_release_pr_job);
Generate::new(workflow).name("ci.yml").generate().unwrap();
}