PRD: CI artifact-based coverage and local Firecracker candidate flow #447
Reference in New Issue
Block a user
Delete Branch "ci-artifact-coverage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #446.
PRD
Summary
unit,integration-docker,integration-firecracker) runs once under coverage and uploads a small.coverage.*artifact.coveragejob combines them onubuntu-latest— no test reruns, no KVM dependency on that job.integration-firecracker, eliminating thestage-firecracker-inputsandbuild-infrajobs and their ~70 s upload + ~83 s combined download overhead.publish-infrapublishes the byte-identical artifact that passed integration tests.relative_files = Trueadded to.coveragercso.coverage.*files from different runners combine without a[paths]remapping section.scripts/coverage.sh aggregate [critical]mode added; existing run mode preserved for local dev.The delphi-ci runner resolves relative paths in upload-artifact and download-artifact from a different CWD than run: shell steps, so '.coverage.unit' etc. were never found. Using ${{ github.workspace }} gives an absolute path that does not depend on the JS action's CWD. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>coverage run's --data-file flag can be overridden or ignored in some runner environments (Nix Python, older act-based runners). Switching to the COVERAGE_FILE env var with an absolute ${{ github.workspace }} path ensures coverage.py writes to a known location in every runner context, so upload-artifact can find the file. Also adds --reuse-published to the infra build step: if the artifact for this content hash already exists in the registry, download it instead of running the full docker build → mke2fs → gzip pipeline.upload-artifact@v3's glob silently skips hidden files, so uploading a bare `.coverage.unit` logged "No files were found. No artifacts will be uploaded" and registered nothing — the coverage job's download then 404'd ("List Artifacts failed: 404"). The coverage report step read the same file fine, confirming it existed; only the leading dot broke the upload. The old pipeline's cross-job artifacts (infra-candidate/, firecracker- inputs) worked precisely because they were non-dotfiles. Each test job now copies its .coverage.<suffix> to a non-dot coverage-<suffix>.dat before upload (the cp also fails loudly if coverage never wrote the file), and the coverage job renames them back to .coverage.* before `coverage combine`.41e01d745ato26002b75ca