Try to make it work

Conrad Irwin created

Change summary

.github/workflows/compare_perf.yml                | 18 +++++++++--
tooling/xtask/src/tasks/workflows/compare_perf.rs | 24 ++++++++++++----
2 files changed, 32 insertions(+), 10 deletions(-)

Detailed changes

.github/workflows/compare_perf.yml 🔗

@@ -14,7 +14,7 @@ on:
         type: string
 jobs:
   run_perf:
-    runs-on: namespace-profile-2x4-ubuntu-2404
+    runs-on: namespace-profile-16x32-ubuntu-2204
     steps:
     - name: steps::checkout_repo
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
@@ -23,11 +23,21 @@ jobs:
     - name: compare_perf::run_perf::echo_inputs
       run: echo ${{ inputs.base }} ${{ inputs.head }}
       shell: bash -euxo pipefail {0}
-    - name: compare_perf::run_perf::create_results
-      run: mkdir -p target; echo 'Perf is *much* better now' > target/results.md
+    - name: git checkout ${{ inputs.base }}
+      run: git checkout {ref_name}
+    - name: compare_perf::run_perf::cargo_perf_test
+      run: cargo perf-test -p gpui -- --json=${{ inputs.base }}
+      shell: bash -euxo pipefail {0}
+    - name: git checkout ${{ inputs.head }}
+      run: git checkout {ref_name}
+    - name: compare_perf::run_perf::cargo_perf_test
+      run: cargo perf-test -p gpui -- --json=${{ inputs.head }}
+      shell: bash -euxo pipefail {0}
+    - name: compare_perf::run_perf::compare_runs
+      run: cargo perf-compare ${{ inputs.base }} ${{ inputs.head }} --save=results.md
       shell: bash -euxo pipefail {0}
     - name: '@actions/upload-artifact results.md'
       uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
       with:
         name: results.md
-        path: target/results.md
+        path: results.md

tooling/xtask/src/tasks/workflows/compare_perf.rs 🔗

@@ -6,7 +6,6 @@ use crate::tasks::workflows::{
     vars::Input,
 };
 
-/// Generates the danger.yml workflow
 pub fn compare_perf() -> Workflow {
     let head = Input::string("head", None);
     let base = Input::string("base", None);
@@ -25,16 +24,29 @@ pub fn run_perf(base: &Input, head: &Input) -> NamedJob {
         named::bash(&format!("echo {} {}", base.var(), head.var()))
     }
 
-    fn create_results() -> Step<Run> {
-        named::bash("mkdir -p target; echo 'Perf is *much* better now' > target/results.md")
+    fn cargo_perf_test(ref_name: String) -> Step<Run> {
+        named::bash(&format!("cargo perf-test -p gpui -- --json={ref_name}"))
+    }
+
+    fn git_checkout(ref_name: String) -> Step<Run> {
+        Step::new(&format!("git checkout {ref_name}")).run("git checkout {ref_name}")
+    }
+
+    fn compare_runs(head: String, base: String) -> Step<Run> {
+        // TODO: this should really be swapped...
+        named::bash(&format!("cargo perf-compare {base} {head} --save=results.md"))
     }
 
     named::job(
         Job::default()
-            .runs_on(runners::LINUX_SMALL)
+            .runs_on(runners::LINUX_DEFAULT)
             .add_step(steps::checkout_repo())
             .add_step(echo_inputs(base, head))
-            .add_step(create_results())
-            .add_step(upload_artifact("results.md", "target/results.md")),
+            .add_step(git_checkout(base.var()))
+            .add_step(cargo_perf_test(base.var()))
+            .add_step(git_checkout(head.var()))
+            .add_step(cargo_perf_test(head.var()))
+            .add_step(compare_runs(head.var(), base.var()))
+            .add_step(upload_artifact("results.md", "results.md")),
     )
 }