diff --git a/.gitea/workflows/pest.yml b/.gitea/workflows/pest.yml index 3abddb2..5b7bd2d 100644 --- a/.gitea/workflows/pest.yml +++ b/.gitea/workflows/pest.yml @@ -23,6 +23,13 @@ on: required: false type: string default: '--coverage --coverage-clover=coverage.xml' + coverage_badge: + required: false + type: boolean + default: false + +permissions: + contents: write jobs: pest: @@ -45,9 +52,102 @@ jobs: ./vendor/bin/pest fi - - name: Upload coverage - if: ${{ inputs.coverage }} - uses: actions/upload-artifact@v3 - with: - name: coverage - path: coverage.xml \ No newline at end of file + - name: Generate coverage badge + if: ${{ inputs.coverage_badge }} + run: | + mkdir -p .gitea/badges + + php <<'PHP' + project->metrics ?? $xml->metrics ?? null; + + if (! $metrics) { + fwrite(STDERR, "No coverage metrics found in coverage.xml\n"); + exit(1); + } + + $covered = (int) ($metrics['coveredstatements'] ?? 0); + $total = (int) ($metrics['statements'] ?? 0); + + if ($total === 0) { + $percentage = 0; + } else { + $percentage = round(($covered / $total) * 100, 1); + } + + $color = match (true) { + $percentage >= 90 => '#4c1', + $percentage >= 80 => '#97ca00', + $percentage >= 70 => '#dfb317', + $percentage >= 60 => '#fe7d37', + default => '#e05d44', + }; + + $label = 'coverage'; + $message = $percentage . '%'; + + $labelWidth = 68; + $messageWidth = 48; + $width = $labelWidth + $messageWidth; + + $svg = << + $label: $message + + + + + + + + + + + + + + + coverage + + $message + + + SVG; + + file_put_contents($badgeFile, $svg); + + echo "Generated $badgeFile with $message\n"; + PHP + + - name: Commit coverage badge + if: ${{ inputs.coverage_badge && gitea.event_name == 'push' && gitea.ref == 'refs/heads/main' }} + run: | + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git config user.name "gitea-actions" + git config user.email "gitea-actions@git.qlic.nl" + + git add .gitea/badges/coverage.svg + + if git diff --cached --quiet; then + echo "Coverage badge unchanged" + exit 0 + fi + + git commit -m "Update coverage badge [skip ci]" + git push \ No newline at end of file