compare_perf.rs

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