compare_perf.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::run_bundling::upload_artifact;
 4use crate::tasks::workflows::steps::FluentBuilder;
 5use crate::tasks::workflows::{
 6    runners,
 7    steps::{self, NamedJob, named},
 8    vars::Input,
 9};
10
11pub fn compare_perf() -> Workflow {
12    let head = Input::string("head", None);
13    let base = Input::string("base", None);
14    let run_perf = run_perf(&base, &head);
15    named::workflow()
16        .on(Event::default().workflow_dispatch(
17            WorkflowDispatch::default()
18                .add_input(head.name, head.input())
19                .add_input(base.name, base.input()),
20        ))
21        .add_job(run_perf.name, run_perf.job)
22}
23
24pub fn run_perf(base: &Input, head: &Input) -> NamedJob {
25    fn cargo_perf_test(ref_name: String) -> Step<Run> {
26        // TODO: vim not gpui, and ideally allow args
27        named::bash(&format!("cargo perf-test -p gpui -- --json={ref_name}"))
28    }
29
30    fn install_hyperfine() -> Step<Run> {
31        named::bash("cargo install hyperfine")
32    }
33
34    fn compare_runs(head: String, base: String) -> Step<Run> {
35        // TODO: this should really be swapped...
36        named::bash(&format!(
37            "cargo perf-compare --save=results.md {base} {head}"
38        ))
39    }
40
41    named::job(
42        Job::default()
43            .runs_on(runners::LINUX_DEFAULT)
44            .add_step(steps::checkout_repo())
45            .add_step(steps::setup_cargo_config(runners::Platform::Linux))
46            .map(steps::install_linux_dependencies)
47            .add_step(install_hyperfine())
48            .add_step(steps::git_checkout(&base.var()))
49            .add_step(cargo_perf_test(base.var()))
50            .add_step(steps::git_checkout(&head.var()))
51            .add_step(cargo_perf_test(head.var()))
52            .add_step(compare_runs(head.var(), base.var()))
53            .add_step(upload_artifact("results.md"))
54            .add_step(steps::cleanup_cargo_config(runners::Platform::Linux)),
55    )
56}