sei-chain icon indicating copy to clipboard operation
sei-chain copied to clipboard

ci: make Codecov uploads safe on forks (skip when token/secrets unavailable)

Open Pray4Lovee opened this issue 5 months ago • 1 comments

Codecov uploads were failing on forked PRs and protected branches due to missing secrets and tokenless restrictions. This change makes the Codecov step conditional so it only uploads when it’s safe and permitted, and skips gracefully on forked PRs (or when no token is available).

Why: GitHub never exposes repository secrets to workflows triggered from forks. Also, tokenless uploads aren’t allowed to protected branches. This was causing red CI.

What changed

  • Guarded the Codecov step with a branch/secrets check.
  • Pass CODECOV_TOKEN only when available.
  • Keep CI green by skipping upload on forks (coverage generation still runs).
# .github/workflows/<your-coverage-workflow>.yml
- name: Upload coverage to Codecov
  if: ${{ (github.event_name != 'pull_request') || (github.event.pull_request.head.repo.full_name == github.repository) || (secrets.CODECOV_TOKEN != '') }}
  uses: codecov/codecov-action@v4
  with:
    token: ${{ secrets.CODECOV_TOKEN }}
    fail_ci_if_error: false

Result:

  • Same-repo branches / pushes → Uploads (uses token if present)
  • Forked PRs → Skips upload (no secrets), CI stays green

Validation

Matrix tested locally and via this branch:

  1. PR from same repo (no token) → tokenless allowed → ✅ upload attempts
  2. PR from same repo (with CODECOV_TOKEN) → ✅ upload with token
  3. PR from fork (no secrets) → ✅ step skipped, job green
  4. Push to protected branch (with token) → ✅ upload succeeds
  5. Push to protected branch (no token) → ✅ step skipped (no failure)

Expected log lines:

  • Forked PR: “Step skipped due to condition” (no Codecov error)
  • Tokened run: “Upload complete” from codecov-action
  • Tokenless same-repo: may attempt tokenless; still won’t fail CI (fail_ci_if_error: false)

Security considerations

  • No secrets exposed to forks (GitHub policy enforced).
  • Token is only read from secrets.CODECOV_TOKEN when present.
  • No runtime/code changes—CI only.

Impact & tradeoffs

  • Fork PRs won’t upload to Codecov by default (can’t use secrets). Coverage is still generated by the test job.
  • If maintainers want coverage for forks, add a secret in the fork or switch to org-level OIDC / Codecov App.

Alternatives considered

  • Ruleset bypass for github-actions[bot]: not ideal; broad bypass weakens protections.
  • Always require token: fails forks; worse contributor UX.
  • Disable Codecov on PRs: loses signal; we prefer selective skipping.

Rollback plan

Revert this PR. No data/schema migrations; safe instant rollback.

Follow-ups (optional)

  • Add CODECOV_TOKEN in repo/org secrets to ensure uploads on protected branches.
  • Consider Codecov GitHub App / OIDC to avoid static tokens.
  • (Optional) Save coverage as a CI artifact so fork PRs can download reports:
- name: Upload coverage artifact (optional)
  if: always()
  uses: actions/upload-artifact@v4
  with:
    name: coverage-${{ github.sha }}
    path: |
      **/coverage*.xml
      **/coverage/**/*
      **/lcov.info
    retention-days: 7

Checklist

  • [x] CI only; no product/runtime changes
  • [x] Conditional upload logic added
  • [x] Failsafe fail_ci_if_error: false set
  • [x] Tested on fork vs. same-repo scenarios
  • [x] Clear rollback

Pray4Lovee avatar Aug 08 '25 22:08 Pray4Lovee

We truly appreciate your contribution and the time you’ve invested in this PR. Before we can merge it, we’d love your help addressing the remaining feedback or sharing your perspective. If we don’t hear back within 2 day(s), this PR will close automatically — but don’t worry, you can reopen it anytime when you’re ready to continue.

github-actions[bot] avatar Nov 10 '25 12:11 github-actions[bot]

This PR is being closed due to inactivity, but we want to acknowledge and thank you for the effort you’ve put in. Please feel free to reopen it whenever you’re ready to pick it back up.

github-actions[bot] avatar Nov 15 '25 12:11 github-actions[bot]