Skip to content

ci(hermes): build the hermes sidecar image from our fork at a pinned ref - #67

Draft
CryptoFewka wants to merge 4 commits into
mainfrom
feat/hermes-fork-pin
Draft

ci(hermes): build the hermes sidecar image from our fork at a pinned ref#67
CryptoFewka wants to merge 4 commits into
mainfrom
feat/hermes-fork-pin

Conversation

@CryptoFewka

@CryptoFewka CryptoFewka commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Why

The hermes sidecar build cloned a moving branch and tagged the resulting image with this repo's commit SHA. Two consequences:

  • An image tag did not identify the hermes code inside it, and the same tag could not be rebuilt later.
  • The SHA in the tag does not resolve in the hermes repository, which makes it hard to tell what a given image actually contains.

What changed

  • HERMES_REF pins the source commit, checked out explicitly, with the resolved SHA logged at build time.
  • An additional hermes-<sha> image tag, so a tag identifies its contents. The existing ${{ github.sha }} tag is unchanged, so nothing downstream breaks.
  • HERMES_REPO points at our fork, which adds an opt-in gossip validator for beacon blocks (feat(eth): optional gossip validation for beacon blocks hermes#1). It is off unless enabled by flag, so the image behaves identically by default.

Note

HERMES_REF currently points at the PR branch on the fork. Repoint it at the merge commit once getoptimum/hermes#1 lands, before publishing an image intended for production.

Written with Claude Code

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 30 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: getoptimum/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a82df6c5-a642-4e60-a48d-7847992e28a2

📥 Commits

Reviewing files that changed from the base of the PR and between 1710971 and 44c3fc3.

📒 Files selected for processing (1)
  • .github/workflows/docker-hermes-publish.yml

Comment @coderabbitai help to get the list of available commands.

@CryptoFewka
CryptoFewka marked this pull request as draft August 12, 2026 20:06
The build cloned a moving branch and tagged the result with this repo's commit
SHA, so an image tag did not identify the hermes code inside it and the same tag
could not be rebuilt later.

Pin the source commit in HERMES_REF, check it out explicitly, log the resolved
SHA at build time, and publish an additional hermes-<sha> tag so a tag identifies
its contents. The existing tag is unchanged.

HERMES_REPO now points at our fork, which adds an opt-in gossip validator for
beacon blocks. It is off unless enabled by flag, so the image behaves the same as
before by default.
@CryptoFewka
CryptoFewka force-pushed the feat/hermes-fork-pin branch from 44c3fc3 to eec699e Compare August 12, 2026 20:07
@CryptoFewka CryptoFewka changed the title ci(hermes): build the sidecar image from our fork at a pinned ref ci(hermes): build the sidecar from a pinned source commit Aug 12, 2026
@CryptoFewka CryptoFewka changed the title ci(hermes): build the sidecar from a pinned source commit ci(hermes): build the hermes sidecar image from our fork at a pinned ref Aug 12, 2026
Scope the registry credential to the build job. It was workflow-level env, so it
sat in the environment of every step of every job, including the sign job's
checkout. The sibling publish workflows already scope it this way.

Declare permissions: {} on the build job. It never uses the GITHUB_TOKEN and the
repository default is write.

Pass the ref name through env rather than interpolating it into the shell. Ref
names may contain shell metacharacters, and this step runs in a job holding a
registry credential. Needs write access to reach, so this is defence in depth.

Assert each Dockerfile patch applied. sed exits 0 when its pattern does not match,
so a change to the source Dockerfile, for example pinning the base image by
digest, would silently drop the Go version or the multi-arch build args and still
publish. The assertions use grep -F because the expected strings contain ${...},
which grep would otherwise read as a regex interval and never match.
The previous pin was a commit on a feature branch, which predated several fixes
and would stop resolving once that branch was deleted. Point it at the fork's
main instead, where the sidecar work is now merged, so the pin is both current
and durable.
Picks up getoptimum/hermes#6, which gives validation_duration_seconds usable
bucket boundaries; the previous build collapsed every observation into one.

@hpsing hpsing left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants