From f5296de119de5f9fdcc73480c21f8204f6f24e7d Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 13:01:22 +0300 Subject: [PATCH 1/6] chore(ci): consolidate Rust toolchain install into mise.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move Rust components (clippy, rustfmt, llvm-tools-preview) and cross-compile targets (riscv32imac-unknown-none-elf, wasm32-unknown-unknown, wasm32-wasip1) into mise.toml so developers and CI share one source of truth. Remove the rust-install-toolchain command from both main.yml and rust-ci.yml along with all 9 call sites — every invocation was installing the same 1.94.0 toolchain mise already provides, the only real work was adding the now-declared components/targets. Also drop the rust-msrv workflow entry (functionally identical to rust-build since MSRV equals the mise default). Co-Authored-By: Claude Opus 4.7 (1M context) --- .circleci/continue/rust-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/continue/rust-ci.yml b/.circleci/continue/rust-ci.yml index e93a06ab159..0952a707b0a 100644 --- a/.circleci/continue/rust-ci.yml +++ b/.circleci/continue/rust-ci.yml @@ -697,7 +697,7 @@ jobs: name: Build for <> working_directory: <> no_output_timeout: 40m - command: rustup target add <> && cargo hack build --target <> <> + command: cargo hack build --target <> <> - rust-save-build-cache: *hack-build-cache-args # Shared cargo hack job From 6b89f87c28058fd36135bf6016534987ad26339f Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 13:37:09 +0300 Subject: [PATCH 2/6] fix(ci): install wasm targets explicitly in rust-ci-cargo-hack-build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mise.toml declares the cross-compile targets but they're not reliably installed in CI — the previous pipeline only passed the wasm builds because a stale cache restored /data/mise-data/.rustup with targets seeded by a pre-refactor run. A Cargo.lock change evicted the cache and the builds broke with "can't find crate for \`core\`" on wasm32-wasip1 and wasm32-unknown-unknown. Restore the inline \`rustup target add\` that the previous rust-install-toolchain command used to run, matching what just check-no-std already does for riscv32imac. Co-Authored-By: Claude Opus 4.7 (1M context) --- .circleci/continue/rust-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/continue/rust-ci.yml b/.circleci/continue/rust-ci.yml index 0952a707b0a..e93a06ab159 100644 --- a/.circleci/continue/rust-ci.yml +++ b/.circleci/continue/rust-ci.yml @@ -697,7 +697,7 @@ jobs: name: Build for <> working_directory: <> no_output_timeout: 40m - command: cargo hack build --target <> <> + command: rustup target add <> && cargo hack build --target <> <> - rust-save-build-cache: *hack-build-cache-args # Shared cargo hack job From ee5c5716918b381b8d97d1b2f22d19ac00661345 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 13:10:23 +0300 Subject: [PATCH 3/6] chore(ci): move cargo-* tools + lychee from CI installers to mise.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pin cargo-deny, zepter, typos, cargo-udeps, cargo-hack, cargo-llvm-cov, and lychee in mise.toml so they're version-locked and available to contributors locally instead of being fetched per-job via cargo binstall or curl. Drop the corresponding install-cargo-binstall + cargo binstall fallbacks from rust-ci.yml, the inline lychee curl install, and the now-unused install-cargo-binstall command definitions in both main.yml and rust-ci.yml. Also drop the cargo-nextest binstall fallback — mise already pins nextest via the github:nextest-rs/nextest entry. Co-Authored-By: Claude Opus 4.7 (1M context) --- .circleci/continue/main.yml | 12 ------- .circleci/continue/rust-ci.yml | 64 ---------------------------------- mise.toml | 9 +++++ 3 files changed, 9 insertions(+), 76 deletions(-) diff --git a/.circleci/continue/main.yml b/.circleci/continue/main.yml index 2c48d2d1b97..5d1a21a2a45 100644 --- a/.circleci/continue/main.yml +++ b/.circleci/continue/main.yml @@ -323,18 +323,6 @@ commands: - apt-install: packages: "zstd=1.4.8*" - install-cargo-binstall: - description: "Install cargo-binstall for fast binary installations" - steps: - - run: - name: Install cargo-binstall - command: | - if command -v cargo-binstall >/dev/null 2>&1; then - echo "cargo-binstall already installed" - exit 0 - fi - curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash - get-target-branch: description: "Determine the PR target branch and export TARGET_BRANCH for subsequent steps" steps: diff --git a/.circleci/continue/rust-ci.yml b/.circleci/continue/rust-ci.yml index e93a06ab159..4fef405fa7d 100644 --- a/.circleci/continue/rust-ci.yml +++ b/.circleci/continue/rust-ci.yml @@ -130,18 +130,6 @@ commands: done sudo -E apt-get install -y << parameters.extra_flags >> << parameters.packages >> - install-cargo-binstall: - description: "Install cargo-binstall for fast binary installations" - steps: - - run: - name: Install cargo-binstall - command: | - if command -v cargo-binstall >/dev/null 2>&1; then - echo "cargo-binstall already installed" - exit 0 - fi - curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash - rust-setup-env: description: "Fix rust mise environment variables" steps: @@ -447,11 +435,6 @@ jobs: - rust-prepare-and-restore-cache: &deny-cache-args directory: <> prefix: <>-deny - - install-cargo-binstall - - run: - name: Install cargo-deny - command: | - command -v cargo-deny >/dev/null || cargo binstall --no-confirm cargo-deny - run: name: Run cargo deny working_directory: <> @@ -477,12 +460,6 @@ jobs: - rust-prepare-and-restore-cache: &zepter-cache-args directory: <> prefix: <>-zepter - - install-cargo-binstall - - run: - name: Install zepter - command: | - command -v zepter >/dev/null || cargo binstall --no-confirm zepter - zepter --version - run: name: Check feature propagation working_directory: <> @@ -504,11 +481,6 @@ jobs: - rust-prepare-and-restore-cache: &typos-cache-args directory: <> prefix: <>-typos - - install-cargo-binstall - - run: - name: Install typos-cli - command: | - command -v typos >/dev/null || cargo binstall --no-confirm typos-cli - run: name: Check for typos working_directory: <> @@ -622,11 +594,6 @@ jobs: directory: <> prefix: <>-tests profile: <> - - install-cargo-binstall - - run: - name: Install nextest - command: | - command -v cargo-nextest >/dev/null || cargo binstall --locked --no-confirm cargo-nextest - run: name: Run cargo tests working_directory: <> @@ -654,11 +621,6 @@ jobs: directory: <> prefix: <>-udeps profile: "release" - - install-cargo-binstall - - run: - name: Install cargo-udeps - command: | - command -v cargo-udeps >/dev/null || cargo binstall --no-confirm cargo-udeps - run: name: Check unused dependencies working_directory: <> @@ -688,11 +650,6 @@ jobs: - rust-prepare-and-restore-cache: &hack-build-cache-args directory: <> prefix: <>-hack-build - - install-cargo-binstall - - run: - name: Install cargo-hack - command: | - command -v cargo-hack >/dev/null || cargo binstall --no-confirm cargo-hack - run: name: Build for <> working_directory: <> @@ -718,11 +675,6 @@ jobs: directory: rust prefix: rust-hack features: "all" - - install-cargo-binstall - - run: - name: Install cargo-hack - command: | - command -v cargo-hack >/dev/null || cargo binstall --no-confirm cargo-hack - run: name: Run cargo hack working_directory: rust @@ -794,11 +746,6 @@ jobs: packages: "clang llvm-dev libclang-dev" extra_flags: "--no-install-recommends" - rust-prepare - - install-cargo-binstall - - run: - name: Install cargo-llvm-cov - command: | - command -v cargo-llvm-cov >/dev/null || cargo binstall --no-confirm cargo-llvm-cov - run: name: Build cannon command: | @@ -897,12 +844,6 @@ jobs: directory: rust prefix: kona-coverage version: "1" - - install-cargo-binstall - - run: - name: Install cargo-llvm-cov and nextest - command: | - command -v cargo-llvm-cov >/dev/null || cargo binstall --no-confirm cargo-llvm-cov - command -v cargo-nextest >/dev/null || cargo binstall --locked --no-confirm cargo-nextest - run: name: Generate lockfile if needed working_directory: rust @@ -928,11 +869,6 @@ jobs: steps: - utils/checkout-with-mise: checkout-method: blobless - - run: - name: Install lychee - command: | - curl -sSfL https://github.com/lycheeverse/lychee/releases/download/v0.15.1/lychee-v0.15.1-x86_64-unknown-linux-gnu.tar.gz | tar xz - sudo mv lychee /usr/local/bin/ - run: name: Check links working_directory: rust/kona diff --git a/mise.toml b/mise.toml index e710ae369d2..095eb77a47c 100644 --- a/mise.toml +++ b/mise.toml @@ -23,6 +23,15 @@ make = "4.4.1" svm-rs = "0.5.19" "github:nextest-rs/nextest" = { version = "0.9.132", version_prefix = "cargo-nextest-", bin = "cargo-nextest" } +# Rust tooling previously installed via `cargo binstall` in CI. +"ubi:EmbarkStudios/cargo-deny" = "0.19.4" +"ubi:ggwpez/zepter" = "1.88.0" +"ubi:crate-ci/typos" = "1.45.1" +"ubi:est31/cargo-udeps" = "0.1.60" +"ubi:taiki-e/cargo-hack" = "0.6.44" +"ubi:taiki-e/cargo-llvm-cov" = "0.8.5" +"github:lycheeverse/lychee" = { version = "0.23.0", version_prefix = "lychee-v", bin = "lychee" } + # Go dependencies "go:github.com/ethereum/go-ethereum/cmd/abigen" = "1.15.10" "go:github.com/ethereum/go-ethereum/cmd/geth" = "1.16.4" # Osaka testnet release. From 3b9ba4d946869c5de390ba530b28daf50a668a01 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 16:50:37 +0300 Subject: [PATCH 4/6] chore(mise): migrate ubi: backend to github:, drop kurtosis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mise marked the ubi backend deprecated in favor of github, which adds provenance verification (GitHub artifact attestations, SLSA) and fewer runtime dependencies. Swap every `ubi:` entry — both the new cargo-* pins added in the previous commit and the pre-existing forge/cast/anvil, just, codecov-uploader, goreleaser-pro, gotestsum, mockery, svm-rs, kontrol, and binary_signer aliases. Unlike ubi, the github backend doesn't auto-strip tag prefixes, so add `version_prefix = "v"` for tools whose release tags are v-prefixed (verified via `gh release list`). cargo-deny and casey/just are the only entries that stay prefix-less. Translate ubi's `[exe=X]` to github's equivalent `[bin=X]` for the multi-binary foundry archive and for goreleaser-pro and svm-rs. Drop the kurtosis pin and alias — no other tool in the repo resolves it via mise (rollup-boost and op-service testutils invoke it from the system install path). Verified locally with `mise install` against every entry. Co-Authored-By: Claude Opus 4.7 (1M context) --- mise.toml | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/mise.toml b/mise.toml index 095eb77a47c..7c702cf8f73 100644 --- a/mise.toml +++ b/mise.toml @@ -24,12 +24,12 @@ svm-rs = "0.5.19" "github:nextest-rs/nextest" = { version = "0.9.132", version_prefix = "cargo-nextest-", bin = "cargo-nextest" } # Rust tooling previously installed via `cargo binstall` in CI. -"ubi:EmbarkStudios/cargo-deny" = "0.19.4" -"ubi:ggwpez/zepter" = "1.88.0" -"ubi:crate-ci/typos" = "1.45.1" -"ubi:est31/cargo-udeps" = "0.1.60" -"ubi:taiki-e/cargo-hack" = "0.6.44" -"ubi:taiki-e/cargo-llvm-cov" = "0.8.5" +"github:EmbarkStudios/cargo-deny" = "0.19.4" +"github:ggwpez/zepter" = { version = "1.88.0", version_prefix = "v" } +"github:crate-ci/typos" = { version = "1.45.1", version_prefix = "v" } +"github:est31/cargo-udeps" = { version = "0.1.60", version_prefix = "v" } +"github:taiki-e/cargo-hack" = { version = "0.6.44", version_prefix = "v" } +"github:taiki-e/cargo-llvm-cov" = { version = "0.8.5", version_prefix = "v" } "github:lycheeverse/lychee" = { version = "0.23.0", version_prefix = "lychee-v", bin = "lychee" } # Go dependencies @@ -53,7 +53,6 @@ anvil = "1.2.3" # Other dependencies codecov-uploader = "0.8.0" goreleaser-pro = "2.11.2" -kurtosis = "1.8.1" git-cliff = "2.12.0" # Fake dependencies @@ -64,20 +63,19 @@ kontrol = "1.0.90" binary_signer = "1.0.4" [tool_alias] -forge = "ubi:foundry-rs/foundry[exe=forge]" -cast = "ubi:foundry-rs/foundry[exe=cast]" -anvil = "ubi:foundry-rs/foundry[exe=anvil]" -just = "ubi:casey/just" -codecov-uploader = "ubi:codecov/uploader" -goreleaser-pro = "ubi:goreleaser/goreleaser-pro[exe=goreleaser]" -gotestsum = "ubi:gotestyourself/gotestsum" -kurtosis = "ubi:kurtosis-tech/kurtosis-cli-release-artifacts[exe=kurtosis]" -mockery = "ubi:vektra/mockery" -svm-rs = "ubi:alloy-rs/svm-rs[exe=svm]" +forge = "github:foundry-rs/foundry[bin=forge,version_prefix=v]" +cast = "github:foundry-rs/foundry[bin=cast,version_prefix=v]" +anvil = "github:foundry-rs/foundry[bin=anvil,version_prefix=v]" +just = "github:casey/just" +codecov-uploader = "github:codecov/uploader[version_prefix=v]" +goreleaser-pro = "github:goreleaser/goreleaser-pro[bin=goreleaser,version_prefix=v]" +gotestsum = "github:gotestyourself/gotestsum[version_prefix=v]" +mockery = "github:vektra/mockery[version_prefix=v]" +svm-rs = "github:alloy-rs/svm-rs[bin=svm,version_prefix=v]" # These are disabled, but latest mise versions error if they don't have a known # install source even though it won't ever actually use that source. -kontrol = "ubi:ethereum-optimism/fake-kontrol" -binary_signer = "ubi:ethereum-optimism/fake-binary_signer" +kontrol = "github:ethereum-optimism/fake-kontrol" +binary_signer = "github:ethereum-optimism/fake-binary_signer" [settings] experimental = true From edece43b5e9b6533796755e486a6511daebf94c2 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 16:52:13 +0300 Subject: [PATCH 5/6] chore(mise): group nextest with the other Rust tooling entries Co-Authored-By: Claude Opus 4.7 (1M context) --- mise.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mise.toml b/mise.toml index 7c702cf8f73..b73ef3e91cd 100644 --- a/mise.toml +++ b/mise.toml @@ -21,9 +21,9 @@ just = "1.46.0" make = "4.4.1" svm-rs = "0.5.19" -"github:nextest-rs/nextest" = { version = "0.9.132", version_prefix = "cargo-nextest-", bin = "cargo-nextest" } -# Rust tooling previously installed via `cargo binstall` in CI. +# Rust tooling +"github:nextest-rs/nextest" = { version = "0.9.132", version_prefix = "cargo-nextest-", bin = "cargo-nextest" } "github:EmbarkStudios/cargo-deny" = "0.19.4" "github:ggwpez/zepter" = { version = "1.88.0", version_prefix = "v" } "github:crate-ci/typos" = { version = "1.45.1", version_prefix = "v" } From 83247022b704d7644448f089af9dbc4c020d79ab Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 21 Apr 2026 16:53:35 +0300 Subject: [PATCH 6/6] chore: remove remaining ubi: references after github: migration The mise docs and the vm-compat install hint still pointed users at the deprecated ubi: backend. Update them to github: so documented guidance matches mise.toml. Also note that github: requires explicit version_prefix for v-prefixed tags. Co-Authored-By: Claude Opus 4.7 (1M context) --- op-program/scripts/run-static-analysis.sh | 2 +- ops/book/src/ci/mise.md | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/op-program/scripts/run-static-analysis.sh b/op-program/scripts/run-static-analysis.sh index 591bfa9694e..66a9115471c 100755 --- a/op-program/scripts/run-static-analysis.sh +++ b/op-program/scripts/run-static-analysis.sh @@ -37,7 +37,7 @@ echo "✅ llvm-objdump found at $(which llvm-objdump)" if ! command -v vm-compat &> /dev/null; then echo "❌ Error: 'vm-compat' is required but not found in \$PATH" echo "Please install it using:" - echo " mise use -g ubi:ChainSafe/vm-compat@1.1.0" + echo " mise use -g github:ChainSafe/vm-compat@1.1.0" echo "Or manually download from:" echo " https://github.com/ChainSafe/vm-compat/releases" exit 1 diff --git a/ops/book/src/ci/mise.md b/ops/book/src/ci/mise.md index f10611e0e29..22c36f5cc6a 100644 --- a/ops/book/src/ci/mise.md +++ b/ops/book/src/ci/mise.md @@ -22,7 +22,9 @@ However, some packages require some additional configuration. GitHub packages that expose multiple executables or where the executable name is different from the package name will require an alias to be defined in `mise.toml`. To do this: -1. Add an alias named after the package to the `[alias]` stanza. -2. Configure the alias to point to the package repository and specify the executable at the end - as `[exe=]`, e.g.`ubi:goreleaser/goreleaser-pro[exe=goreleaser]`. +1. Add an alias named after the package to the `[tool_alias]` stanza. +2. Configure the alias to point to the package repository and specify the executable at the end + as `[bin=]`, e.g. `github:goreleaser/goreleaser-pro[bin=goreleaser,version_prefix=v]`. + Add `version_prefix=v` when the upstream release tags are v-prefixed (mise's `github:` backend + does not auto-strip prefixes). 3. Add your package and its version to the list of tools in the `[tools]` stanza. \ No newline at end of file