Skip to content

circleci: make implicit-medium optimism jobs explicit (12 jobs, mixed gen2 sizes)#20957

Open
hdcesario-op wants to merge 1 commit into
developfrom
hdcesario-op/w4-optimism-implicit-medium-explicit
Open

circleci: make implicit-medium optimism jobs explicit (12 jobs, mixed gen2 sizes)#20957
hdcesario-op wants to merge 1 commit into
developfrom
hdcesario-op/w4-optimism-implicit-medium-explicit

Conversation

@hdcesario-op
Copy link
Copy Markdown
Contributor

Summary

Removes the last 12 jobs in this repo that declared no resource_class: field. Post-#20917 / #20927 every other job is on an explicit Gen2 class; these were the remaining stragglers running on Gen1 medium by CircleCI default. Each is set to an explicit Gen2 class right-sized to its workload, plus two machine-image pins to preserve the Gen1 OS where it would otherwise have silently upgraded jammy → noble.

This completes the optimism repo's Gen2 migration. No further resource_class work is planned here.

Why Gen2, not Gen1

Post-#20927 the whole repo is on Gen2. Mixing Gen1 in for these last 12 jobs would create two-class drift we'd just have to clean up later.

Why one PR, not two phases

The original handoff (and #20917's pattern) anticipated ~110 implicit-medium jobs, which would have justified splitting "make explicit" (Phase A) from "right-size" (Phase B). The actual scope is 12 jobs — small enough that per-job rationale fits in one audit-grade PR.

Per-job rationale

File Job Executor Class Image change Why this class
.circleci/config.yml prepare-continuation-config docker medium.gen2 Setup-pipeline job at the start of every CI run. Does a full monorepo checkout. Conservative: blast radius if it OOMs is every pipeline.
.circleci/continue/main.yml ci-gate docker small.gen2 Single utils/ci-gate call. Pure API gate, deterministic workload.
.circleci/continue/main.yml l2-chains-sync-check docker small.gen2 One bash script (check-l2-chains-sync.sh) verifying two files are in sync.
.circleci/continue/main.yml todo-issues machine medium.gen2 + image: ubuntu-2204:current Machine executor minimum is medium. Image param c-base_image resolves to the literal string "default", so swapping class would silently switch host from jammy to noble. Pin preserves Gen1 OS.
.circleci/continue/main.yml cannon-prestate machine medium.gen2 + image: ubuntu-2204:current Machine, build job (just reproducible-prestate), and no machine.image declared today — so the highest-risk job for the Gen1→Gen2 OS-default change. Pin first; broader right-sizing question left for a follow-up.
.circleci/continue/main.yml cannon-stf-verify docker medium.gen2 Has setup_remote_docker, which is not supported on small.gen2, plus a cannon build step.
.circleci/continue/main.yml op-deployer-forge-version docker small.gen2 Single just check-forge-version call.
.circleci/continue/main.yml stale-check machine medium.gen2 Machine minimum is medium. Image already pinned to ubuntu-2204:2024.08.1 — no OS-default risk.
.circleci/continue/main.yml close-issue machine medium.gen2 Same as stale-check: machine minimum, image already pinned.
.circleci/continue/rust-ci.yml required-rust-ci docker small.gen2 Pure aggregator gate (utils/ci-gate only).
.circleci/continue/rust-e2e.yml required-rust-e2e docker small.gen2 Pure aggregator gate (utils/ci-gate only).
.circleci/rust-nightly-bump.yml bump-nightly docker small.gen2 Daily-scheduled shell + git + gh pr create. Pure version bump.

Totals: 6 → small.gen2, 6 → medium.gen2, 2 image pins.

Methodology for picking small.gen2

Bias toward determinism-of-workload, not just utilization numbers. From the #20899 / #20931 fuzz lesson: telemetry doesn't capture outlier-seed spikes for distribution-tailed workloads, so a job that averages low but is non-deterministic should stay larger than the averages suggest.

Applied here as a checklist — small.gen2 only if all of these are true:

  • Job name pattern fits (*-gate, *-check, version-bump, *-aggregator, prepare/setup)
  • Steps contain no go test / cargo test / forge test / build commands
  • No setup_remote_docker (CircleCI does not support it on small.gen2)
  • No parallelism: N (none of the 12 declare this anyway)
  • Executor is docker (machine has no small tier)

Of the 12 jobs, 6 cleared every condition.

Machine-executor image-pin notes

Per the #20927 zstd lesson: machine jobs that don't explicitly pin machine.image inherit the class default (Gen1 → ubuntu-2204:current / jammy, Gen2 → ubuntu-2404:current / noble). Swapping <class><class>.gen2 therefore silently upgrades the host OS.

Two of the four machine jobs in this PR were exposed to that:

  • cannon-prestate declared no image: at all.
  • todo-issues referenced <<pipeline.parameters.c-base_image>>, which defaults to the literal string "default" — CircleCI's sentinel for "use the class default".

Both now pin image: ubuntu-2204:current to preserve the Gen1 OS. stale-check and close-issue were already on pinned ubuntu-2204:2024.08.1 and need no image change.

Validation gate

  • 14 insertions, 1 deletion across 5 files (git diff --stat)
  • 12 jobs that previously had no resource_class: field now have one
  • 0 implicit-class jobs remain in any of the 5 CI YAML files (re-run of the enumerator)
  • All 5 modified YAMLs still parse with yaml.safe_load
  • No other diff content: nothing reordered, no unrelated edits

Refs

… gen2 sizes)

Removes the last 12 jobs in this repo that declared no resource_class field.
Post-#20917/#20927 every other job is on explicit Gen2; these stragglers were
running on Gen1 medium by CircleCI default. Each is now set to an explicit
Gen2 class right-sized to its workload, with two machine-image pins to
preserve the Gen1 OS where it would otherwise have silently upgraded
jammy → noble.

→ small.gen2 (6 docker jobs):
  ci-gate, l2-chains-sync-check, op-deployer-forge-version,
  required-rust-ci, required-rust-e2e, bump-nightly

→ medium.gen2 (6 jobs):
  prepare-continuation-config (docker, SPOF for all CI)
  cannon-stf-verify           (docker, setup_remote_docker)
  todo-issues                 (machine)
  cannon-prestate             (machine)
  stale-check                 (machine)
  close-issue                 (machine)

Image pins (preserve Gen1 ubuntu-2204:current):
  todo-issues     : was image: <<pipeline.parameters.c-base_image>> (defaults to "default")
  cannon-prestate : no image was declared

stale-check and close-issue already pin ubuntu-2204:2024.08.1; no image change.

Refs: #20899 #20917 #20927 #20931
@codecov
Copy link
Copy Markdown

codecov Bot commented May 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.1%. Comparing base (e7c16a1) to head (052f03b).

Additional details and impacted files
@@            Coverage Diff             @@
##           develop   #20957     +/-   ##
==========================================
- Coverage     76.3%    76.1%   -0.3%     
==========================================
  Files          185      185             
  Lines        10712    10712             
==========================================
- Hits          8178     8156     -22     
- Misses        2390     2412     +22     
  Partials       144      144             
Flag Coverage Δ
cannon-go-tests-64 66.3% <ø> (ø)
contracts-bedrock-tests 82.0% <ø> (-0.4%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@hdcesario-op hdcesario-op marked this pull request as ready for review May 21, 2026 17:09
@hdcesario-op hdcesario-op requested a review from a team as a code owner May 21, 2026 17:09
@hdcesario-op hdcesario-op enabled auto-merge May 21, 2026 17:36
@hdcesario-op hdcesario-op added this pull request to the merge queue May 22, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks May 22, 2026
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