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