ci: preserve coverage from custom plugin jobs#9386
Conversation
Express and Electron generated V8 coverage but discarded the reports when their jobs ended, so Codecov could report exercised plugin code as uncovered. Reject coverage-producing jobs that cannot reach the uploader to prevent silent regressions.
Overall package sizeSelf size: 6.77 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.3.1 | 122.62 kB | 438.86 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | dc-polyfill | 0.1.11 | 25.74 kB | 25.74 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe |
🎉 All green!🧪 All tests passed 🔄 Datadog auto-retried 1 job - 1 passed on retry 🔗 Commit SHA: 18b29c3 | Docs | Datadog PR Page | Give us feedback! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 18b29c3935
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| typeof step.uses === 'string' && | ||
| localActionUploadsCoverage(repoRoot, step.uses, new Set()) | ||
| ) { | ||
| coverageUploadJobs.add(`${wf}#${jobId}`) |
There was a problem hiding this comment.
Check uploader reachability in step order
When a job contains one uploader anywhere, this job-level set makes every coverage-producing run in that job look covered. In ordered multi-step jobs like .github/workflows/apm-integrations.yml's dns job, which runs several yarn test:plugins:ci steps and uploads once at the end, a later edit that adds or moves a scripts/c8-ci.js/:coverage step after the uploader would still pass verify-exercised-tests, even though .github/actions/upload-coverage-artifact/action.yml only uploads files present when that step runs. Track uploader positions, or scan steps in order, so each coverage producer must be followed by an uploader.
Useful? React with 👍 / 👎.
| visiting.add(actionFile) | ||
|
|
||
| const doc = parseYamlFile(repoRoot, actionFile) | ||
| const steps = doc.runs.steps |
There was a problem hiding this comment.
Guard non-composite local actions
If any workflow starts using a valid local JavaScript or Docker action, this dereference throws because those actions have no runs.steps, so verify-exercised-tests crashes instead of continuing with its CI checks. The existing composite expansion above guards doc, runs, and steps; this path should do the same before scanning nested uses steps.
Useful? React with 👍 / 👎.
BenchmarksBenchmark execution time: 2026-07-15 16:58:36 Comparing candidate commit 18b29c3 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 2310 metrics, 48 unstable metrics.
|
Express and Electron generated V8 coverage but discarded the reports when their jobs ended, so Codecov could report exercised plugin code as uncovered. Reject coverage-producing jobs that cannot reach the uploader to prevent silent regressions.
Express and Electron generated V8 coverage but discarded the reports when their jobs ended, so Codecov could report exercised plugin code as uncovered. Reject coverage-producing jobs that cannot reach the uploader to prevent silent regressions.
Express and Electron generated V8 coverage but discarded the reports when their jobs ended, so Codecov could report exercised plugin code as uncovered. Reject coverage-producing jobs that cannot reach the uploader to prevent silent regressions.
Express and Electron generated V8 coverage but discarded the reports when their jobs ended, so Codecov could report exercised plugin code as uncovered. Reject coverage-producing jobs that cannot reach the uploader to prevent silent regressions.
Summary
Express and Electron ran coverage-producing plugin suites but discarded their reports when the jobs ended, which left exercised code missing from Codecov. Upload both reports and make
verify-exercised-testsreject any workflow job whose coverage collector cannot reach the uploader.