Skip to content

add text coverage to PR comment #626

add text coverage to PR comment

add text coverage to PR comment #626

Workflow file for this run

name: Run tests
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
postgres_version: ['14', '16']
services:
postgres:
image: postgres:${{ matrix.postgres_version }}
env:
POSTGRES_DB: ndoh_hub
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
redis:
image: redis:6.0
ports:
- 6379:6379
env:
HUB_DATABASE: postgres://postgres:postgres@localhost:5432/ndoh_hub
steps:
- uses: actions/checkout@v2
- name: Install gettext
run: sudo apt-get install gettext
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ hashFiles('requirements.txt', 'requirements-dev.txt') }}-pip
- uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependancies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt -r requirements-dev.txt
django-admin compilemessages
- name: Lint
run: |
flake8
python manage.py makemigrations registrations changes eventstore \
--dry-run | grep 'No changes detected' || \
(echo 'There are changes which require migrations.' && exit 1)
black --check .
isort -c -rc .
- name: Run tests and generate coverage report
run: |
py.test --cov --cov-report=term-missing | tee coverage.txt
- name: Extract coverage percentage
id: extract_coverage
run: |
COVERAGE=$(grep -oP 'TOTAL\s+\d+\s+\d+\s+\d+\s+\d+\s+\K\d+%' coverage.txt)
echo "COVERAGE=$COVERAGE" >> $GITHUB_ENV
- name: Get changed lines in the PR
id: get_diff
run: |
git fetch origin develop
git diff origin/develop --unified=0 > diff.txt
grep '^@@' diff.txt | awk '{print $2}' > changed_lines.txt
- name: Check for untested lines
id: check_coverage
run: |
UNTTESTED_LINES=""
while IFS= read -r line; do
line_number=$(echo "$line" | grep -oP '\d+')
coverage_info=$(grep -E "^ *$line_number " coverage.txt || true)
echo "Processing line: $line_number"
echo "Coverage info: $coverage_info"
if [[ $coverage_info == *"missed"* ]]; then
UNTTESTED_LINES="$UNTTESTED_LINES\nLine $line_number is not covered by tests."
fi
done < changed_lines.txt
echo "UNTTESTED_LINES=$UNTTESTED_LINES" >> $GITHUB_ENV
- name: Post coverage comment on PR
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const coverage = process.env.COVERAGE;
const prNumber = context.payload.pull_request.number;
const untestedLines = process.env.UNTTESTED_LINES || "None";
const commentBody = `PR Untested Lines: ${untestedLines}\n\n\nOverall Test coverage: ${coverage}`;
await github.rest.issues.createComment({
issue_number: prNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: commentBody
});