mirror of
https://github.com/apple/container.git
synced 2026-07-12 12:37:02 +00:00
cec58654ac
There is a bug in the artifact downloading where a single artifact matching a pattern is extracted flat to the working directory without creating a subdirectory. This meant the glob `pr-coverage-*/pr-number.txt` never matched, silently skipping the comment step on every run. Fixed by using `merge-multiple: true` with an explicit `path`, giving a deterministic download location regardless of artifact count. ## Type of Change - [X] Bug fix - [ ] New feature - [ ] Breaking change - [ ] Documentation update ## Motivation and Context Fix the GitHub actions to post coverage numbers ## Testing - [ ] Tested locally - [ ] Added/updated tests - [ ] Added/updated docs
85 lines
2.9 KiB
YAML
85 lines
2.9 KiB
YAML
name: PR Coverage Comment
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows: ["container project - PR build"]
|
|
types:
|
|
- completed
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
comment:
|
|
name: Post coverage comment
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
permissions:
|
|
contents: read
|
|
actions: read
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- name: Download coverage artifact
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
run-id: ${{ github.event.workflow_run.id }}
|
|
pattern: pr-coverage-*
|
|
merge-multiple: true
|
|
path: pr-coverage-data
|
|
id: download-artifact
|
|
continue-on-error: true
|
|
|
|
- name: Check artifact exists
|
|
if: steps.download-artifact.outcome == 'success'
|
|
id: check-artifact
|
|
run: |
|
|
if [ -f pr-coverage-data/pr-number.txt ]; then
|
|
echo "found=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "No coverage artifact found — coverage job may have failed."
|
|
echo "found=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Validate and post comment
|
|
if: steps.check-artifact.outputs.found == 'true'
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
PR_NUMBER=$(cat pr-coverage-data/pr-number.txt)
|
|
grep -qxE '[0-9]+' <<< "$PR_NUMBER" || { echo "Invalid PR number: ${PR_NUMBER}"; exit 1; }
|
|
|
|
UNIT=$(cat pr-coverage-data/unit-line-coverage.txt)
|
|
grep -qxE '[0-9]+(\.[0-9]+)?' <<< "$UNIT" || { echo "Invalid unit coverage: ${UNIT}"; exit 1; }
|
|
|
|
INTEGRATION=$(cat pr-coverage-data/integration-line-coverage.txt)
|
|
grep -qxE '[0-9]+(\.[0-9]+)?' <<< "$INTEGRATION" || { echo "Invalid integration coverage: ${INTEGRATION}"; exit 1; }
|
|
|
|
COMBINED=$(cat pr-coverage-data/combined-line-coverage.txt)
|
|
grep -qxE '[0-9]+(\.[0-9]+)?' <<< "$COMBINED" || { echo "Invalid combined coverage: ${COMBINED}"; exit 1; }
|
|
|
|
MARKER="<!-- coverage-bot -->"
|
|
BODY=$(cat <<EOF
|
|
${MARKER}
|
|
## Code Coverage
|
|
|
|
| Tier | Line Coverage |
|
|
|------|--------------|
|
|
| Unit | ${UNIT}% |
|
|
| Integration | ${INTEGRATION}% |
|
|
| Combined | ${COMBINED}% |
|
|
EOF
|
|
)
|
|
|
|
EXISTING_COMMENT_ID=$(gh api "repos/${REPO}/issues/${PR_NUMBER}/comments" --paginate --jq ".[] | select(.body | contains(\"${MARKER}\")) | .id" | head -1)
|
|
|
|
if [ -n "${EXISTING_COMMENT_ID}" ]; then
|
|
gh api "repos/${REPO}/issues/comments/${EXISTING_COMMENT_ID}" -X PATCH -f body="${BODY}"
|
|
echo "Updated existing coverage comment ${EXISTING_COMMENT_ID}"
|
|
else
|
|
gh pr comment "${PR_NUMBER}" --repo "${REPO}" --body "${BODY}"
|
|
echo "Created new coverage comment"
|
|
fi
|