refactor(l1): migrate tooling workspace to ethrex-tooling repo#6487
refactor(l1): migrate tooling workspace to ethrex-tooling repo#6487
Conversation
Move all tooling crates (ef_tests, load_test, monitor, repl, loc, hive_report, migrations, reorgs, archive_sync, hardhat, import_benchmark, log_analysis, sync) to the standalone ethrex-tooling repository. ethrex-monitor and ethrex-repl are now fetched as git dependencies from ethrex-tooling (branch = "main"). A [patch] section ensures ethrex-tooling's transitive deps resolve to local workspace crates, avoiding duplicate crate versions. CI workflows that reference tooling/ paths now checkout ethrex-tooling into the tooling/ directory before use. Makefile targets are unchanged since they use relative tooling/ paths.
|
Too many files changed for review. ( |
|
Check out this pull request on See visual diffs & provide feedback on Jupyter Notebooks. Powered by ReviewNB |
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Migrates the in-repo tooling/ workspace out to the dedicated lambdaclass/ethrex-tooling repository, updating dependencies and CI so existing tooling/... commands keep working.
Changes:
- Removes the
tooling/workspace and its crates/scripts from this repo (migrated toethrex-tooling). - Switches
ethrex-monitorandethrex-replto git dependencies fromethrex-toolingand adds a git-source patch to resolve transitiveethrexcrates to local workspace paths. - Updates CI workflows to checkout
ethrex-toolingintotooling/before running existing steps; adds.cargo/config.toml.examplefor cross-repo development.
Reviewed changes
Copilot reviewed 122 out of 141 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| Cargo.toml | Removes tooling/repl from workspace; switches monitor/repl to git deps; adds git-source patch to reuse local ethrex crates |
| .github/workflows/pr_upgradeability.yaml | Checks out ethrex-tooling into tooling/ so existing upgradeability steps keep working |
| .github/workflows/pr_loc.yaml | Checks out ethrex-tooling into tooling/ for LOC jobs while preserving prior checkout state |
| .github/workflows/pr-main_levm.yaml | Checks out ethrex-tooling into tooling/ for LEVM/EF-test jobs |
| .github/workflows/pr-main_l1.yaml | Checks out ethrex-tooling into tooling/ for L1 CI jobs relying on tooling paths |
| .github/workflows/daily_loc_report.yaml | Checks out ethrex-tooling into tooling/ for scheduled LOC report |
| .github/workflows/daily_hive_report.yaml | Checks out ethrex-tooling into tooling/ for scheduled hive reporting |
| .cargo/config.toml.example | Documents local patch overrides to develop ethrex + ethrex-tooling together |
| tooling/Cargo.toml | Removed tooling workspace manifest (workspace moved to external repo) |
| tooling/repl/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/repl/README.md | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/client.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/admin.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/debug.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/engine.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/net.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/txpool.rs | Removed (migrated to ethrex-tooling) |
| tooling/repl/src/commands/web3.rs | Removed (migrated to ethrex-tooling) |
| tooling/reorgs/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/reorgs/README.md | Removed (migrated to ethrex-tooling) |
| tooling/monitor/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/lib.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/config.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/error.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/utils.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/mod.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/tabs.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/rich_accounts.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/node_status.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/mempool.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/l1_to_l2_messages.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/chain_status.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/blocks.rs | Removed (migrated to ethrex-tooling) |
| tooling/monitor/src/widget/batches.rs | Removed (migrated to ethrex-tooling) |
| tooling/migrations/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/migrations/README.md | Removed (migrated to ethrex-tooling) |
| tooling/migrations/src/main.rs | Removed (migrated to ethrex-tooling) |
| tooling/migrations/src/cli.rs | Removed (migrated to ethrex-tooling) |
| tooling/migrations/src/utils.rs | Removed (migrated to ethrex-tooling) |
| tooling/log_analysis/requirements.txt | Removed (migrated to ethrex-tooling) |
| tooling/log_analysis/log_analysis.ipynb | Removed (migrated to ethrex-tooling) |
| tooling/log_analysis/README.md | Removed (migrated to ethrex-tooling) |
| tooling/log_analysis/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/log_analysis/.gitignore | Removed (migrated to ethrex-tooling) |
| tooling/loc/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/loc/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/loc/src/main.rs | Removed (migrated to ethrex-tooling) |
| tooling/loc/src/report.rs | Removed (migrated to ethrex-tooling) |
| tooling/load_test/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/load_test/README.md | Removed (migrated to ethrex-tooling) |
| tooling/l2/dev/README.md | Removed (migrated to ethrex-tooling) |
| tooling/import_benchmark/parse_bench.py | Removed (migrated to ethrex-tooling) |
| tooling/import_benchmark/benchmark.sh | Removed (migrated to ethrex-tooling) |
| tooling/import_benchmark/README.md | Removed (migrated to ethrex-tooling) |
| tooling/import_benchmark/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/hive_report/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/hive_report/src/main.rs | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/package.json | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/hardhat.config.js | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/README.md | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/.gitignore | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/scripts/validate-upgrades.js | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/test/counter.test.js | Removed (migrated to ethrex-tooling) |
| tooling/hardhat/test/upgradeability.local.test.js | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/README.md | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/.gitignore | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/lib.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/main.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/mod.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/error.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/parser.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/report.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/result_check.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/runner.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/utils.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/deserialize.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state_v2/src/modules/block_runner.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/README.md | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/lib.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/parser.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/types.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/utils.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/tests/all.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/runner/revm_db.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/.gitignore | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/.fixtures_url | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/state/.fixtures_url_amsterdam | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/README.md | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/Makefile | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/lib.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/fork.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/deserialize.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/tests/all.rs | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/.fixtures_url | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/.fixtures_url_amsterdam | Removed (migrated to ethrex-tooling) |
| tooling/ef_tests/blockchain/.fixtures_url_zkevm | Removed (migrated to ethrex-tooling) |
| tooling/archive_sync/Cargo.toml | Removed (migrated to ethrex-tooling) |
| tooling/archive_sync/README.md | Removed (migrated to ethrex-tooling) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ethrex-monitor = { git = "https://github.com/lambdaclass/ethrex-tooling", branch = "main" } | ||
| ethrex-repl = { git = "https://github.com/lambdaclass/ethrex-tooling", branch = "main" } |
There was a problem hiding this comment.
Using branch = \"main\" for git dependencies makes the chosen upstream revision implicit and can lead to non-obvious updates when Cargo.lock is regenerated (e.g., in different CI contexts or when the lockfile changes). Prefer pinning these dependencies with an explicit rev = \"<commit sha>\" (or a tag) to make upgrades intentional and reproducible.
| ethrex-monitor = { git = "https://github.com/lambdaclass/ethrex-tooling", branch = "main" } | |
| ethrex-repl = { git = "https://github.com/lambdaclass/ethrex-tooling", branch = "main" } | |
| ethrex-monitor = { git = "https://github.com/lambdaclass/ethrex-tooling", rev = "<commit sha>" } | |
| ethrex-repl = { git = "https://github.com/lambdaclass/ethrex-tooling", rev = "<commit sha>" } |
| - name: Checkout ethrex-tooling | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| repository: lambdaclass/ethrex-tooling |
There was a problem hiding this comment.
This checkout relies on the external repository’s default branch. Since the PR description implies using the main branch, it would be more robust to set ref: main explicitly (and consider pinning to a specific commit SHA for CI stability). Otherwise, a default-branch rename or unexpected default-branch change in ethrex-tooling could break CI without any change in this repo.
| repository: lambdaclass/ethrex-tooling | |
| repository: lambdaclass/ethrex-tooling | |
| ref: main |
| # Ensure ethrex-tooling's transitive deps resolve to local workspace crates | ||
| # instead of fetching a second copy from git (avoids "two versions of the same crate" errors). | ||
| [patch."https://github.com/lambdaclass/ethrex"] | ||
| ethrex = { path = "./cmd/ethrex" } | ||
| ethrex-blockchain = { path = "./crates/blockchain" } | ||
| ethrex-common = { path = "./crates/common" } | ||
| ethrex-config = { path = "./crates/common/config" } | ||
| ethrex-crypto = { path = "./crates/common/crypto" } | ||
| ethrex-guest-program = { path = "./crates/guest-program" } | ||
| ethrex-l2 = { path = "./crates/l2" } | ||
| ethrex-l2-common = { path = "./crates/l2/common" } | ||
| ethrex-l2-prover = { path = "./crates/l2/prover" } | ||
| ethrex-l2-rpc = { path = "./crates/l2/networking/rpc" } | ||
| ethrex-levm = { path = "./crates/vm/levm" } | ||
| ethrex-p2p = { path = "./crates/networking/p2p" } | ||
| ethrex-prover = { path = "./crates/prover" } | ||
| ethrex-rlp = { path = "./crates/common/rlp" } | ||
| ethrex-rpc = { path = "./crates/networking/rpc" } | ||
| ethrex-sdk = { path = "./crates/l2/sdk" } | ||
| ethrex-storage = { path = "./crates/storage" } | ||
| ethrex-storage-rollup = { path = "./crates/l2/storage" } | ||
| ethrex-trie = { path = "./crates/common/trie" } | ||
| ethrex-vm = { path = "./crates/vm" } |
There was a problem hiding this comment.
This adds a global patch for the https://github.com/lambdaclass/ethrex git source. That patch will affect any crate in the dependency graph coming from that git source (including indirect uses outside tooling), which can make debugging dependency resolution harder when unexpected overrides happen. Consider limiting the blast radius by either (a) moving this patch behind a documented opt-in workflow (e.g., .cargo/config.toml for local dev), or (b) ensuring ethrex-tooling does not pull ethrex crates via git for normal builds so the patch is unnecessary in production/CI.
| # Ensure ethrex-tooling's transitive deps resolve to local workspace crates | |
| # instead of fetching a second copy from git (avoids "two versions of the same crate" errors). | |
| [patch."https://github.com/lambdaclass/ethrex"] | |
| ethrex = { path = "./cmd/ethrex" } | |
| ethrex-blockchain = { path = "./crates/blockchain" } | |
| ethrex-common = { path = "./crates/common" } | |
| ethrex-config = { path = "./crates/common/config" } | |
| ethrex-crypto = { path = "./crates/common/crypto" } | |
| ethrex-guest-program = { path = "./crates/guest-program" } | |
| ethrex-l2 = { path = "./crates/l2" } | |
| ethrex-l2-common = { path = "./crates/l2/common" } | |
| ethrex-l2-prover = { path = "./crates/l2/prover" } | |
| ethrex-l2-rpc = { path = "./crates/l2/networking/rpc" } | |
| ethrex-levm = { path = "./crates/vm/levm" } | |
| ethrex-p2p = { path = "./crates/networking/p2p" } | |
| ethrex-prover = { path = "./crates/prover" } | |
| ethrex-rlp = { path = "./crates/common/rlp" } | |
| ethrex-rpc = { path = "./crates/networking/rpc" } | |
| ethrex-sdk = { path = "./crates/l2/sdk" } | |
| ethrex-storage = { path = "./crates/storage" } | |
| ethrex-storage-rollup = { path = "./crates/l2/storage" } | |
| ethrex-trie = { path = "./crates/common/trie" } | |
| ethrex-vm = { path = "./crates/vm" } | |
| # Do not commit a workspace-wide patch for the ethrex git source here. | |
| # If local development needs path overrides to avoid duplicate git/workspace crates, | |
| # configure them as an explicit opt-in in `.cargo/config.toml` instead. |
There was a problem hiding this comment.
I ran make lint and it's working
- Add ethrex-tooling checkout to pr_lint_license.yaml (license check does cd tooling) - Add ethrex-tooling checkout to check-cargo-locks job in pr-main_l1.yaml - Remove COPY tooling lines from Dockerfile (monitor/repl are now git deps) - Remove stale tooling/ entries from .dockerignore
iovoid
left a comment
There was a problem hiding this comment.
The references in the Makefile and docs should be updated, and maybe the repo's existence should be mentioned in the README.
Explicitly set ref: main on all actions/checkout steps for ethrex-tooling to guard against default branch renames.
avilagaston9
left a comment
There was a problem hiding this comment.
The on.pull_request.paths trigger in .github/workflows/pr-main_levm.yaml still references tooling/ef_tests/state/** and tooling/ef_tests/state (lines 11-16), but these paths no longer exist in the repo since tooling was moved to ethrex-tooling. PRs that only change EF test code won't trigger this workflow anymore. These stale path entries should be removed.
Resolve modify/delete conflicts in tooling/repl/ by keeping deletion (files now live in ethrex-tooling). Port repl changes from #6427 (proof coordinator removal) to ethrex-tooling and update Cargo.lock to pick up the new revision.
Mention the separate ethrex-tooling repository where development tools (EF tests, load tests, monitor TUI, REPL, benchmarks) now live.
These paths no longer exist in the repo since tooling was migrated to ethrex-tooling. Without removing them, PRs that only change EF test code won't trigger this workflow.
|
b00af96 — Added ethrex-tooling reference to README |
|
7b4a796 — Removed stale tooling/ef_tests/state paths from LEVM workflow trigger |
Replace stale tooling/ paths in documentation with ethrex-tooling/ references now that tooling lives in a separate repository: - crates/vm/levm/README.md: fix broken relative links to ef_tests READMEs - docs/developers/l1/testing/ef-tests.md: add clone note, update cd paths - docs/developers/l1/testing/hive.md: update all tooling/ paths - docs/eip-8025.md: update ef_tests/blockchain paths - docs/workflows/prover_benchmarking.md: update load_test build/run commands
Benchmark Results ComparisonNo significant difference was registered for any benchmark run. Detailed ResultsBenchmark Results: BubbleSort
Benchmark Results: ERC20Approval
Benchmark Results: ERC20Mint
Benchmark Results: ERC20Transfer
Benchmark Results: Factorial
Benchmark Results: FactorialRecursive
Benchmark Results: Fibonacci
Benchmark Results: FibonacciRecursive
Benchmark Results: ManyHashes
Benchmark Results: MstoreBench
Benchmark Results: Push
Benchmark Results: SstoreBench_no_opt
|
The [patch] section in Cargo.toml is needed during the cook phase so that ethrex-monitor's transitive git deps resolve to local workspace crates instead of fetching a separate copy from the ethrex git repo.
cargo-chef cook cannot resolve git dependencies (ethrex-monitor/repl) because the [patch] section references local source paths that only contain stubs during the cook phase. Let cook fail gracefully since it's a caching optimization — the real build step has all sources available.
iovoid
left a comment
There was a problem hiding this comment.
Some places assume the folder is cloned to tooling, and others mention ethrex-tooling.
Also the folder should be gitignored to avoid pushing it.
|
|
||
| ```sh | ||
| cd tooling/ef_tests/state | ||
| cd ethrex-tooling/ef_tests/state |
There was a problem hiding this comment.
Inconsistent with scripts assuming the folder is named 'tooling'
Motivation
The ethrex repo mixes core node code with development tooling (EF tests, load tests, monitor TUI, REPL, loc counter, etc.). This makes the repo harder to navigate and couples tooling release cadence to node releases. This PR moves all tooling to the new
lambdaclass/ethrex-toolingrepository.Description
tooling/directory — all contents migrated toethrex-toolingethrex-monitorandethrex-replfrom local path deps to git deps pointing toethrex-tooling(branch = "main")[patch."https://github.com/lambdaclass/ethrex"]section to rootCargo.tomlsoethrex-tooling's transitive deps resolve to local workspace crates (prevents duplicate crate versions)ethrex-toolinginto thetooling/path before use — all existingcd tooling/...commands remain unchangedCOPY toolinglines (monitor/repl are now fetched as git deps by cargo).cargo/config.toml.exampledocumenting local path patch overrides for cross-repo developmentCross-repo dev workflow
For changes that touch both repos:
.cargo/config.tomlpatches for local development (see.cargo/config.toml.example)ethrex-toolingPR firstcargo updatein ethrex to pick up new tooling revisionHow to Test
cargo check --workspacepassestooling/paths pass (EF tests, LOC, hive report, upgradeability, reorgs, license check, cargo lock check)ethrex-toolingrepo builds standalone:cargo check --workspace