refactor(sncast) Introduce accounts repository #23672
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@v7 | |
| - 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@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| save-cache: 'true' | |
| - run: cargo test --profile ci --workspace --exclude sncast --exclude forge --exclude native-api | |
| - run: cargo test --profile ci --lib -p forge | |
| test-cheatnet-native: | |
| name: Cheatnet Tests (native) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| cache-key: 'native' | |
| - run: cargo test --profile ci -p cheatnet --features cairo-native | |
| build-test-forge-nextest-archive: | |
| name: Build Nextest Archive (Forge) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-scarb: 'false' | |
| setup-usc: 'false' | |
| save-cache: 'true' | |
| - name: Install nextest | |
| uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Determine test features | |
| id: test_features | |
| run: | | |
| FEATURES="scarb_since_2_19_0" | |
| 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-forge-${{ runner.os }}.tar.zst' | |
| else | |
| cargo nextest archive --cargo-profile ci -p forge --archive-file 'nextest-archive-forge-${{ runner.os }}.tar.zst' | |
| fi | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: nextest-archive-forge-${{ runner.os }} | |
| path: nextest-archive-forge-${{ runner.os }}.tar.zst | |
| build-test-forge-nextest-archive-native: | |
| name: Build Nextest Archive (Forge Native) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| setup-scarb: 'false' | |
| setup-usc: 'false' | |
| cache-key: 'native' | |
| save-cache: 'true' | |
| - name: Install nextest | |
| uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Determine test features | |
| id: test_features | |
| run: | | |
| FEATURES="cairo-native,scarb_since_2_19_0" | |
| 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-forge-native-${{ runner.os }}.tar.zst' | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: nextest-archive-forge-native-${{ runner.os }} | |
| path: nextest-archive-forge-native-${{ runner.os }}.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@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: nextest-archive-forge-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-forge-${{ 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@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: nextest-archive-forge-native-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-forge-native-${{ runner.os }}.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: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| cairo-profiler --version | |
| - name: Install cairo-coverage | |
| run: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| cairo-coverage --version | |
| - uses: actions/checkout@v7 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: nextest-archive-forge-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-forge-${{ 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: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| cairo-profiler --version | |
| - name: Install cairo-coverage | |
| run: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| cairo-coverage --version | |
| - uses: actions/checkout@v7 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: nextest-archive-forge-native-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-forge-native-${{ runner.os }}.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: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh | |
| cairo-profiler --version | |
| - name: Install cairo-coverage | |
| run: | | |
| set -euo pipefail | |
| curl -sSL --fail --retry 5 --retry-all-errors --connect-timeout 10 -H "Authorization: Bearer ${{ github.token }}" https://raw.githubusercontent.com/software-mansion/cairo-coverage/main/scripts/install.sh | sh | |
| cairo-coverage --version | |
| - uses: actions/checkout@v7 | |
| - 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-special-conditions: | |
| name: Test special conditions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| # Scarb is installed manually below to control the version | |
| with: | |
| setup-scarb: 'false' | |
| - run: cargo test --profile ci --package forge --features no_scarb_installed --lib compatibility_check::tests::failing_tool_not_installed | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: software-mansion/setup-scarb@v1 | |
| with: | |
| scarb-version: "2.13.1" | |
| - run: cargo test --profile ci --package forge --features scarb_2_13_1 --test main e2e::plugin_versions::new_with_minimal_scarb | |
| - run: cargo test --profile ci --package forge --features scarb_2_13_1 --test main e2e::requirements::test_warning_on_scarb_version_below_recommended | |
| test-forge-scarb-plugin: | |
| name: Test Forge Scarb Plugin | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - name: Run Forge Scarb Plugin tests | |
| working-directory: crates/snforge-scarb-plugin | |
| run: cargo test --profile ci | |
| build-test-cast-nextest-archive: | |
| name: Build Nextest Archive (Cast) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| save-cache: 'true' | |
| - name: Install nextest | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Build and archive tests | |
| run: cargo nextest archive --cargo-profile ci -p sncast --archive-file 'nextest-archive-cast-${{ runner.os }}.tar.zst' | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: nextest-archive-cast-${{ runner.os }} | |
| path: nextest-archive-cast-${{ runner.os }}.tar.zst | |
| test-cast: | |
| name: Test Cast | |
| runs-on: ubuntu-latest | |
| needs: [ build-test-cast-nextest-archive ] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| partition: [ 1, 2, 3 ] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| setup-rust-cache: 'false' | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: nextest-archive-cast-${{ runner.os }} | |
| - name: nextest partition ${{ matrix.partition }}/3 | |
| run: cargo nextest run --no-fail-fast --partition 'count:${{ matrix.partition }}/3' --archive-file 'nextest-archive-cast-${{ runner.os }}.tar.zst' | |
| test-ledger: | |
| name: Test Ledger | |
| runs-on: ubuntu-latest | |
| container: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:5.3.16 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Save ledger builder Rust toolchain | |
| run: echo "LEDGER_RUST_TOOLCHAIN=${RUSTUP_TOOLCHAIN}" >> $GITHUB_ENV | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - name: Clone app-starknet | |
| run: git clone --depth 1 --branch nanox_2.7.0_2.4.0_sdk_v26.0.2 https://github.com/LedgerHQ/app-starknet.git /tmp/app-starknet | |
| - name: Build Starknet Ledger App (Nano X) | |
| run: | | |
| cd /tmp/app-starknet/starknet | |
| # Build before setup-tools so the image toolchain is still active. | |
| cargo +${LEDGER_RUST_TOOLCHAIN} ledger build nanox | |
| mkdir -p ${GITHUB_WORKSPACE}/crates/sncast/tests/data/ledger-app | |
| cp target/nanox/release/starknet \ | |
| ${GITHUB_WORKSPACE}/crates/sncast/tests/data/ledger-app/nanox.elf | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| cache-key: 'cast-ledger' | |
| save-cache: 'true' | |
| # Ledger image sets RUSTUP_TOOLCHAIN to its nightly; workspace uses stable from setup-tools. | |
| - name: Set workspace Rust toolchain | |
| run: echo "RUSTUP_TOOLCHAIN=stable" >> $GITHUB_ENV | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest@0.9.98 | |
| - name: Run tests (nextest) | |
| run: cargo nextest run --no-fail-fast --cargo-profile ci -p sncast --features ledger-emulator ledger --run-ignored all | |
| 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@v7 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| setup-usc: 'false' | |
| cache-key: 'lint' | |
| save-cache: 'true' | |
| - 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 clippy --all-targets --all-features --no-deps | |
| - name: Lint snforge-scarb-plugin | |
| run: cargo clippy --all-targets --all-features --no-deps | |
| 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.48.0 | |
| build-docs: | |
| name: Test Building Docs | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-tools | |
| - uses: taiki-e/install-action@055f5df8c3f65ea01cd41e9dc855becd88953486 # 2.75.18 | |
| with: | |
| # TODO(#3970): Upgrade mdbook-variables after resolving issue | |
| tool: mdbook@0.4.52,mdbook-variables@0.3.0,mdbook-linkcheck | |
| - name: Build with mdBook | |
| uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0 | |
| with: | |
| timeout_minutes: 10 | |
| max_attempts: 3 | |
| retry_on: error | |
| command: | | |
| # TODO(#2781): Use `mdbook build` | |
| ./scripts/build_docs.sh | |
| cargo build --profile ci -p forge --locked | |
| cp target/ci/snforge ~/.cargo/bin/ | |
| ./scripts/verify_cairo_listings.sh |