Skip to content

Add sierra for predeployed contracts #20677

Add sierra for predeployed contracts

Add sierra for predeployed contracts #20677

Workflow file for this run

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