name: Upload Coverage to Codecov on: pull_request: branches: - main - development workflow_dispatch: inputs: run_backend: description: 'Run backend coverage upload' required: false default: true type: boolean run_frontend: description: 'Run frontend coverage upload' required: false default: true type: boolean concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.run_id }} cancel-in-progress: true env: GO_VERSION: '1.26.0' NODE_VERSION: '24.12.0' GOTOOLCHAIN: auto permissions: contents: read pull-requests: write jobs: backend-codecov: name: Backend Codecov Upload runs-on: ubuntu-latest timeout-minutes: 15 if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_backend != 'false' }} steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: fetch-depth: 0 ref: ${{ github.sha }} - name: Set up Go uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6 with: go-version: ${{ env.GO_VERSION }} cache-dependency-path: backend/go.sum - name: Run Go tests with coverage working-directory: ${{ github.workspace }} env: CGO_ENABLED: 1 run: | bash scripts/go-test-coverage.sh 2>&1 | tee backend/test-output.txt exit "${PIPESTATUS[0]}" - name: Upload backend coverage to Codecov uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./backend/coverage.txt flags: backend fail_ci_if_error: true frontend-codecov: name: Frontend Codecov Upload runs-on: ubuntu-latest timeout-minutes: 15 if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_frontend != 'false' }} steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: fetch-depth: 0 ref: ${{ github.sha }} - name: Set up Node.js uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies working-directory: frontend run: npm ci - name: Run frontend tests and coverage working-directory: ${{ github.workspace }} run: | bash scripts/frontend-test-coverage.sh 2>&1 | tee frontend/test-output.txt exit "${PIPESTATUS[0]}" - name: Upload frontend coverage to Codecov uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5 with: token: ${{ secrets.CODECOV_TOKEN }} directory: ./frontend/coverage flags: frontend fail_ci_if_error: true