From f282206241ad942f998b36c8c669adaced04a340 Mon Sep 17 00:00:00 2001 From: Dori Medini Date: Tue, 30 Jul 2024 12:13:26 +0300 Subject: [PATCH] feat(blockifier): recompile Cairo1 in the CI --- .../workflows/blockifier_compiled_cairo.yml | 35 ++++++++++++++++--- .../src/test_utils/cairo_compile.rs | 1 - .../feature_contracts_compatibility_test.rs | 32 +++++------------ 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/.github/workflows/blockifier_compiled_cairo.yml b/.github/workflows/blockifier_compiled_cairo.yml index e2eed9636f..1c3b44f734 100644 --- a/.github/workflows/blockifier_compiled_cairo.yml +++ b/.github/workflows/blockifier_compiled_cairo.yml @@ -4,11 +4,13 @@ on: push: branches: - main + - main-v[0-9].** tags: - v[0-9].** paths: - - 'crates/blockifier/feature_contracts/cairo0/**' - '.github/workflows/blockifier_compiled_cairo.yml' + - 'crates/blockifier/feature_contracts/**' + - 'crates/blockifier/tests/**' pull_request: types: - opened @@ -16,7 +18,8 @@ on: - synchronize paths: - '.github/workflows/blockifier_compiled_cairo.yml' - - 'crates/blockifier/feature_contracts/cairo0/**' + - 'crates/blockifier/feature_contracts/**' + - 'crates/blockifier/tests/**' jobs: verify_cairo_file_dependencies: @@ -39,6 +42,28 @@ jobs: LD_LIBRARY_PATH: ${{ env.Python3_ROOT_DIR }}/bin run: echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV - - run: - pip install -r crates/blockifier/tests/requirements.txt; - cargo test verify_feature_contracts -- --include-ignored + # Checkout sequencer into a dedicated directory - technical requirement in order to be able to checkout `cairo` in a sibling directory. + - name: checkout sequencer into `sequencer` directory. + uses: actions/checkout@v4 + with: + repository: 'starkware-libs/sequencer' + path: 'sequencer' + + - name: checkout cairo1 repo in order to compile cairo1 contracts. + uses: actions/checkout@v4 + with: + repository: 'starkware-libs/cairo' + fetch-depth: 0 + fetch-tags: true + path: 'cairo' + + - name: install toolchain for legacy contract compilation (old compiler tag) + uses: actions-rs/toolchain@master + with: + toolchain: nightly-2023-07-05 + + - name: Verify cairo contract recompilation (both cairo versions). + run: + cd sequencer && + pip install -r crates/blockifier/tests/requirements.txt && + cargo test -p blockifier --test feature_contracts_compatibility_test --features testing -- --include-ignored diff --git a/crates/blockifier/src/test_utils/cairo_compile.rs b/crates/blockifier/src/test_utils/cairo_compile.rs index 49f3254505..d6ecb9e6f1 100644 --- a/crates/blockifier/src/test_utils/cairo_compile.rs +++ b/crates/blockifier/src/test_utils/cairo_compile.rs @@ -186,7 +186,6 @@ fn verify_cairo1_compiler_deps(git_tag_override: Option) { // Checkout the required version in the compiler repo. run_and_verify_output(Command::new("git").args([ "-C", - // TODO(Dori, 1/6/2024): Handle CI case (repo path will be different). cairo_repo_path.to_str().unwrap(), "checkout", &tag, diff --git a/crates/blockifier/tests/feature_contracts_compatibility_test.rs b/crates/blockifier/tests/feature_contracts_compatibility_test.rs index bb856a0fc7..3c385f7f2d 100644 --- a/crates/blockifier/tests/feature_contracts_compatibility_test.rs +++ b/crates/blockifier/tests/feature_contracts_compatibility_test.rs @@ -8,7 +8,9 @@ use rstest::rstest; const CAIRO0_FEATURE_CONTRACTS_DIR: &str = "feature_contracts/cairo0"; const CAIRO1_FEATURE_CONTRACTS_DIR: &str = "feature_contracts/cairo1"; const COMPILED_CONTRACTS_SUBDIR: &str = "compiled"; -const FIX_COMMAND: &str = "FIX_FEATURE_TEST=1 cargo test -- --ignored"; +const FIX_COMMAND: &str = "FIX_FEATURE_TEST=1 cargo test -p blockifier --test \ + feature_contracts_compatibility_test --features testing -- \ + --include-ignored"; // To fix Cairo0 feature contracts, first enter a python venv and install the requirements: // ``` @@ -18,22 +20,12 @@ const FIX_COMMAND: &str = "FIX_FEATURE_TEST=1 cargo test -- --ignored"; // ``` // Then, run the FIX_COMMAND above. -// This test currently doesn't support Cairo1 contracts. To fix them you'll need to compile them one -// by one: -// 1. Clone the [cairo repo](https://github.com/starkware-libs/cairo). -// 2. Checkout the commit defined in [the root Cargo.toml](../../../../Cargo.toml). -// 3. From within the compiler repo root directory, run: -// ``` -// PREFIX=~/workspace/blockifier/crates/blockifier/feature_contracts/cairo1 -// CONTRACT_NAME= -// cargo run --release --bin starknet-compile -- --single-file \ -// $PREFIX/$CONTRACT_NAME.cairo \ -// $PREFIX/compiled/$CONTRACT_NAME.sierra.json -// cargo run --release --bin starknet-sierra-compile \ -// $PREFIX/compiled/$CONTRACT_NAME.sierra.json \ -// $PREFIX/compiled/$CONTRACT_NAME.casm.json -// ``` -// TODO(Gilad, 1/1/2024): New year's resolution: support Cairo1 in the test. +// To test Cairo1 feature contracts, first clone the Cairo repo and checkout the required tag. +// The repo should be located next to the sequencer repo: +// / +// - sequencer/ +// - cairo/ +// Then, run the FIX_COMMAND above. // Checks that: // 1. `TEST_CONTRACTS` dir exists and contains only `.cairo` files and the subdirectory @@ -130,12 +122,6 @@ fn verify_feature_contracts_match_enum() { fn verify_feature_contracts( #[values(CairoVersion::Cairo0, CairoVersion::Cairo1)] cairo_version: CairoVersion, ) { - // TODO(Dori, 1/9/2024): Support Cairo1 contracts in the CI and remove this `if` statement. - if std::env::var("CI").unwrap_or("false".into()) == "true" - && matches!(cairo_version, CairoVersion::Cairo1) - { - return; - } let fix_features = std::env::var("FIX_FEATURE_TEST").is_ok(); verify_feature_contracts_compatibility(fix_features, cairo_version) }