Add sierra for predeployed contracts #20677
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| merge_group: | |
| push: | |
| branches: | |
| - master | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| get-scarb-versions: | |
| if: github.event_name == 'merge_group' | |
| name: Get Scarb versions | |
| runs-on: ubuntu-latest | |
| outputs: | |
| versions: ${{ steps.get_versions.outputs.versions }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/setup@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - run: | | |
| asdf plugin add scarb | |
| asdf install scarb latest | |
| asdf set --home scarb latest | |
| - name: Get versions | |
| id: get_versions | |
| run: | | |
| scarb_versions=$(./scripts/get_scarb_versions.sh --previous) | |
| echo ${scarb_versions[@]} | |
| echo "versions=[${scarb_versions[@]}]" >> "$GITHUB_OUTPUT" | |
| test-workspace: | |
| # Runs tests from all crates across the workspace, except: | |
| # - `sncast` tests | |
| # - `forge` integration and e2e tests | |
| # `native-api` is also excluded as there are no tests and it requires extra setup to compile. | |
| name: Workspace Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| - run: cargo test --profile ci --workspace --exclude sncast --exclude forge --exclude native-api | |
| - run: cargo test --profile ci --lib -p forge | |
| build-test-forge-nextest-archive: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-scarb: 'false' | |
| setup-usc: 'false' | |
| - name: Install nextest | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Determine test features | |
| id: test_features | |
| run: | | |
| FEATURES="run_test_for_scarb_since_2_15_1" | |
| echo "features=$FEATURES" >> "$GITHUB_OUTPUT" | |
| - name: Build and archive tests | |
| run: | | |
| if [ -n "${{ steps.test_features.outputs.features }}" ]; then | |
| cargo nextest archive --cargo-profile ci -p forge --features "${{ steps.test_features.outputs.features }}" --archive-file 'nextest-archive-${{ runner.os }}.tar.zst' | |
| else | |
| cargo nextest archive --cargo-profile ci -p forge --archive-file 'nextest-archive-${{ runner.os }}.tar.zst' | |
| fi | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: nextest-archive-${{ runner.os }} | |
| path: nextest-archive-${{ runner.os }}.tar.zst | |
| build-test-forge-nextest-archive-native: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| setup-scarb: 'false' | |
| setup-usc: 'false' | |
| - name: Install nextest | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Determine test features | |
| id: test_features | |
| run: | | |
| FEATURES="cairo-native,run_test_for_scarb_since_2_15_1" | |
| echo "features=$FEATURES" >> "$GITHUB_OUTPUT" | |
| - name: Build and archive tests | |
| run: cargo nextest archive --cargo-profile ci -p forge --features "${{ steps.test_features.outputs.features }}" --archive-file 'nextest-archive-${{ runner.os }}-native.tar.zst' | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: nextest-archive-${{ runner.os }}-native | |
| path: nextest-archive-${{ runner.os }}-native.tar.zst | |
| test-forge-integration: | |
| name: Test Forge / Integration Tests | |
| runs-on: [ ubuntu-latest ] | |
| needs: [ build-test-forge-nextest-archive ] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| partition: [ 1, 2, 3 ] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/setup-tools | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-${{ runner.os }}.tar.zst' integration | |
| test-forge-integration-native: | |
| name: Test Forge / Integration Tests (native) | |
| runs-on: [ ubuntu-latest ] | |
| needs: [ build-test-forge-nextest-archive-native ] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| partition: [ 1, 2, 3 ] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/setup-tools | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ runner.os }}-native | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-${{ runner.os }}-native.tar.zst' integration | |
| test-forge-e2e: | |
| name: Test Forge / E2E Tests | |
| runs-on: ubuntu-latest | |
| needs: [ build-test-forge-nextest-archive ] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| partition: [ 1, 2, 3 ] | |
| steps: | |
| - name: Extract branch name | |
| if: github.event_name != 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract branch name on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo $GITHUB_HEAD_REF)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner | |
| if: github.event_name != 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.repository }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.event.pull_request.head.repo.full_name }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Install cairo-profiler | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| - name: Install cairo-coverage | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-${{ runner.os }}.tar.zst' e2e | |
| test-forge-e2e-native: | |
| name: Test Forge / E2E Tests (native) | |
| runs-on: ubuntu-latest | |
| needs: [ build-test-forge-nextest-archive-native ] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| partition: [ 1, 2, 3 ] | |
| steps: | |
| - name: Extract branch name | |
| if: github.event_name != 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract branch name on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo $GITHUB_HEAD_REF)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner | |
| if: github.event_name != 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.repository }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.event.pull_request.head.repo.full_name }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Install cairo-profiler | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| - name: Install cairo-coverage | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ runner.os }}-native | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-${{ runner.os }}-native.tar.zst' e2e | |
| test-forge-e2e-snap: | |
| if: github.event_name == 'merge_group' | |
| name: Test Forge / E2E Snap (Scarb ${{ matrix.version }}) | |
| runs-on: ubuntu-latest | |
| needs: get-scarb-versions | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.get-scarb-versions.outputs.versions) }} | |
| steps: | |
| - name: Extract branch name | |
| if: github.event_name != 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract branch name on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "BRANCH_NAME=$(echo $GITHUB_HEAD_REF)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner | |
| if: github.event_name != 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.repository }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Extract repo name and owner on pull request | |
| if: github.event_name == 'pull_request' | |
| run: echo "REPO_NAME=$(echo ${{ github.event.pull_request.head.repo.full_name }}.git)" >> $GITHUB_ENV | |
| shell: bash | |
| - name: Install cairo-profiler | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| - name: Install cairo-coverage | |
| run: | | |
| curl -L https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| scarb-version: ${{ matrix.version }} | |
| - name: Run snap E2E tests | |
| run: cargo test --profile ci -p forge --test main snap_ | |
| test-plugin-checks: | |
| name: Test plugin across different scarb versions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| # No setup scarb action is used because we want to install multiple versions of scarb through asdf | |
| with: | |
| setup-scarb: 'false' | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - run: cargo test --profile ci --package forge --features test_for_multiple_scarb_versions e2e::plugin_diagnostic | |
| test-requirements-check-special-conditions: | |
| name: Test requirements check special conditions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-scarb: 'false' | |
| - run: cargo test --profile ci --package forge --features no_scarb_installed --lib compatibility_check::tests::failing_tool_not_installed | |
| - uses: software-mansion/setup-scarb@v1 | |
| with: | |
| scarb-version: "2.12.0" | |
| - run: cargo test --profile ci --package forge --features scarb_2_12_0 --test main e2e::requirements::test_warning_on_scarb_version_below_recommended | |
| test-forge-oracles: | |
| name: Test Oracles in Forge | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| scarb-version: '2.13.1' | |
| - run: cargo test --profile ci -p forge --features run_test_for_scarb_since_2_13_1 e2e::oracles | |
| test-forge-scarb-plugin: | |
| name: Test Forge Scarb Plugin | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/setup-tools | |
| - name: Run Forge Scarb Plugin tests | |
| working-directory: crates/snforge-scarb-plugin | |
| run: cargo test --profile ci | |
| test-cast: | |
| name: Test Cast | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| - name: Run tests | |
| run: cargo test --profile ci -p sncast | |
| test-ledger: | |
| name: Test Ledger | |
| runs-on: ubuntu-latest | |
| container: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| - name: Run tests | |
| run: cargo test --profile ci -p sncast --features ledger-emulator ledger -- --ignored | |
| fmt-lint-typos: | |
| name: Lint and Format | |
| runs-on: ubuntu-latest | |
| env: | |
| # Make sure CI fails on all warnings - including Clippy lints. | |
| RUSTFLAGS: "-Dwarnings" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/prepare-predeployed-contracts | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| setup-usc: 'false' | |
| - run: rustup component add rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --check | |
| - name: Check formatting snforge-scarb-plugin | |
| run: cargo fmt --check | |
| working-directory: crates/snforge-scarb-plugin | |
| - name: Lint | |
| run: cargo lint | |
| - name: Lint snforge-scarb-plugin | |
| run: cargo lint | |
| working-directory: crates/snforge-scarb-plugin | |
| - name: Check cairo files format | |
| run: | | |
| output=$(find . -type f -name "Scarb.toml" -execdir sh -c ' | |
| echo "Running \"scarb fmt\" in directory: $PWD" | |
| scarb fmt --check | |
| ' \;) | |
| echo "$output" | |
| if grep -iq "Diff" <<< "$output"; then | |
| exit 1 | |
| fi | |
| exit 0 | |
| - name: Check typos | |
| uses: crate-ci/typos@v1.40.0 | |
| build-docs: | |
| name: Test Building Docs | |
| runs-on: ubuntu-latest | |
| env: | |
| MDBOOK_VERSION: 0.4.52 | |
| # TODO(#3970): Use latest version after resolving issue | |
| MDBOOK_VARIABLES_VERSION: 0.3.0 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/setup-tools | |
| - name: Install mdBook | |
| run: | | |
| cargo install --version ${MDBOOK_VERSION} mdbook | |
| cargo install --version ${MDBOOK_VARIABLES_VERSION} mdbook-variables | |
| - name: Install mdBook Link-Check | |
| run: | | |
| cargo install mdbook-linkcheck | |
| - name: Build with mdBook | |
| run: | | |
| # TODO(#2781): Use `mdbook build` | |
| ./scripts/build_docs.sh | |
| - name: Install Forge | |
| env: | |
| CARGO_INCREMENTAL: 0 | |
| run: | | |
| cargo install --path crates/forge --locked --debug | |
| - name: Verify Cairo listings | |
| run: | | |
| ./scripts/verify_cairo_listings.sh |