Skip to content

Report coverage in pull requests #5

Report coverage in pull requests

Report coverage in pull requests #5

Workflow file for this run

name: Coverage Check
"on":
pull_request:
branches:
- '*'
workflow_dispatch: {}
jobs:
coverage:
runs-on: ubuntu-latest
services:
dind:
image: docker:23.0-rc-dind-rootless
ports:
- 2375:2375
steps:
- name: Checkout base commit
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.base.sha }}
- name: Run tests on base commit and calculate previous coverage
run: |
POSTGRES_CONTAINER=1 VERNEMQ_CONTAINER=1 go test -v -coverpkg=./internal/... -coverprofile=base_profile.cov ./internal/...
PREVIOUS_COVERAGE=$(go tool cover -func base_profile.cov | grep total | awk '{print $3}' | tr -d '%')
echo "PREVIOUS_COVERAGE=$PREVIOUS_COVERAGE" >> $GITHUB_ENV
- name: Checkout PR code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.24.2
- name: Run tests and calculate coverage
run: |
POSTGRES_CONTAINER=1 VERNEMQ_CONTAINER=1 go test -v -coverpkg=./internal/... -coverprofile=pr_profile.cov ./internal/...
CURRENT_COVERAGE=$(go tool cover -func pr_profile.cov | grep total | awk '{print $3}' | tr -d '%')
CHANGE=$(echo "$CURRENT_COVERAGE - $PREVIOUS_COVERAGE" | bc)
echo "CURRENT_COVERAGE=$CURRENT_COVERAGE" >> $GITHUB_ENV
echo "CHANGE=$CHANGE" >> $GITHUB_ENV
- name: Delete old coverage comments
uses: actions/github-script@v7
with:
script: |
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const coverageCommentTag = '<!-- coverage-comment -->';
for (const comment of comments) {
if (comment.body.includes(coverageCommentTag)) {
await github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: comment.id,
});
}
}
- name: Post coverage comment
uses: actions/github-script@v7
with:
script: |
const currentCoverage = process.env.CURRENT_COVERAGE || 'unknown';
const previousCoverage = process.env.PREVIOUS_COVERAGE || 'unknown';
const change = process.env.CHANGE || 'unknown';
const commentBody = `
<!-- coverage-comment -->
`internal/` coverage: **${currentCoverage}%** (${change >= 0 ? '+' : ''}${change}%)
`;
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: commentBody,
});