fix(frontend): pin rc4 image and repair dependency automation#543
Merged
Conversation
OisinKyne
approved these changes
May 24, 2026
548f54f to
d654457
Compare
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.
Summary
Pins the embedded frontend Helm values to the rc4 frontend image and repairs the dependency automation that should have opened this bump automatically:
obolnetwork/obol-stack-front-end:v0.1.25-rc4@sha256:143633300757bec467a8818aa8aa99ec30d70f5096ffe4a075e66b6adc6014a0tag@sha256shape and keep the digest fresh withpinDigests.every hourschedules; the workflow itself now runs hourly.uses:actions to the current upstream semver tag commit SHA.Architectural impact
The stack was still deploying the rc1 frontend artifact from embedded values. That means a fresh
obol stack upcould install a CLI/backend rc4 stack while the UI stayed on rc1 bits.flowchart LR A["obol stack up"] --> B["Embedded helmfile values"] B --> C["obol-frontend Helm release"] C --> D["Frontend image reference"] D --> E["Docker registry multi-arch index digest"] E --> F["linux/amd64 manifest"] E --> G["linux/arm64 manifest"]With this change, the deployment path stays the same, but the selected artifact moves from rc1 to rc4:
flowchart TD Before["Before: v0.1.25-rc1@sha256:e7b38..."] --> Problem["Frontend can lag stack release candidate"] After["After: v0.1.25-rc4@sha256:143633..."] --> Result["Frontend matches rc4 release candidate"]No migration script or upgrade wrapper is needed; existing upgrades naturally converge through the normal Helm release values on the next stack apply.
Why Renovate missed this
There were multiple separate blockers:
flowchart TD Start["Scheduled Renovate workflow"] --> BrokenAction["Broken action SHA"] BrokenAction --> Stop1["Workflow failed before Renovate started"] Start --> MissingRepo["No RENOVATE_REPOSITORIES"] MissingRepo --> Stop2["Renovate would start but find no repository to scan"] Start --> Config["Renovate config"] Config --> BadSchedule["Invalid schedule: every hour"] BadSchedule --> Stop3["Config validation failure on current Renovate"] Config --> OldFrontendRule["Frontend rule used GitHub releases + bare tag regex"] OldFrontendRule --> Miss["Did not match Docker pin: v0.1.25-rcN@sha256:..."]The corrected path is:
flowchart LR Workflow["Hourly Renovate workflow"] --> Action["renovatebot/github-action pinned to latest tag SHA"] Action --> Repo["RENOVATE_REPOSITORIES=ObolNetwork/obol-stack"] Repo --> Validator["Valid renovate.json"] Validator --> Manager["custom.regex Docker manager"] Manager --> Current["currentValue=v0.1.25-rc4"] Manager --> Digest["currentDigest=sha256:143633..."] Manager --> Registry["Docker datasource: obolnetwork/obol-stack-front-end"] Registry --> PR["Future rc tag + digest bump PR"]GitHub Actions pin audit
Before this PR, every
uses:entry was commit-SHA pinned, but many were not on the latest upstream semver tag SHA. The workflow set was updated to the current live tags for:actions/checkoutv6.0.2actions/setup-gov6.4.0actions/setup-pythonv6.2.0actions/upload-artifactv7.0.1actions/download-artifactv8.0.1azure/setup-helmv5.0.0setup-buildx v4.1.0,setup-qemu v4.0.0,login v4.2.0,metadata v6.1.0,build-push v7.2.0aquasecurity/trivy-actionv0.36.0github/codeql-action/upload-sarifv4.36.0extractions/setup-justv4.0.0renovatebot/github-actionv46.1.14softprops/action-gh-releasev3.0.0helm/chart-testing-action v2.8.0andhelm/kind-action v1.14.0were already current and remain SHA-pinned.The direct gitleaks release download is not a GitHub Action, so it now verifies the
gitleaks_8.30.1_linux_x64.tar.gzSHA-256 before installation.Registry proof
docker buildx imagetools inspect obolnetwork/obol-stack-front-end:v0.1.25-rc4reports multi-arch index digest:The tag
v0.10.0-rc4does not exist for the frontend image, sov0.1.25-rc4is the matching frontend artifact tag.Validation
docker buildx imagetools inspect obolnetwork/obol-stack-front-end:v0.1.25-rc4 --format '{{.Manifest.Digest}}'git diff --checkgo test ./internal/embed ./internal/defaults ./internal/stack -count=1just generatejq empty renovate.jsondepName=obolnetwork/obol-stack-front-end,currentValue=v0.1.25-rc4, and the expectedcurrentDigest.npx --yes -p renovate renovate-config-validator renovate.jsongo run github.com/rhysd/actionlint/cmd/actionlint@latest .github/workflows/*.yml .github/workflows/*.yamluses:line matches the current upstream tag SHA.gitleaks_8.30.1_linux_x64.tar.gzand verified SHA-256551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb.gh workflow run Renovate --ref fix/frontend-rc4-image-pin -f dry_run=truereachedRepository startedafter the workflow fixes. Branch dispatch still validates the old default-branch config until this PR merges; the branch config itself validates locally with Renovate.Release action
Also published
v0.10.0-rc3as a non-draft GitHub pre-release so it is no longer stuck as a draft rc release.