feat(go-release): require compiled build identity on every primary image - #838
Conversation
The primary build now passes require_build_identity: true to build.yml unconditionally, so a primary Dockerfile without ARG REVISION fails the release instead of publishing an image that cannot prove its version and commit. The input stays, defaults to true, and only sets the default for extra_builds groups; a group without a Go binary opts out with "require_build_identity": false. build.yml is unchanged. Floating tier-* consumers receive the rule on promotion; fixed pins on their next bump.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: LerianStudio/github-actions-shared-workflows/.coderabbit.yml Review profile: ASSERTIVE Plan: Essentials Run ID: 📒 Files selected for processing (4)
Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Walkthrough
ChangesBuild identity requirement
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Feature Suggested reviewers: Merge Risk: ⚪ Minimal · up to No demonstrated issue in this change blocks merging. Complete the planned caller adoption and validation before promoting the release to those callers. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
🔍 Lint Analysis
|
🛡️ CodeQL Analysis ResultsLanguages analyzed: Found 1 issue(s): 1 Medium
🔍 View full scan logs | 🛡️ Security tab |
🔍 PR Validation Summary✅ PR Mergeable — no blocking failures
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
GitHub Actions Shared Workflows
Description
Affects
go-release.ymland its docs.build.ymlis unchanged.Every Go service image released through
go-release.ymlmust now prove its compiled build identity. Until now the primary build forwarded the caller'srequire_build_identity(defaultfalse), so a primary Dockerfile withoutARG REVISIONpublished with a warning. From this release:require_build_identity: truetobuild.ymlas a literal. A primary Dockerfile withoutARG REVISIONfails the build with the existing error pointing atdocs/build.md§ Build identity contract; one that declares it is interrogated withdocker run <image> --versionbefore the push, as today.require_build_identityinput: kept, defaulttrue, now only the default forextra_buildsgroups. A group without its own key inherits it, so a group whose image carries no Go binary (amigrate/migratemigrations image, a UI, a Node MCP) sets"require_build_identity": false. The input is not removed: 35 repos pass it explicitly, and an unknown input failsworkflow_call.build.yml: unchanged. Its input still defaults tofalse. Its direct callers publish TypeScript and Python images, which do not carry the contract.Docs:
docs/go-release.md(input row, § Build identity, per-group key),docs/build.md§ Build identity contract → Adoption,docs/tiers.md§ Build identity verification. The tiers doc promised "once every consumer has adopted, verification becomes unconditional, and that release will be announced before it is cut"; the release note below is that announcement.What changes for consumers
@tier-0/@tier-1/@tier-2tier-0automatic;tier-1andtier-2after the Environment approval)require_build_identity: truesees no change, groups included@vX.Y.Zor SHA pinextra_buildsgroup without an explicitfalserequired tooenable_goreleaser: true, both registries off)Consumer sweep (2026-09-26 ~01:50Z)
GraphQL sweep of
.github/workflows/*ondevelop,mainand the default branch of all 317 LerianStudio repos, archived included: 79 caller jobs in 47 repos.tier-*caller ondeveloppassesrequire_build_identity: true, except:tier-2): input absent, no Dockerfile declaresARG REVISION, groupsui/migrations/mcphave no key. Its next tag after thetier-2promotion would fail. This is the hold above.tier-1): GoReleaser only, no image. Unaffected.developpassestrue, so the bump changes nothing for them.tier-*callers: go-boilerplate-ddd, go-boilerplate-ddd-fullstack, ungoliant-controller (tier-0) and billing-worker (tier-2) adopted ondevelop, but theirmainhas not had a stable release since. Ahotfix/*tag cut from today'smainafter the promotion would fail (primary withoutARG REVISION; the ungoliant allure and billing-worker migrations groups also inherit the new default). A regulardevelop→mainrelease carries the adoption. Cut those four releases before promoting.v1.43.0pins) are ignored.Type of Change
feat: New workflow or new input/output/step in an existing workflowfix: Bug fix in a workflow (incorrect behavior, broken step, wrong condition)perf: Performance improvement (e.g. caching, parallelism, reduced steps)refactor: Internal restructuring with no behavior changedocs: Documentation only (README, docs/, inline comments)ci: Changes to self-CI (workflows under.github/workflows/that run on this repo)chore: Dependency bumps, config updates, maintenancetest: Adding or updating testsBREAKING CHANGE: Callers must update their configuration after this PRBreaking Changes
None for any adopted caller. Committed as
featwithout!: notier-*caller breaks when this merges, because the rule reaches it only at promotion, and the promotion waits on the sweep above. A fixed-pin caller sees the rule only when it bumps the pin, and the release note says so. A caller that has not adopted must add the threeARGlines and thebuildinfocalls inmain(docs/build.md§ Build identity contract) before it takes the release, and mark non-Goextra_buildsgroups with"require_build_identity": false.Release note
Testing
actionlintclean ongo-release.yml;yamllint -c .yamllint.ymlreports only the pre-existing line-length and comment-spacing warnings;typosclean on the four changed filesbash tests/go-release/test-workflow.sh(5/5),bash tests/build-identity/test-workflow.sh(33/33),python3 src/validate/ungoliant-release-diff/test.py(19/19)@this-branchor the beta tag: not done here; after the merge, the first tag of an adoptedtier-0caller on the promoted release shows the step running without opt-inCaller repo / workflow run: pending the first tag after promotion.
Related Issues
Closes the build identity rollout ("wave D"): follows #826 (verification in
build.yml) and #827 (per-group boolean overrides).🤖 Generated with Claude Code