50f5b3aa7f
test / integration (pull_request) Successful in 16s
test / unit (pull_request) Successful in 43s
test / unit (push) Successful in 44s
lint / lint (push) Successful in 1m49s
test / integration (push) Successful in 18s
Update Quality Badges / update-badges (push) Successful in 1m53s
The update-badges workflow only refreshed pylint and pyright. Add a coverage step that runs the unit suite under coverage.py, extracts the TOTAL percentage, and updates a new coverage badge in the README. Also trigger the workflow on .coveragerc changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NkwFXLFff9PYPy4wgVBJp9
93 lines
3.2 KiB
YAML
93 lines
3.2 KiB
YAML
name: Update Quality Badges
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- '**.py'
|
|
- '.pylintrc'
|
|
- 'pyrightconfig.json'
|
|
- '.coveragerc'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
update-badges:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Install dev dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements-dev.txt
|
|
|
|
- name: Run pylint and extract score
|
|
id: pylint
|
|
run: |
|
|
PYLINT_OUTPUT=$(python -m pylint bot_bottle/ 2>&1) || true
|
|
SCORE=$(echo "$PYLINT_OUTPUT" | grep -oP '(?<=rated at )\d+\.\d+/10' | head -1)
|
|
echo "score=$SCORE" >> $GITHUB_OUTPUT
|
|
echo "Pylint score: $SCORE"
|
|
|
|
- name: Run pyright and check errors
|
|
id: pyright
|
|
run: |
|
|
PYRIGHT_OUTPUT=$(python -m pyright 2>&1) || true
|
|
ERRORS=$(echo "$PYRIGHT_OUTPUT" | grep -oP '\d+(?= error)' | head -1)
|
|
echo "errors=$ERRORS" >> $GITHUB_OUTPUT
|
|
echo "Pyright errors: $ERRORS"
|
|
|
|
- name: Run coverage and extract percentage
|
|
id: coverage
|
|
run: |
|
|
python -m coverage run -m unittest discover -t . -s tests/unit > /dev/null 2>&1 || true
|
|
PERCENT=$(python -m coverage report 2>/dev/null | grep '^TOTAL' | grep -oP '\d+(?=%)' | tail -1)
|
|
echo "percent=$PERCENT" >> $GITHUB_OUTPUT
|
|
echo "Coverage: $PERCENT%"
|
|
|
|
- name: Update badges in README
|
|
run: |
|
|
PYLINT_SCORE="${{ steps.pylint.outputs.score }}"
|
|
PYRIGHT_ERRORS="${{ steps.pyright.outputs.errors }}"
|
|
COVERAGE_PERCENT="${{ steps.coverage.outputs.percent }}"
|
|
|
|
PYLINT_SCORE_ENCODED=$(echo "$PYLINT_SCORE" | sed 's|/|%2F|g')
|
|
|
|
if [ -n "$PYLINT_SCORE_ENCODED" ]; then
|
|
sed -i "s|/badge/pylint-[^)]*|/badge/pylint-${PYLINT_SCORE_ENCODED}-brightgreen|" README.md
|
|
fi
|
|
if [ -n "$PYRIGHT_ERRORS" ]; then
|
|
sed -i "s|/badge/pyright-[^)]*|/badge/pyright-${PYRIGHT_ERRORS}%20errors-brightgreen|" README.md
|
|
fi
|
|
if [ -n "$COVERAGE_PERCENT" ]; then
|
|
sed -i "s|/badge/coverage-[^)]*|/badge/coverage-${COVERAGE_PERCENT}%25-brightgreen|" README.md
|
|
fi
|
|
|
|
echo "Updated badges:"
|
|
grep -E "pylint|pyright|coverage" README.md | head -3
|
|
|
|
- name: Commit and push badge updates
|
|
run: |
|
|
git config --local user.email "action@gitea.local"
|
|
git config --local user.name "Quality Badge Bot"
|
|
|
|
# Check if there are changes
|
|
if git diff --quiet README.md; then
|
|
echo "No badge changes needed"
|
|
else
|
|
echo "Badge changes detected, committing..."
|
|
git add README.md
|
|
MSG="chore: update quality badges"$'\n\n'"- Pylint: ${{ steps.pylint.outputs.score }}"$'\n'"- Pyright: ${{ steps.pyright.outputs.errors }} errors"$'\n'"- Coverage: ${{ steps.coverage.outputs.percent }}%"$'\n\n'"[skip ci]"
|
|
git commit -m "$MSG"
|
|
git push
|
|
fi
|