Roboticks ingests code coverage (gcov/lcov for C++, coverage.py for Python) alongside JUnit XML and displays it in the test-run detail UI. Coverage is one of the headline numbers on every Check Run, but it answers a different question than requirement coverage.
Code coverage and requirement coverage are different. Code coverage measures what fraction of your source lines were executed by tests. Requirement coverage measures what fraction of your requirements have at least one passing test. A repo can have 100% line coverage and 30% requirement coverage. They are independent dimensions.
GitHub Actions step that produces both pytest and gtest coverage:
- name: Run tests with coverage run: | pytest --cov=my_pkg --cov-report=xml:coverage.xml colcon build --cmake-args -DCMAKE_CXX_FLAGS="--coverage" colcon test rbtk coverage capture --workspace .- name: Upload to Roboticks uses: roboticks-io/upload-action@v1 with: junit: 'test_results/**/*.xml' coverage: | coverage.xml coverage.info
When you’re using the GitHub App, the upload happens automatically — the action above is for CI systems where you call the API yourself. See CI recipes.
A 95% line coverage number with 40% requirement coverage means “we run a lot of code, but we have not proven the requirements”. An auditor will accept the latter and ignore the former. Use coverage to find dead code; use requirement coverage to ship.