ci(giga-1): publish a mock_balances image alongside the vanilla one - #4200
Conversation
nightly-ecr.yml checks out a hardcoded `ref: main`, so it can never build this branch. This builds the pushed commit and publishes one vanilla image as giga1-<YYYYMMDDHHMMSS>-<sha7>, consumed by harbor's giga-testnet chain through Flux image automation (sei-protocol/platform#PR). Timestamp, not a date: this builds on push, so more than one image shares a day and the platform ImagePolicy's numerical order cannot break a tie. The giga1- prefix keeps these images out of the three anchored nightly policies. The tag only exists once `seid version` has run in the built image, so Flux cannot deploy a binary that never started. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… filter Review findings. Wall-clock tagging broke the ordering invariant on a re-run: a re-run of an older commit executes date -u again and mints a tag that sorts above everything published since, so the numerical ImagePolicy rolls giga-testnet back onto the older binary. cancel-in-progress makes a cancelled older run the likeliest re-run target. The committer date makes the tag a pure function of the commit, so a re-run recomputes the same tag. '**/*.md' cannot match root-level markdown: ** matches zero characters, leaving a pattern that needs a leading slash. AGENTS.md and README.md are what this repo churns, so docs-only commits were still publishing and rolling all four validators. '**.md' is the documented idiom and a strict superset. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
giga1-ecr published one variant with no build tags, so it produced the vanilla binary. harbor's giga-testnet needs mock_balances: that build credits every account, which is what lets a load generator skip a funding step for hundreds of thousands of accounts. A matrix variant rather than a second workflow, matching the shape giga-ecr already uses. The tag takes a mock- prefix, so the timestamped ordering the Flux numerical policy needs works for both: giga1-<ts>-<sha7> and mock-giga1-<ts>-<sha7>. The build cache is keyed per variant. The build tags change the compiled output, so one shared cache would miss on every run and evict the other variant. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR SummaryLow Risk Overview Each variant gets its own ECR tag prefix ( Reviewed by Cursor Bugbot for commit ddc7360. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
The latest Buf updates on your PR. Results from workflow Buf / buf (pull_request).
|
There was a problem hiding this comment.
Clean, additive CI change: giga1-ecr becomes a two-variant matrix that publishes a mock_balances image alongside the vanilla one, with per-variant tag prefix and build cache. Verified the empty GO_BUILD_TAGS for the vanilla variant reproduces the pre-change build, the mock_balances tag is real and guarded in the Go tree, the interpolated shell value goes through an env: block, and the matrix shape matches the existing ecr.yml convention.
Findings: 0 blocking | 0 non-blocking | 0 posted inline
Blockers
- None at the file/PR level.
Non-blocking
- None at the file/PR level.
…ock-balances # Conflicts: # .github/workflows/giga1-ecr.yml
Stacked on #4175. Base retargets to
giga-1automatically once that merges.Why
giga1-ecrpasses no build tags, so it publishes the vanilla binary. harbor'sgiga-testnetneeds themock_balancesvariant: that build credits every account, which is what lets a load generator skip a funding step for hundreds of thousands of accounts.Without this, the only mock-balance tags available are
mock-giga-1-<full sha>and the floatingmock-giga-1, from the oldergiga-ecrworkflow. Neither can be selected by a Flux numericalImagePolicy— a 40-character hex digest carries no ordering, and a floating tag produces no new tag name for automation to notice. That is why the existinggiga-testnetchain has sat paused naming an image nothing replaces.What
One matrix variant, matching the shape
giga-ecr.ymlalready uses:vanillagiga1-<ts>-<sha7>mock_balancesmock_balancesmock-giga1-<ts>-<sha7>The timestamp stays the committer date, as #4175 wrote it. Two builds that finish out of order still sort by commit, which is what a numerical policy needs.
The build cache is keyed per variant (
build-cache:giga1-<variant>). The build tags change the compiled output, so one shared cache would miss on every run and evict the other variant.Checks
yaml.safe_loadparses; the matrix resolves to['vanilla', 'mock_balances']actionlintreports cleanNot in this PR
Once this lands, three container builds run on every push to
giga-1: two fromgiga-ecrand two fromgiga1-ecr, of which two produce the same vanilla binary under different tags. Reconciling the two workflows is worth doing and belongs to whoever owns the publish path — I did not want to fold it into a change that is otherwise additive.🤖 Generated with Claude Code