diff options
Diffstat (limited to '.github/workflows/benchmark-comment.yml')
| -rw-r--r-- | .github/workflows/benchmark-comment.yml | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/.github/workflows/benchmark-comment.yml b/.github/workflows/benchmark-comment.yml new file mode 100644 index 00000000..c095162e --- /dev/null +++ b/.github/workflows/benchmark-comment.yml @@ -0,0 +1,90 @@ +name: Benchmark Comment + +on: + workflow_run: + workflows: [Benchmark] + types: [completed] + +jobs: + comment-pr: + name: Post benchmark comment + # Only run when triggered by a pull_request event and the benchmark succeeded. + if: > + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event == 'pull_request' + runs-on: ubuntu-latest + + permissions: + contents: read + actions: read + pull-requests: write + issues: write + + steps: + - uses: actions/checkout@v4 + + - name: Download benchmark results + uses: actions/download-artifact@v4 + with: + run-id: ${{ github.event.workflow_run.id }} + name: benchmark-results + path: current-results + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Download PR number + uses: actions/download-artifact@v4 + with: + run-id: ${{ github.event.workflow_run.id }} + name: pr-number + path: . + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Read PR number + id: pr + run: echo "number=$(cat pr-number.txt)" >> "$GITHUB_OUTPUT" + + - name: Fetch baseline from benchmark-data branch + run: | + git fetch origin benchmark-data 2>/dev/null || true + git show origin/benchmark-data:benchmark-history.json > baseline.json 2>/dev/null \ + || echo "[]" > baseline.json + + - name: Generate comparison comment + run: | + python .github/scripts/compare_benchmarks.py \ + current-results/results.json \ + baseline.json \ + > comment.md + + - name: Post or update PR comment + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const body = fs.readFileSync('comment.md', 'utf8'); + const marker = '<!-- opendc-benchmark-comment -->'; + const fullBody = marker + '\n' + body; + const prNumber = parseInt(fs.readFileSync('pr-number.txt', 'utf8').trim()); + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + }); + + const existing = comments.find(c => c.body.includes(marker)); + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body: fullBody, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: fullBody, + }); + } |
