django-components/.github/workflows/pr-benchmark-comment.yml
dependabot[bot] 39391f2a32
build(deps): bump actions/github-script from 7 to 8
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-01 22:01:02 +00:00

99 lines
3.9 KiB
YAML

# Run benchmark report on pull requests to master.
# The report is added to the PR as a comment.
#
# NOTE: When making a PR from a fork, the worker doesn't have sufficient
# access to make comments on the target repo's PR. And so, this workflow
# is split to two parts:
#
# 1. Benchmarking and saving results as artifacts
# 2. Downloading the results and commenting on the PR
#
# See https://stackoverflow.com/a/71683208/9788634
name: PR benchmark comment
on:
workflow_run:
# NOTE: The name here MUST match the name of the workflow that generates the data
workflows: [PR benchmarks generate]
types:
- completed
jobs:
download:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
repository-projects: write
steps:
########## USE FOR DEBUGGING ##########
- name: Debug workflow run info
uses: actions/github-script@v8
with:
script: |
console.log('Workflow Run ID:', context.payload.workflow_run.id);
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id
});
console.log('Available artifacts:');
console.log(JSON.stringify(artifacts.data, null, 2));
console.log(`PRs: ` + JSON.stringify(context.payload.workflow_run.pull_requests));
#########################################
# NOTE: The next two steps (download and unzip) are equivalent to using `actions/download-artifact@v4`
# However, `download-artifact` was not picking up the artifact, while the REST client does.
- name: Download benchmark results
uses: actions/github-script@v8
with:
script: |
const fs = require('fs');
// Find the artifact that was generated by the "pr-benchmark-generate" workflow
const allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
// Explicitly search the workflow run that generated the the results
// (AKA the "pr-benchmark-generate" workflow).
run_id: context.payload.workflow_run.id,
});
const matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "benchmark_results"
})[0];
// Download the artifact
const download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
fs.writeFileSync(
`${process.env.GITHUB_WORKSPACE}/benchmark_results.zip`,
Buffer.from(download.data),
);
- name: Unzip artifact
run: unzip benchmark_results.zip
- name: Comment on PR
# See https://github.com/actions/github-script
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
const results = fs.readFileSync('./benchmark_results.md', 'utf8');
const issue_number = Number.parseInt(fs.readFileSync('./pr_number.txt', 'utf8'));
const body = `## Performance Benchmark Results\n\nComparing PR changes against master branch:\n\n${results}`;
// See https://octokit.github.io/rest.js/v21/#issues-create-comment
await github.rest.issues.createComment({
body: body,
// See https://github.com/actions/toolkit/blob/662b9d91f584bf29efbc41b86723e0e376010e41/packages/github/src/context.ts#L66
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue_number,
});