Skip to content

feat(ci): auto-publish mainnet fixture patch releases from the nightly fill - #3385

Open
spencer-tb wants to merge 1 commit into
ethereum:forks/amsterdamfrom
spencer-tb:draft-mainnet-release-cron
Open

feat(ci): auto-publish mainnet fixture patch releases from the nightly fill#3385
spencer-tb wants to merge 1 commit into
ethereum:forks/amsterdamfrom
spencer-tb:draft-mainnet-release-cron

Conversation

@spencer-tb

@spencer-tb spencer-tb commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Description

Automates fortnightly mainnet fixture patch releases from the existing nightly fill while keeping every mainnet-fork (X) and consensus-revision (Y) release manual.

The release policy is explicit:

Version component Meaning Release path
X Mainnet fork line Manual vX.0.0 release
Y Consensus revision for that fork Manual vX.Y.0 release
Z Non-consensus fixture changes Automatic patch, at most once every 14 days

Maintainers select the active X.Y series in .github/configs/mainnet_fixture_version.yaml. A consensus-changing PR increments consensus_revision; a new-mainnet-fork PR increments fork and resets the revision to zero. The scheduled workflow never chooses an X or Y bump: while the configured series is ahead of the latest published release it publishes nothing and points to the exact manual vX.Y.0 release required.

When the configured and published series match, nightly fixture changes accumulate. The first eligible nightly at least 14 days after the latest published tests@ release publishes the next Z patch from that run's own artifact. An unchanged fixture root produces no release. A manual major or minor release starts a fresh 14-day patch window.

Content and integrity gates

Every combined fill records two small assets alongside fixtures.tar.gz:

  • index_root.txt provides the cheap content-equality check;
  • fixtures_index.json.gz supports per-fixture validation and added/removed/changed counts.

The scheduled job publishes only a validated patch. It produces no release when the previous or current index is missing, corrupt or ambiguous; (json_path, id) identities are duplicated; a mass disappearance suggests a partial fill; the fork set changes unexpectedly; release-note commit enumeration is incomplete; or a newer manual draft is pending.

Manual mainnet release creation and scheduled patch publication share a concurrency lock, preventing both paths from selecting or creating the same next tests@ version simultaneously.

Releases predating the standalone index asset bootstrap from the leading metadata members of fixtures.tar.gz; the streaming reader allows files such as fixtures.ini before index.json and stops before downloading the fixture body.

Manual releases and cached artifacts

Manual tests releases are validated against the configured series. A new-series release must be exactly the configured vX.Y.0.

Cached releases remain fast, but a cached new-series release may reuse only a nightly whose target commit already contains that exact series marker. This prevents a just-merged consensus or fork release from accidentally attaching fixtures built before the change. If no matching nightly exists, the workflow requires a fresh fill or an explicitly selected newer nightly.

The A-tests label never gates publication; it only selects PRs for the generated release notes.

Verification

  • 91 passed in .github/scripts/tests/test_release_scripts.py
  • just static

Related Issues or PRs

N/A.

Checklist

  • Ran fast static checks to avoid CI failures.
  • PR title follows the repository's conventional title format.

Cute Animal Picture

Sleeping cat

@codecov

codecov Bot commented Aug 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.53%. Comparing base (43e3cd1) to head (f90f146).
⚠️ Report is 8 commits behind head on forks/amsterdam.

Additional details and impacted files
@@               Coverage Diff                @@
##           forks/amsterdam    #3385   +/-   ##
================================================
  Coverage            93.53%   93.53%           
================================================
  Files                  624      624           
  Lines                37074    37074           
  Branches              3394     3394           
================================================
  Hits                 34679    34679           
  Misses                1645     1645           
  Partials               750      750           
Flag Coverage Δ
unittests 93.53% <ø> (ø)

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 force-pushed the draft-mainnet-release-cron branch 3 times, most recently from 696b49b to 26e3c45 Compare August 22, 2026 16:09
@spencer-tb spencer-tb changed the title feat(ci): auto-draft scheduled mainnet fixture releases feat(ci): auto-publish mainnet fixture patch releases from the nightly fill Aug 22, 2026
@spencer-tb
spencer-tb requested a review from danceratopz August 22, 2026 16:20
@spencer-tb spencer-tb added C-feat Category: an improvement or new feature A-ci Area: Continuous Integration labels Aug 22, 2026
@spencer-tb
spencer-tb marked this pull request as ready for review August 22, 2026 16:20
@spencer-tb
spencer-tb force-pushed the draft-mainnet-release-cron branch 4 times, most recently from 59eba93 to 414df23 Compare August 22, 2026 22:22
@spencer-tb
spencer-tb force-pushed the draft-mainnet-release-cron branch from 414df23 to f90f146 Compare August 24, 2026 08:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ci Area: Continuous Integration C-feat Category: an improvement or new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant