Skip to content

Development Workflow

The base/base repository drives day-to-day development through Just recipes for checking, testing, formatting, and CI parity. The recipes below cover the commands you will run most often.

CommandWhat it does
just checkRuns the full check suite (format, udeps, clippy, test, deny)
just testRuns the test suite via cargo-nextest
just fixAuto-fixes formatting, clippy, and zepter issues
just ciFull CI pipeline (fix, check, lychee, zepter, no-std check)

The project uses cargo-nextest as its test runner. Install it if you have not already:

Terminal window
cargo install cargo-nextest

Run the full test suite:

Terminal window
just test

This executes cargo nextest with all features enabled. The devnet tests are excluded by default since they require a running Docker Compose stack.

To run tests for a specific crate:

Terminal window
cargo nextest run -p base-execution-evm

To run a single test by name:

Terminal window
cargo nextest run -p base-execution-evm -- test_name

Some tests depend on compiled Solidity contracts. If you see test failures related to missing contract artifacts, build them first:

Terminal window
just build-contracts

See Building from Source for details.

The check recipe runs the full quality gate in sequence:

Terminal window
just check

This is equivalent to running each of these in order:

  1. check-format — Verifies that all Rust source files match rustfmt style.
  2. check-udeps — Detects unused dependencies in Cargo.toml files.
  3. check-clippy — Runs Clippy with the project’s configured lints.
  4. test — Runs the full test suite.
  5. check-deny — Checks dependencies for known vulnerabilities and license issues via cargo-deny.

If any step fails, the pipeline stops. Fix the issue and re-run.

Most formatting and lint issues can be fixed automatically:

Terminal window
just fix

This runs three fixers in sequence:

  1. format-fix — Applies rustfmt to all source files.
  2. clippy-fix — Applies Clippy’s suggested fixes.
  3. zepter-fix — Fixes feature propagation issues detected by zepter.

Run just fix before committing to avoid CI failures.

To run the same checks that CI runs on pull requests:

Terminal window
just ci

This encompasses:

  1. fix — auto-fix everything fixable
  2. check — the full quality gate
  3. lychee — checks for broken links in documentation
  4. zepter — validates Cargo feature propagation
  5. check-no-std — ensures no_std compatibility for crates that require it

Running just ci locally before pushing is the best way to catch issues early.

Check formatting without modifying files:

Terminal window
just check-format

Auto-format all files:

Terminal window
just format-fix

The project uses the standard rustfmt configuration. If your editor supports format-on-save with rustfmt, enable it for a smoother workflow.

Run Clippy to catch common mistakes and non-idiomatic patterns:

Terminal window
just check-clippy

Apply Clippy’s suggestions automatically:

Terminal window
just clippy-fix

For the best development experience, configure your editor with:

  • rust-analyzer — Provides inline type hints, go-to-definition, and real-time diagnostics.

  • Format on save — Set your editor to run rustfmt whenever you save a .rs file.

  • Clippy as the check command — Configure rust-analyzer to use clippy instead of cargo check for richer diagnostics:

    {
    "rust-analyzer.check.command": "clippy"
    }
  • Local Devnet — run a full local network for integration testing.
  • Contributing — guidelines for submitting pull requests.