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@v7 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@v7 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, }); }