3b285326e3
This modifies the automated code size comment to edit an existing comment if one already exists instead of always creating a new comment. This reduces noise on pull requests that are repeatedly updated. Signed-off-by: David Lechner <david@pybricks.com>
106 lines
3.2 KiB
YAML
106 lines
3.2 KiB
YAML
name: Code size comment
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows: [Check code size]
|
|
types: [completed]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
comment:
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: 'Download artifact'
|
|
id: download-artifact
|
|
uses: actions/github-script@v6
|
|
with:
|
|
result-encoding: string
|
|
script: |
|
|
const fs = require('fs');
|
|
|
|
const allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
run_id: context.payload.workflow_run.id,
|
|
});
|
|
|
|
const matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
|
|
return artifact.name == "code-size-report"
|
|
});
|
|
|
|
if (matchArtifact.length === 0) {
|
|
console.log('no matching artifact found');
|
|
console.log('result: "skip"');
|
|
|
|
return 'skip';
|
|
}
|
|
|
|
const download = await github.rest.actions.downloadArtifact({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
artifact_id: matchArtifact[0].id,
|
|
archive_format: 'zip',
|
|
});
|
|
|
|
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/code-size-report.zip`, Buffer.from(download.data));
|
|
|
|
console.log('artifact downloaded to `code-size-report.zip`');
|
|
console.log('result: "ok"');
|
|
|
|
return 'ok';
|
|
- name: 'Unzip artifact'
|
|
if: steps.download-artifact.outputs.result == 'ok'
|
|
run: unzip code-size-report.zip
|
|
- name: Post comment to pull request
|
|
if: steps.download-artifact.outputs.result == 'ok'
|
|
uses: actions/github-script@v6
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
const fs = require('fs');
|
|
|
|
const prNumber = Number(fs.readFileSync('pr_number'));
|
|
const codeSizeReport = `Code size report:
|
|
|
|
\`\`\`
|
|
${fs.readFileSync('diff')}
|
|
\`\`\`
|
|
`;
|
|
|
|
const comments = await github.paginate(
|
|
github.rest.issues.listComments,
|
|
{
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: prNumber,
|
|
}
|
|
);
|
|
|
|
comments.reverse();
|
|
|
|
const previousComment = comments.find(comment =>
|
|
comment.user.login === 'github-actions[bot]'
|
|
)
|
|
|
|
// if github-actions[bot] already made a comment, update it,
|
|
// otherwise create a new comment.
|
|
|
|
if (previousComment) {
|
|
await github.rest.issues.updateComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
comment_id: previousComment.id,
|
|
body: codeSizeReport,
|
|
});
|
|
} else {
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: prNumber,
|
|
body: codeSizeReport,
|
|
});
|
|
}
|