From ba5169db6987f99ab0a65fe2d4853a09827a5598 Mon Sep 17 00:00:00 2001 From: Joakim Olsson Date: Wed, 29 Apr 2026 07:05:40 +0200 Subject: [PATCH] fix(ci): use go-test-coverage binary directly to fix Gitea Actions vladopajic/go-test-coverage@v2 (v2.18.5+) switched composite-action inputs from CLI args to env-var mapping, which Gitea act_runner does not expand reliably. The literal string `${{ inputs.config }}` was passed to the binary, breaking 'Check coverage' steps. Replace the action with a direct go install + binary invocation (matching Frostmoln pattern) and use the tool's --github-action-output to drop manual go tool cover -func calculations. --- .gitea/workflows/ci.yaml | 29 ++++++++++++----------------- .testcoverage.yml | 2 +- CLAUDE.md | 2 +- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 5acf786..d0a2c1d 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -15,14 +15,12 @@ jobs: with: go-version: 'stable' - name: Run tests - run: go test -race -coverprofile=coverage.txt ./... - + run: go test -race -coverprofile=coverage.out ./... - name: Check coverage - uses: vladopajic/go-test-coverage@v2 - with: - config: ./.testcoverage.yml - - # Download baseline coverage from main branch (for PRs) + id: coverage + run: | + go install github.com/vladopajic/go-test-coverage/v2@latest + go-test-coverage --config ./.testcoverage.yml --github-action-output - name: Download baseline coverage if: gitea.event_name == 'pull_request' uses: actions/download-artifact@v3 @@ -30,14 +28,12 @@ jobs: name: coverage-baseline path: ./baseline continue-on-error: true - - # Compare coverage against baseline (for PRs) - name: Compare coverage if: gitea.event_name == 'pull_request' run: | - CURRENT=$(go tool cover -func=coverage.txt | grep "^total:" | awk '{print $NF}' | tr -d '%') + CURRENT="${{ steps.coverage.outputs.total-coverage }}" if [ -f ./baseline/coverage.txt ]; then - BASE=$(go tool cover -func=./baseline/coverage.txt | grep "^total:" | awk '{print $NF}' | tr -d '%') + BASE=$(cat ./baseline/coverage.txt) echo "Base coverage: ${BASE}%" echo "Current coverage: ${CURRENT}%" if [ "$(echo "$CURRENT < $BASE" | bc -l)" -eq 1 ]; then @@ -49,8 +45,9 @@ jobs: echo "No baseline coverage found, skipping comparison" echo "Current coverage: ${CURRENT}%" fi - - # Upload coverage as baseline (only on main) + - name: Save coverage baseline + if: gitea.ref == 'refs/heads/main' + run: echo "${{ steps.coverage.outputs.total-coverage }}" > coverage.txt - name: Upload coverage baseline if: gitea.ref == 'refs/heads/main' uses: actions/upload-artifact@v3 @@ -58,19 +55,17 @@ jobs: name: coverage-baseline path: coverage.txt retention-days: 90 - - # Post coverage to PR comment - name: Post coverage comment if: gitea.event_name == 'pull_request' env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_URL: ${{ gitea.server_url }} run: | - COVERAGE=$(go tool cover -func=coverage.txt | grep "^total:" | awk '{print $NF}') + COVERAGE="${{ steps.coverage.outputs.total-coverage }}" curl -X POST "${GITEA_URL}/api/v1/repos/${{ gitea.repository }}/issues/${{ gitea.event.pull_request.number }}/comments" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ - -d "{\"body\": \"## Coverage Report\n\nTotal coverage: **${COVERAGE}**\"}" + -d "{\"body\": \"## Coverage Report\n\nTotal coverage: **${COVERAGE}%**\"}" vulnerabilities: runs-on: ubuntu-latest diff --git a/.testcoverage.yml b/.testcoverage.yml index 7aec8b6..387639d 100644 --- a/.testcoverage.yml +++ b/.testcoverage.yml @@ -1,7 +1,7 @@ # Coverage configuration for go-test-coverage # https://github.com/vladopajic/go-test-coverage -profile: coverage.txt +profile: coverage.out threshold: file: 0 diff --git a/CLAUDE.md b/CLAUDE.md index 5ec80bd..892391e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -50,4 +50,4 @@ Pre-commit hooks enforce: ## CI/CD -GitLab CI pipeline runs: dependency download → tests with race detector → vulnerability scanning → Codecov upload. +Self-hosted Gitea Actions (`.gitea/workflows/`) run: dependency download → tests with race detector → coverage check → vulnerability scanning → coverage baseline upload/comparison.