-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge #1086: Fix coverage report workflow
9d8174d ci: [#1075] fix coverage report (Jose Celano) 4dd6659 ci: [#1075] remove current coverage workflow (Jose Celano) Pull request description: Fix coverage report workflow. ACKs for top commit: josecelano: ACK 9d8174d Tree-SHA512: da06fd95233b7accfff0d9e56dfd7b0beeff915696f740e146c79864af3ba8e199d54b74586444bbbeaa39bc43995a0464e2595b1fab85f3feea94960c30d08f
- Loading branch information
Showing
5 changed files
with
211 additions
and
87 deletions.
There are no files selected for viewing
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
This file was deleted.
Oops, something went wrong.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
name: Generate Coverage Report | ||
|
||
on: | ||
push: | ||
branches: | ||
- develop | ||
pull_request: | ||
branches: | ||
- develop | ||
|
||
env: | ||
CARGO_TERM_COLOR: always | ||
|
||
jobs: | ||
coverage: | ||
name: Generate Coverage Report | ||
environment: coverage | ||
runs-on: ubuntu-latest | ||
env: | ||
CARGO_INCREMENTAL: "0" | ||
RUSTFLAGS: "-Cinstrument-coverage" | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Install LLVM tools | ||
run: sudo apt-get update && sudo apt-get install -y llvm | ||
|
||
- id: setup | ||
name: Setup Toolchain | ||
uses: dtolnay/rust-toolchain@nightly | ||
with: | ||
toolchain: nightly | ||
components: llvm-tools-preview | ||
|
||
- id: cache | ||
name: Enable Workflow Cache | ||
uses: Swatinem/rust-cache@v2 | ||
|
||
- id: tools | ||
name: Install Tools | ||
uses: taiki-e/install-action@v2 | ||
with: | ||
tool: grcov,cargo-llvm-cov | ||
|
||
- id: coverage | ||
name: Generate Coverage Report | ||
run: | | ||
cargo clean | ||
cargo llvm-cov --all-features --workspace --codecov --output-path ./codecov.json | ||
- name: Store PR number and commit SHA | ||
run: | | ||
echo "Storing PR number ${{ github.event.number }}" | ||
echo "${{ github.event.number }}" > pr_number.txt | ||
echo "Storing commit SHA ${{ github.event.pull_request.head.sha }}" | ||
echo "${{ github.event.pull_request.head.sha }}" > commit_sha.txt | ||
# Workaround for https://github.com/orgs/community/discussions/25220 | ||
# Triggered sub-workflow is not able to detect the original commit/PR which is available | ||
# in this workflow. | ||
- name: Store PR number | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: pr_number | ||
path: pr_number.txt | ||
|
||
- name: Store commit SHA | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: commit_sha | ||
path: commit_sha.txt | ||
|
||
# This stores the coverage report in artifacts. The actual upload to Codecov | ||
# is executed by a different workflow `upload_coverage.yml`. The reason for this | ||
# split is because `on.pull_request` workflows don't have access to secrets. | ||
- name: Store coverage report in artifacts | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: codecov_report | ||
path: ./codecov.json | ||
|
||
- run: | | ||
echo "The coverage report was stored in Github artifacts." | ||
echo "It will be uploaded to Codecov using [upload_coverage.yml] workflow shortly." |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
name: Upload Coverage Report | ||
|
||
on: | ||
# This workflow is triggered after every successfull execution | ||
# of `Generate Coverage Report` workflow. | ||
workflow_run: | ||
workflows: ["Generate Coverage Report"] | ||
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 }} |
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