Fix #4072 and Fix Part of #4938: Revised profile chooser UI #524
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Contains jobs corresponding to publishing coverage reports generated by code_coverage.yml. | |
name: Comment Coverage Report | |
# Controls when the action will run. Triggers the workflow on pull request events | |
# (opened, synchronize, reopened) | |
on: | |
pull_request_target: | |
types: [opened, synchronize, reopened] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
check_code_coverage_completed: | |
name: Check code coverage completed | |
runs-on: ubuntu-latest | |
outputs: | |
conclusion: ${{ steps.wait-for-coverage.outputs.run-conclusion }} | |
steps: | |
- name: Wait for code coverage to complete | |
id: wait-for-coverage | |
uses: ArcticLampyrid/action-wait-for-workflow@v1.2.0 | |
with: | |
workflow: code_coverage.yml | |
sha: auto | |
allowed-conclusions: | | |
success | |
failure | |
action_required | |
- name: Conclusion Analysis | |
if: steps.wait-for-coverage.outputs.run-conclusion == 'action_required' | |
run: | | |
echo "::error::First-time contributor workflows require manual approval. After approval, please re-run the comment coverage workflows to post the coverage report." | |
exit 1 | |
comment_coverage_report: | |
name: Comment Code Coverage Report | |
needs: check_code_coverage_completed | |
permissions: | |
pull-requests: write | |
# The expression if: ${{ !cancelled() }} runs a job or step regardless of its success or failure while responding to cancellations, | |
# serving as a cancellation-compliant alternative to if: ${{ always() }} in concurrent workflows. | |
if: ${{ !cancelled() }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Find the latest Code Coverage Report Comment | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
const comments = await github.paginate(github.rest.issues.listComments, { | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: ${{ github.event.pull_request.number }}, | |
}); | |
for (let i = comments.length - 1; i >= 0; i--) { | |
if (comments[i].body.includes("## Coverage Report")) { | |
const latestCodeCoverageComment = comments[i].body; | |
require('fs').writeFileSync('latest_code_coverage_comment.md', latestCodeCoverageComment, 'utf8'); | |
return | |
} | |
} | |
- name: Find CI workflow run for PR | |
id: find-workflow-run | |
uses: actions/github-script@v7 | |
continue-on-error: true | |
with: | |
script: | | |
// Find the last successful workflow run for the current PR's head | |
const { owner, repo } = context.repo; | |
const runsResponse = await github.rest.actions.listWorkflowRuns({ | |
owner, | |
repo, | |
workflow_id: 'code_coverage.yml', | |
event: 'pull_request', | |
head_sha: '${{ github.event.pull_request.head.sha }}', | |
}); | |
const runs = runsResponse.data.workflow_runs; | |
runs.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); | |
const run = runs[0]; | |
if(!run) { | |
core.setFailed('Could not find a successful workflow run for the PR'); | |
return; | |
} | |
core.setOutput('run-id', run.id); | |
- name: Download Generated Markdown Report | |
uses: actions/download-artifact@v4 | |
if: ${{ !cancelled() }} # IMPORTANT: Upload reports regardless of success or failure status | |
with: | |
name: final-coverage-report | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
run-id: ${{ steps.find-workflow-run.outputs.run-id }} | |
- name: Compare Current Coverage Report with the Latest Coverage Report | |
run: | | |
if [ -f latest_code_coverage_comment.md ]; then | |
sed -i -e '$a\' CoverageReport.md | |
sed -i -e '$a\' latest_code_coverage_comment.md | |
if diff -B CoverageReport.md latest_code_coverage_comment.md > /dev/null; then | |
echo "No changes detected; skipping coverage comment." | |
echo "skip_coverage_comment=true" >> $GITHUB_ENV | |
else | |
echo "Changes detected; proceeding with the coverage comment." | |
diff CoverageReport.md latest_code_coverage_comment.md || true | |
echo "skip_coverage_comment=false" >> $GITHUB_ENV | |
fi | |
else | |
echo "No previous coverage comment found to compare; posting evaluated coverage comment." | |
echo "skip_coverage_comment=false" >> $GITHUB_ENV | |
fi | |
- name: Upload Coverage Report as PR Comment | |
if: ${{ env.skip_coverage_comment == 'false' }} | |
uses: peter-evans/create-or-update-comment@v4 | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
body-path: 'CoverageReport.md' |