Skip to content

feat(ci): cut devnet fixture releases from any branch - #3601

Merged
danceratopz merged 2 commits into
ethereum:forks/amsterdamfrom
spencer-tb:ci/devnet-release-any-branch
Sep 17, 2026
Merged

danceratopz merged 2 commits into
ethereum:forks/amsterdamfrom
spencer-tb:ci/devnet-release-any-branch

Conversation

@spencer-tb

@spencer-tb spencer-tb commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Description

Allow devnet fixture releases from any explicitly selected branch, including EIP branches, avoiding duplicate devnets/ branches. A branch remains required; a branch under devnets/ must still follow devnets/<feat>/<n> with version major <n>, and only branches outside that namespace skip the check. Release tags are unchanged.

The selected branch must contain the updated validator. Selecting the workflow with --ref alone is insufficient.

Set branch to the source branch you want to release. For example, draft a release from the EIP-8141 branch:

gh workflow run release_fixtures.yaml --repo ethereum/execution-specs \
  -f feature=frames-devnet -f version=v0.4.0 \
  -f branch=eips/amsterdam/eip-8141

Publishing the draft creates tests-frames-devnet@v0.4.0 at the EIP branch commit used for the build. Choose an unused version.

Related Issues or PRs

#3384 update the devnet-release skill wording.

Checklist

  • Ran fast static checks to avoid CI fails, see Code Standards & Verifying Changes: just static
  • PR title has the form <type>(<area>): <title>, where <type> and <area> come from an appropriate C-<type>, respectively A-<area>, label. The title should match the target squash commit message.

`<feat>-devnet` releases were only accepted from a `devnets/<feat>/<n>`
branch, so every devnet that tracks an EIP feature branch one-to-one
needed a throwaway copy of it just to satisfy the release workflow
(`devnets/frames/0` is byte-identical to `eips/amsterdam/eip-8141`).

Accept any `branch` for devnet releases. The tag is still named by the
feature and version (`tests-frames-devnet@v0.1.0`), which is all
consumers see, and the `branch` input stays required so a devnet
release can never silently fill the default branch. When the branch
does follow the `devnets/<feat>/<n>` scheme, the version major is still
cross-checked against `<n>`, so the glamsterdam-style guard is kept.
@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.44%. Comparing base (980a674) to head (4c50d86).
⚠️ Report is 1 commits behind head on forks/amsterdam.

Additional details and impacted files
@@               Coverage Diff                @@
##           forks/amsterdam    #3601   +/-   ##
================================================
  Coverage            94.44%   94.44%           
================================================
  Files                  624      624           
  Lines                36928    36928           
  Branches              3326     3326           
================================================
  Hits                 34875    34875           
  Misses                1450     1450           
  Partials               603      603           
Flag Coverage Δ
unittests 94.44% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@spencer-tb
spencer-tb marked this pull request as ready for review September 16, 2026 12:34

@danceratopz danceratopz 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.

Nice! Below are a few comments from Claude. The first one about not checking well-formed devnet branch names seems worth fixing. The other three are docs/tests and less important.

He also mentioned:

Follow-up, not for this PR. Nothing guards against a version whose tag already exists, and this is the first path with a fully unconstrained major, so a collision only shows up at gh release create after the fill.

Comment thread .github/scripts/generate_build_matrix.py Outdated
Comment thread docs/dev/releasing_tests.md Outdated
Comment thread docs/dev/releasing_tests.md Outdated
Comment thread .github/scripts/tests/test_release_scripts.py
Gate the version-major cross-check on the `devnets/` namespace instead
of skipping it for any branch the regex does not match: a branch under
`devnets/` that is not `devnets/<feat>/<n>` (e.g. the real
`devnets/bal/7-benchmark`) fails again with "could not parse a devnet
number", while branches outside the namespace stay unchecked. Trim the
branch first, matching `actions/checkout`, so a blank branch is still
"missing" and a padded `devnets/bal/7` is still checked.

Tests fence the near miss, the blank branch and the trimming. Docs:
the `branch` input is optional for other fresh fills and must be empty
for cached releases; the devnet section is split and says where the
major comes from when the branch does not encode it; a warning notes
that the release scripts run from the selected branch, so it must
carry them and be current with its base.

@danceratopz danceratopz 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.

SGTM

@danceratopz
danceratopz merged commit 1c8b05b into ethereum:forks/amsterdam Sep 17, 2026
26 checks passed
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