--- name: Workflow for Codecov Action on: [push, pull_request] permissions: id-token: write contents: read jobs: run: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] steps: - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Install dependencies run: pip install -r app/requirements.txt - name: Run tests and collect coverage run: pytest app/ --cov - name: Upload coverage to Codecov (script) uses: ./ with: fail_ci_if_error: true files: ./coverage/script/coverage-final.json flags: script-${{ matrix.os }} name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (demo) uses: ./ with: fail_ci_if_error: true files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: demo-${{ matrix.os }} name: codecov-demo verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (version) uses: ./ with: fail_ci_if_error: true files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: version-${{ matrix.os }} name: codecov-version version: v9.1.0 verbose: true token: ${{ secrets.CODECOV_TOKEN }} run-macos-latest-xlarge: if: github.event.pull_request.head.repo.full_name == 'codecov/codecov-action' runs-on: macos-latest-xlarge steps: - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Install dependencies run: pip install -r app/requirements.txt - name: Run tests and collect coverage run: pytest app/ --cov - name: Upload coverage to Codecov (script) uses: ./ with: fail_ci_if_error: true files: ./coverage/script/coverage-final.json flags: script-macos-latest-xlarge name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (demo) uses: ./ with: fail_ci_if_error: true files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: demo-macos-latest-xlarge name: codecov-demo verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (oidc) uses: ./ with: files: ./coverage/script/coverage-final.json flags: script-${{ matrix.os }} name: codecov-script use_oidc: true verbose: true - name: Upload coverage to Codecov (version) uses: ./ with: fail_ci_if_error: true files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: version-maxos-latest-xlarge name: codecov-version version: v9.1.0 verbose: true token: ${{ secrets.CODECOV_TOKEN }} run-container: runs-on: ubuntu-latest container: python:latest steps: - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Install deps run: | apt-get update && apt-get install -y git - name: Upload coverage to Codecov (script) uses: ./ with: files: ./coverage/script/coverage-final.json flags: script-container name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (demo) uses: ./ with: files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: demo-container name: codecov-demo verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (version) uses: ./ with: files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: version-container name: codecov-version version: v9.1.0 verbose: true token: ${{ secrets.CODECOV_TOKEN }} run-alpine-missing-deps: runs-on: ubuntu-latest container: alpine:latest steps: - name: Install only some deps (missing gpg and bash) run: | apk add git - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Upload coverage to Codecov (should fail due to missing dependencies) id: codecov-upload continue-on-error: true uses: ./ with: files: ./coverage/script/coverage-final.json flags: script-alpine-missing-deps name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Verify dependency check failed run: | if [ "${{ steps.codecov-upload.outcome }}" = "failure" ]; then echo "✓ Action correctly failed due to missing dependencies" exit 0 else echo "✗ Action should have failed but didn't" exit 1 fi run-alpine-success: runs-on: ubuntu-latest container: alpine:latest steps: - name: Install all required deps run: | apk add git curl gnupg bash - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Upload coverage to Codecov (should succeed) uses: ./ with: files: ./coverage/script/coverage-final.json flags: script-alpine-success name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (demo) uses: ./ with: files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: demo-alpine-success name: codecov-demo verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage to Codecov (version) uses: ./ with: files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json,./coverage/coverage-final.json flags: version-alpine-success name: codecov-version version: v9.1.0 verbose: true token: ${{ secrets.CODECOV_TOKEN }} run-alpine-partial-deps: runs-on: ubuntu-latest container: alpine:latest steps: - name: Install only some deps (missing gpg and bash) run: | apk add git curl - name: Checkout uses: actions/checkout@v5.0.0 with: submodules: "true" - name: Upload coverage to Codecov (should fail due to missing gpg and bash) id: codecov-upload continue-on-error: true uses: ./ with: files: ./coverage/script/coverage-final.json flags: script-alpine-partial-deps name: codecov-script verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Verify dependency check failed run: | if [ "${{ steps.codecov-upload.outcome }}" = "failure" ]; then echo "✓ Action correctly failed due to missing dependencies (gpg and bash)" exit 0 else echo "✗ Action should have failed but didn't" exit 1 fi