Skip to content

build(deps): update sphinx-issues requirement from ^3.0.1 to ^5.0.1 #52

build(deps): update sphinx-issues requirement from ^3.0.1 to ^5.0.1

build(deps): update sphinx-issues requirement from ^3.0.1 to ^5.0.1 #52

Workflow file for this run

name: Code Coverage
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
# Add permissions block here
permissions:
contents: write # Needed to update the README.md file
jobs:
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install dependencies
run: |
poetry install
- name: Run tests with coverage
run: |
poetry run pytest --cov=greeting_toolkit --cov-report=xml --cov-report=term
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.xml
fail_ci_if_error: false
token: ${{ secrets.CODECOV_TOKEN }}
- name: Generate coverage badge
run: |
poetry run python -c "
import xml.etree.ElementTree as ET
import re
# Parse the coverage report
tree = ET.parse('coverage.xml')
root = tree.getroot()
# Get the overall coverage percentage
coverage = float(root.get('line-rate')) * 100
# Create the badge markdown
color = 'red'
if coverage >= 90:
color = 'brightgreen'
elif coverage >= 80:
color = 'green'
elif coverage >= 70:
color = 'yellowgreen'
elif coverage >= 60:
color = 'yellow'
elif coverage >= 50:
color = 'orange'
badge_url = f'https://img.shields.io/badge/coverage-{coverage:.1f}%25-{color}'
# Update README.md
with open('README.md', 'r') as f:
readme = f.read()
# Look for existing coverage badge
coverage_badge_pattern = r'!\[Coverage\]\(https://img\.shields\.io/badge/coverage-[\d\.]+%25-[a-z]+\)'
if re.search(coverage_badge_pattern, readme):
# Replace existing badge
readme = re.sub(coverage_badge_pattern, f'![Coverage]({badge_url})', readme)
else:
# Look for badge section to add to
badge_section = re.search(r'(!\[[^\]]+\]\([^\)]+\)[ \t]*)+', readme)
if badge_section:
# Add to existing badges
end_pos = badge_section.end()
readme = readme[:end_pos] + f' ![Coverage]({badge_url})' + readme[end_pos:]
else:
# Add after first line
first_line_end = readme.find('\n')
if first_line_end != -1:
readme = readme[:first_line_end+1] + f'\n![Coverage]({badge_url})\n' + readme[first_line_end+1:]
else:
readme = readme + f'\n\n![Coverage]({badge_url})\n'
with open('README.md', 'w') as f:
f.write(readme)
"
- name: Commit updated README with coverage badge
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add README.md
git diff --quiet && git diff --staged --quiet || (
git commit -m "docs: update coverage badge [skip ci]"
git push
)