diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5f22ce7e7..739a43936 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,154 +1,156 @@ name: test on: - push: - branches: - - main - - "*upstream*" - pull_request: - branches: - - main - - "*upstream*" + push: + branches: + - main + - "*upstream*" + pull_request: + branches: + - main + - "*upstream*" concurrency: - cancel-in-progress: true - group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true + group: ${{github.workflow}}-${{github.ref}} env: - CARGO_TERM_COLOR: always - TARGET_RUST_VERSION: "nightly-2024-09-01" + CARGO_TERM_COLOR: always + TARGET_RUST_VERSION: "nightly-2024-09-01" jobs: - nextest: - uses: ./.github/workflows/nextest.yml - with: - profile: default - secrets: inherit - - doctest: - runs-on: ubuntu-22.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: ${{ env.TARGET_RUST_VERSION }} - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - name: cargo test - run: cargo test --doc -p forge - - clippy: - name: clippy - runs-on: ubuntu-22.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@clippy - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - run: cargo clippy --workspace --all-targets --all-features - env: - RUSTFLAGS: -Dwarnings - - rustfmt: - runs-on: ubuntu-22.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: ${{ env.TARGET_RUST_VERSION }} - components: rustfmt - - run: cargo fmt --all --check - - forge-fmt: - runs-on: ubuntu-22.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: ${{ env.TARGET_RUST_VERSION }} - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - name: forge fmt - shell: bash - run: ./.github/scripts/format.sh --check - - codespell: - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - uses: actions/checkout@v4 - - uses: codespell-project/actions-codespell@v2 - with: - skip: "*.json" - - crate-checks: - # ubuntu-22.04 runs out of disk space - runs-on: ubuntu-22.04-github-hosted-16core - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: ${{ env.TARGET_RUST_VERSION }} - - uses: taiki-e/install-action@cargo-hack - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - name: cargo hack - run: cargo hack check - - zk-cargo-test: - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - ref: ${{ github.event.pull_request.head.sha }} - - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: ${{ env.TARGET_RUST_VERSION }} - - - name: Install cargo-nextest - uses: taiki-e/install-action@nextest - - - name: Run era-test-node - uses: dutterbutter/era-test-node-action@v1 - with: - mode: fork - network: mainnet - log: info - logFilePath: era_test_node.log - target: x86_64-unknown-linux-gnu - releaseTag: v0.1.0-alpha.29 - - name: Setup Git config - run: | - git config --global user.name "GitHub Actions Bot" - git config --global user.email "<>" - git config --global url."https://github.com/".insteadOf "git@github.com:" - - name: Run zk tests - env: - RUST_BACKTRACE: full - TEST_MAINNET_URL: http://localhost:8011 - run: | - ZK_DEBUG_HISTORICAL_BLOCK_HASHES=5 cargo nextest run --package '*' --lib --test '*' --filter-expr 'test(~zk)' - - check-ci-install: - name: CI install - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - name: Install foundry-zksync - run: cp ./install-foundry-zksync ./foundryup-zksync/* /tmp/ && cd /tmp && ./install-foundry-zksync - - name: Verify installation - run: forge --version + nextest: + uses: ./.github/workflows/nextest.yml + with: + profile: default + secrets: inherit + + doctest: + runs-on: ubuntu-22.04 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ env.TARGET_RUST_VERSION }} + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - name: cargo test + run: cargo test --doc -p forge + + clippy: + name: clippy + runs-on: ubuntu-22.04 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@clippy + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - run: cargo clippy --workspace --all-targets --all-features + env: + RUSTFLAGS: -Dwarnings + + rustfmt: + runs-on: ubuntu-22.04 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ env.TARGET_RUST_VERSION }} + components: rustfmt + - run: cargo fmt --all --check + + forge-fmt: + runs-on: ubuntu-22.04 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ env.TARGET_RUST_VERSION }} + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - name: forge fmt + shell: bash + run: ./.github/scripts/format.sh --check + + codespell: + runs-on: ubuntu-22.04 + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: codespell-project/actions-codespell@v2 + with: + skip: "*.json" + + crate-checks: + # ubuntu-22.04 runs out of disk space + runs-on: ubuntu-22.04-github-hosted-16core + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + toolchain: ${{ env.TARGET_RUST_VERSION }} + - uses: taiki-e/install-action@cargo-hack + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - name: cargo hack + run: cargo hack check + + zk-cargo-test: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: recursive + ref: ${{ github.event.pull_request.head.sha }} + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: ${{ env.TARGET_RUST_VERSION }} + + - name: Install cargo-nextest + uses: taiki-e/install-action@nextest + + - name: Run anvil-zksync + uses: dutterbutter/anvil-zksync-action@v1.1.0 + with: + mode: fork + forkUrl: mainnet + log: info + logFilePath: anvil_zksync.log + target: x86_64-unknown-linux-gnu + releaseTag: v0.2.1 + + - name: Setup Git config + run: | + git config --global user.name "GitHub Actions Bot" + git config --global user.email "<>" + git config --global url."https://github.com/".insteadOf "git@github.com:" + + - name: Run zk tests + env: + RUST_BACKTRACE: full + TEST_MAINNET_URL: http://localhost:8011 + run: | + ZK_DEBUG_HISTORICAL_BLOCK_HASHES=5 cargo nextest run --package '*' --lib --test '*' --filter-expr 'test(~zk)' + + check-ci-install: + name: CI install + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Install foundry-zksync + run: cp ./install-foundry-zksync ./foundryup-zksync/* /tmp/ && cd /tmp && ./install-foundry-zksync + - name: Verify installation + run: forge --version diff --git a/crates/forge/tests/cli/cmd.rs b/crates/forge/tests/cli/cmd.rs index f3a1fce90..6c06d00b2 100644 --- a/crates/forge/tests/cli/cmd.rs +++ b/crates/forge/tests/cli/cmd.rs @@ -3131,3 +3131,16 @@ forgetest_init!(gas_report_include_tests, |prj, cmd| { .is_json(), ); }); + +forgetest_init!(zk_can_init_with_zksync, |prj, cmd| { + cmd.args(["init", "--zksync", "--force"]).assert_success(); + + // Check that zkout/ is in .gitignore + let gitignore_path = prj.root().join(".gitignore"); + assert!(gitignore_path.exists()); + let gitignore_contents = std::fs::read_to_string(&gitignore_path).unwrap(); + assert!(gitignore_contents.contains("zkout/")); + + // Assert that forge-zksync-std is installed + assert!(prj.root().join("lib/forge-zksync-std").exists()); +}); diff --git a/foundryup-zksync/foundryup-zksync b/foundryup-zksync/foundryup-zksync index abc726a50..b61be118f 100755 --- a/foundryup-zksync/foundryup-zksync +++ b/foundryup-zksync/foundryup-zksync @@ -178,6 +178,59 @@ EOF fi done + # Begin anvil-zksync installation + say "downloading anvil-zksync" + + # Supported targets for anvil-zksync + SUPPORTED_TARGETS=( + "x86_64-apple-darwin" + "aarch64-apple-darwin" + "x86_64-unknown-linux-gnu" + "aarch64-unknown-linux-gnu" + ) + + if [ "$ARCHITECTURE" = "arm64" ]; then + ARCHITECTURE="aarch64" + fi + + if [ "$PLATFORM" = "darwin" ]; then + TARGET="${ARCHITECTURE}-apple-${PLATFORM}" + elif [ "$PLATFORM" = "linux" ]; then + TARGET="${ARCHITECTURE}-unknown-${PLATFORM}-gnu" + else + TARGET="${ARCHITECTURE}-${PLATFORM}" + fi + + if [[ " ${SUPPORTED_TARGETS[*]} " == *" $TARGET "* ]]; then + ANVIL_REPO="matter-labs/anvil-zksync" + + say "getting latest tag for anvil-zksync" + + ANVIL_TAG=$(curl -s https://api.github.com/repos/$ANVIL_REPO/releases/latest | sed -n 's/.*"tag_name": "\([^"]*\)".*/\1/p') + + if [ -z "$ANVIL_TAG" ]; then + err "failed to get latest tag for anvil-zksync" + fi + + ANVIL_BIN_NAME="anvil-zksync-${ANVIL_TAG}-${TARGET}.${EXT}" + + ANVIL_BIN_URL="https://github.com/$ANVIL_REPO/releases/download/$ANVIL_TAG/$ANVIL_BIN_NAME" + + ANVIL_BIN_PATH="$FOUNDRY_BIN_DIR/anvil-zksync" + + say "downloading anvil-zksync from $ANVIL_BIN_URL" + + ensure download "$ANVIL_BIN_URL" | ensure tar -xzC "$FOUNDRY_BIN_DIR" + + mv "$FOUNDRY_BIN_DIR/anvil-zksync" "$ANVIL_BIN_PATH" + + chmod +x "$ANVIL_BIN_PATH" + + say "installed - $(ensure "$ANVIL_BIN_PATH" --version)" + else + warn "anvil-zksync is not supported on your platform ($TARGET). Skipping anvil-zksync installation." + fi + say "done!" # Install by cloning the repo with the provided branch/tag @@ -235,8 +288,6 @@ Update or revert to a specific Foundry-zksync version with ease. By default, the latest nightly version is installed from built binaries. -By default, the latest nightly version is installed from built binaries. - USAGE: foundryup-zksync @@ -313,19 +364,19 @@ banner() { .xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx ╔═╗ ╔═╗ ╦ ╦ ╔╗╔ ╔╦╗ ╦═╗ ╦ ╦ Portable and modular toolkit - ╠╣ ║ ║ ║ ║ ║║║ ║║ ╠╦╝ ╚╦╝ for Ethereum Application Development + ╠╣ ║ ║ ║ ║ ║║║ ║║ ╠╦╝ ╚╦╝ for ZKsync Application Development ╚ ╚═╝ ╚═╝ ╝╚╝ ═╩╝ ╩╚═ ╩ written in Rust. .xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx Fork of : https://github.com/foundry-rs/ Repo : https://github.com/matter-labs/foundry-zksync/ -Book : https://book.getfoundry.sh/ +Book : https://foundry-book.zksync.io/ .xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx ' -} +} main "$@"