Draft
Add containerised BCR-style module verification (CI tier 2)#9
Conversation
Co-authored-by: phlax <454682+phlax@users.noreply.github.com>
Co-authored-by: phlax <454682+phlax@users.noreply.github.com>
…tifacts path Co-authored-by: phlax <454682+phlax@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Implement CI tier 2 for containerised BCR-style module verification
Add containerised BCR-style module verification (CI tier 2)
Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Initial prototype of tier 2 verification: each changed module version is actually built against a scratch consumer workspace, BCR-style, inside a container — not a port of
bcr_presubmit.py, just the ~100 lines of real test logic while keeping thepresubmit.ymlschema so upstream modules run unmodified.Container —
verify/DockerfileDerived from toolshed
docker/bazel, with the updates called out in the issue:security.ubuntu.comlibtinfo5 pool URL; addedlibxml2andlibatomic1tiniso signals propagate and the bazel server doesn't outlive the containerdocker run --user, bazel version via runtimeUSE_BAZEL_VERSION— image stays reusable and version-agnosticHarness —
verify/verify_module.pyRuns inside the container against a read-only
/registrymount:bazel_dep(name=<mod>, version=<version>);--registry=file://...first, BCR fallback;single_version_overridepins the version under testtest_module/→bcr_test_modulefrom the source archive (overlay + patches applied,strip_prefix/patch_striphonoured) → anonymous stubbazel build @<mod>//...presubmit.ymlschema: matrix expansion,build_targets/test_targets/build_flags/test_flags; onlyubuntu*tasks are translated; a module with only non-linux tasks skips with a note rather than passing silentlybazel mod show_repomust show the module'sMODULE.bazelcame from the localfile://registrybuild.log+ BEP JSON per invocation into/artifactsRBE=1+ bind-mounted bazelrc snippet; default off, fresh clone works with zero setupRunner —
verify/verify.shThin caller for local and CI use: builds the image, mounts registry ro / artifacts rw, disk+repository cache on a named volume,
--coldto force the cold path (what CI runs),--bazelfor the version list (default8.x).CI wiring
Non-blocking (
continue-on-error)verifyjob in_bazel_registry.yml, matrixed off the existing per-module version list, onedocker runper job with artifacts uploaded;verify/**added to the should-run path filter (staging step 2 — make blocking later).Test module
Hand-written
test_module/forliburing@2.15.envoy— a module with both patches and overlay — so the interesting path is exercised before generalising. The harness builds the presubmit's declared targets and builds/tests the test module's own//....