diff options
| author | Dante Niewenhuis <d.niewenhuis@hotmail.com> | 2026-05-21 19:04:01 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-21 19:04:01 +1000 |
| commit | 816332cbaf256c405a109d8cc16fec8f15df907e (patch) | |
| tree | cb058fae973f81e86316657e5abba5d4fb8f7e29 /.github/workflows/benchmark.yml | |
| parent | 5b4b6bde235e47fcc7074578673dfea1077771a7 (diff) | |
Added benchmarking to the CI (#423)
* Added benchmarking to the CI
* Updated writing access of benchmark.yml
* Added benchmark-comment.yml that pushes the comment to the PR
* Added read permission
Diffstat (limited to '.github/workflows/benchmark.yml')
| -rw-r--r-- | .github/workflows/benchmark.yml | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 00000000..69c3164f --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,103 @@ +name: Benchmark + +on: + pull_request: + branches: [master] + push: + branches: [master] + workflow_dispatch: + +# Cancel in-flight benchmark runs for the same PR/branch so only the latest commit is benchmarked. +concurrency: + group: benchmark-${{ github.ref }} + cancel-in-progress: true + +jobs: + benchmark: + name: Run CIBenchmark + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: "21" + distribution: temurin + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Run CIBenchmark + run: > + ./gradlew :opendc-experiments:opendc-experiments-base:jmh + -PjmhIncludes=.*CIBenchmark.* + + - name: Upload benchmark results + uses: actions/upload-artifact@v4 + with: + name: benchmark-results + path: opendc-experiments/opendc-experiments-base/build/results/jmh/results.json + retention-days: 7 + + # Store the PR number so the comment workflow (which runs with write permissions) + # knows which PR to comment on. Only needed for pull_request runs. + - name: Save PR number + if: github.event_name == 'pull_request' + run: echo "${{ github.event.pull_request.number }}" > pr-number.txt + + - name: Upload PR number + if: github.event_name == 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: pr-number + path: pr-number.txt + retention-days: 1 + + # ── Master push: store results on the benchmark-data branch ────────────────── + store-results: + name: Store benchmark results + if: github.event_name == 'push' + needs: benchmark + runs-on: ubuntu-latest + + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + - name: Download current results + uses: actions/download-artifact@v4 + with: + name: benchmark-results + path: current-results + + - name: Check out or create benchmark-data branch + run: | + git fetch origin benchmark-data 2>/dev/null || true + if git rev-parse --verify origin/benchmark-data 2>/dev/null; then + git worktree add benchmark-data-dir origin/benchmark-data + else + git worktree add --orphan -b benchmark-data benchmark-data-dir + fi + + - name: Update history + run: | + python .github/scripts/update_history.py \ + current-results/results.json \ + benchmark-data-dir \ + "${{ github.sha }}" + + - name: Commit and push + run: | + git -C benchmark-data-dir config user.name "github-actions[bot]" + git -C benchmark-data-dir config user.email "github-actions[bot]@users.noreply.github.com" + git -C benchmark-data-dir add benchmark-history.json + git -C benchmark-data-dir commit \ + -m "chore: benchmark results for ${{ github.sha }}" + git -C benchmark-data-dir push origin HEAD:benchmark-data |
