Skip to content
Latchkey

Coverage Report Upload Failed (Codecov/Coveralls) in CI

The coverage report was generated but the upload step to Codecov/Coveralls failed. Common causes are a missing/invalid token, a report path that does not match, or a transient network/rate-limit error.

What this error means

The uploader exits non-zero with "failed to upload," "No coverage reports found," or "Rate limit reached / token required." Tests passed; only the upload step failed, sometimes intermittently.

CI log
[error] There was an error running the uploader: Error uploading to
https://codecov.io: Error: HTTP 429 - Rate limit reached.

# or:
No coverage reports found. Please make sure you're generating reports.

Common causes

Missing or invalid upload token

Private repos need a CODECOV_TOKEN (or Coveralls token). If it is absent or wrong, the uploader is rejected.

Report not found at the expected path

The coverage step did not emit lcov.info/coverage-final.json, or the uploader looked in the wrong directory, so there is nothing to upload.

Transient network or rate limit

A network blip or the service's rate limit (HTTP 429/5xx) makes a single upload attempt fail even though everything is configured correctly.

How to fix it

Provide the token and point at the report

Terminal
# generate lcov first, then upload
npx jest --coverage --coverageReporters=lcov
codecov -t "$CODECOV_TOKEN" -f coverage/lcov.info

Make the upload resilient

  1. Confirm the coverage file exists before uploading (ls coverage/).
  2. Enable the uploader's built-in retries, or wrap it in a retry loop.
  3. Keep the upload from failing the whole build if coverage is informational.

How to prevent it

  • Store the upload token as a CI secret and pass it explicitly.
  • Verify the coverage report path before the upload step.
  • Enable uploader retries so a single blip does not fail the build.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →