Docs

Upload coverage, then connect your coding agent.

Generate an LCOV, Cobertura, or JaCoCo report in CI. 9to5 turns it into GitHub feedback for people and exact read-only coverage context for MCP clients.

Required secret

Copy an organization or repository upload token from the app and save it in your CI provider as COVERAGE_UPLOAD_TOKEN.

The reusable 9to5 coverage Action uses the default upload endpoint automatically. Set endpoint only when you need to override that target.

- name: Upload coverage
  uses: 9to5/9to5-coverage-action@v1
  with:
    token: ${{ secrets.COVERAGE_UPLOAD_TOKEN }}
    path: coverage/lcov.info

API reference

Current upload API

Use the reusable GitHub Action for GitHub Actions setup. The same endpoint also supports bearer-token multipart uploads for other CI providers and JSON artifact URL submissions for the Action.

Authentication

Send Authorization: Bearer COVERAGE_UPLOAD_TOKEN. Repository and organization tokens are supported.

Upload endpoint override

POST /api/v1/repos/:owner/:repo/coverage

The GitHub Action's endpoint input is optional and only needed when overriding the default upload host. Multipart fields: commit_sha, branch, and coverage or file.

Artifact JSON

JSON submissions use commit_sha, branch, artifact_url, and coverage_path. Artifact URLs must point to a GitHub Actions artifact for the same repository.

Optional fields

Include base_sha, base_branch, pull_request_number, and run_url for richer pull request reporting.

Success response

Multipart uploads return status, coverage_run_id, project and patch coverage percentages, and project/patch conclusions. Artifact JSON submissions return status: queued, upload_id, and job_id; processing status is visible on the repository page.

Error responses

400: commit SHA, branch, coverage file, or artifact URL is missing or invalid.

401: upload token is invalid for the requested repository.

422: the coverage file cannot be downloaded, found, parsed, or persisted.

Planned direct upload flow

The reliable-upload milestone will add POST /api/v1/repos/:owner/:repo/coverage_uploads, POST /api/v1/coverage_uploads/:id/complete, and a status endpoint that returns processing state plus the resulting coverage run ID.