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.
[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
# generate lcov first, then upload
npx jest --coverage --coverageReporters=lcov
codecov -t "$CODECOV_TOKEN" -f coverage/lcov.infoMake the upload resilient
- Confirm the coverage file exists before uploading (
ls coverage/). - Enable the uploader's built-in retries, or wrap it in a retry loop.
- 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.