Skip to content

Report Incremental Coverage #10913

Report Incremental Coverage

Report Incremental Coverage #10913

name: Report Incremental Coverage
# Runs when the build and test workflow completes. This will run with full
# privileges, even if the other workflow doesn't. That allows us to leave PR
# comments, when we would not be able to do so otherwise.
on:
workflow_run:
workflows: [Build and Test]
types: [completed]
jobs:
report:
if: ${{ github.event.workflow_run.event == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Compute incremental code coverage
id: compute
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.SHAKA_BOT_TOKEN }}
# Fetches the coverage data from the run that triggered the report,
# parses it, compares it to the changed lines in the PR, and computes
# the incremental code coverage.
run: |
python .github/workflows/compute-incremental-coverage.py \
--repo ${{ github.repository }} \
--run-id ${{ github.event.workflow_run.id }}
- name: Report incremental code coverage
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.SHAKA_BOT_TOKEN }}
PR_NUMBER: ${{ steps.compute.outputs.pr_number }}
MESSAGE: "Incremental code coverage: ${{ steps.compute.outputs.coverage }}"
COMMENT_INCLUDES: "Incremental code coverage: "
COMMENT_USER: "shaka-bot"
run: |
# Look for an old comment
jq_filter=".[] | select((.user.login == \"$COMMENT_USER\") and (.body | startswith(\"$COMMENT_INCLUDES\"))) | .id"
gh api \
/repos/${{ github.repository }}/issues/$PR_NUMBER/comments \
| jq "$jq_filter" > old-comment-id
if [[ -z "$(cat old-comment-id)" ]]; then
# Create a new comment
gh api \
--method POST \
/repos/${{ github.repository }}/issues/$PR_NUMBER/comments \
-F "body=$MESSAGE"
else
# Update an old comment
gh api \
--method PATCH \
/repos/${{ github.repository }}/issues/comments/$(cat old-comment-id) \
-F "body=$MESSAGE"
fi