Upload Coverage Report (PR) #127
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
name: Upload Coverage Report (PR) | |
on: | |
# This workflow is triggered after every successfull execution | |
# of `Generate Coverage Report` workflow. | |
workflow_run: | |
workflows: ["Generate Coverage Report (PR)"] | |
types: | |
- completed | |
permissions: | |
actions: write | |
contents: write | |
issues: write | |
pull-requests: write | |
jobs: | |
coverage: | |
name: Upload Coverage Report | |
environment: coverage | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Download existing coverage report" | |
id: prepare_report | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
var fs = require('fs'); | |
// List artifacts of the workflow run that triggered this workflow | |
var artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: context.payload.workflow_run.id, | |
}); | |
let codecovReport = artifacts.data.artifacts.filter((artifact) => { | |
return artifact.name == "codecov_report"; | |
}); | |
if (codecovReport.length != 1) { | |
throw new Error("Unexpected number of {codecov_report} artifacts: " + codecovReport.length); | |
} | |
var download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: codecovReport[0].id, | |
archive_format: 'zip', | |
}); | |
fs.writeFileSync('codecov_report.zip', Buffer.from(download.data)); | |
let prNumber = artifacts.data.artifacts.filter((artifact) => { | |
return artifact.name == "pr_number"; | |
}); | |
if (prNumber.length != 1) { | |
throw new Error("Unexpected number of {pr_number} artifacts: " + prNumber.length); | |
} | |
var download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: prNumber[0].id, | |
archive_format: 'zip', | |
}); | |
fs.writeFileSync('pr_number.zip', Buffer.from(download.data)); | |
let commitSha = artifacts.data.artifacts.filter((artifact) => { | |
return artifact.name == "commit_sha"; | |
}); | |
if (commitSha.length != 1) { | |
throw new Error("Unexpected number of {commit_sha} artifacts: " + commitSha.length); | |
} | |
var download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: commitSha[0].id, | |
archive_format: 'zip', | |
}); | |
fs.writeFileSync('commit_sha.zip', Buffer.from(download.data)); | |
- id: parse_previous_artifacts | |
run: | | |
unzip codecov_report.zip | |
unzip pr_number.zip | |
unzip commit_sha.zip | |
echo "Detected PR is: $(<pr_number.txt)" | |
echo "Detected commit_sha is: $(<commit_sha.txt)" | |
# Make the params available as step output | |
echo "override_pr=$(<pr_number.txt)" >> "$GITHUB_OUTPUT" | |
echo "override_commit=$(<commit_sha.txt)" >> "$GITHUB_OUTPUT" | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ steps.parse_previous_artifacts.outputs.override_commit || '' }} | |
path: repo_root | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v5 | |
with: | |
verbose: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ${{ github.workspace }}/codecov.json | |
fail_ci_if_error: true | |
# Manual overrides for these parameters are needed because automatic detection | |
# in codecov-action does not work for non-`pull_request` workflows. | |
# In `main` branch push, these default to empty strings since we want to run | |
# the analysis on HEAD. | |
override_commit: ${{ steps.parse_previous_artifacts.outputs.override_commit || '' }} | |
override_pr: ${{ steps.parse_previous_artifacts.outputs.override_pr || '' }} | |
working-directory: ${{ github.workspace }}/repo_root | |
# Location where coverage report files are searched for | |
directory: ${{ github.workspace }} |