Support proc macro crate fingerprint in PMS #13353
Workflow file for this run
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: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| types: [opened, labeled, synchronize, reopened] | |
| merge_group: | |
| concurrency: | |
| group: ${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: ${{ github.head_ref != 'main' }} | |
| env: | |
| # TODO(#1915): Use stable toolchain once stwo is stable. | |
| RUST_NIGHTLY_TOOLCHAIN: "nightly-2025-02-13" | |
| jobs: | |
| setup-matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| matrix: ${{ steps.set-matrix.outputs.matrix }} | |
| steps: | |
| - id: set-matrix | |
| shell: python | |
| run: | | |
| import json | |
| import os | |
| event_name = "${{ github.event_name }}" | |
| ref = "${{ github.ref }}" | |
| is_labeled = "${{ contains(github.event.pull_request.labels.*.name, 'test-windows') }}" | |
| is_labeled = is_labeled == 'true' | |
| print('is_labeled', is_labeled) | |
| # Build matrix with platforms | |
| matrix = {"platform": []} | |
| # Always include Linux | |
| matrix["platform"].append({ | |
| "name": "linux x86-64", | |
| "os": "ubuntu-latest" | |
| }) | |
| is_pushed_to_main = event_name == "push" and ref == "refs/heads/main" | |
| print('is_pushed_to_main', is_pushed_to_main) | |
| # Include Windows only for pushes to main branch or explicitly labeled PRs | |
| if is_pushed_to_main or is_labeled: | |
| matrix["platform"].append({ | |
| "name": "windows x86-64", | |
| "os": "windows-latest" | |
| }) | |
| # Output the matrix as JSON | |
| with open(os.environ["GITHUB_OUTPUT"], "a") as f: | |
| f.write(f"matrix={json.dumps(matrix)}\n") | |
| build-test: | |
| name: build test ${{ matrix.platform.name }} | |
| runs-on: ${{ matrix.platform.os }} | |
| needs: setup-matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.setup-matrix.outputs.matrix) }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: [email protected] | |
| - name: nextest archive | |
| run: cargo nextest archive --workspace --all-features --cargo-profile ci --archive-file 'nextest-archive-${{ matrix.platform.os }}.tar.zst' --exclude scarb-prove --exclude scarb-verify --exclude cairo-lang-macro | |
| - uses: actions/upload-artifact@v5 | |
| with: | |
| name: nextest-archive-${{ matrix.platform.os }} | |
| path: nextest-archive-${{ matrix.platform.os }}.tar.zst | |
| test: | |
| name: test ${{ matrix.platform.name }} ${{ matrix.partition }}/4 | |
| runs-on: ${{ matrix.platform.os }} | |
| needs: | |
| - setup-matrix | |
| - build-test | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: ${{ fromJSON(needs.setup-matrix.outputs.matrix).platform }} | |
| partition: [ 1, 2, 3, 4 ] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: [email protected] | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ matrix.platform.os }} | |
| - name: nextest partition ${{ matrix.partition }}/4 | |
| run: cargo nextest run --partition 'count:${{ matrix.partition }}/4' --archive-file 'nextest-archive-${{ matrix.platform.os }}.tar.zst' | |
| test-doc: | |
| name: doc tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: run tests | |
| run: cargo test --doc | |
| scarb-metadata-compatibility: | |
| name: scarb-metadata compatibility check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: software-mansion/setup-scarb@v1 | |
| with: | |
| cache: false | |
| scarb-version: "2.3.0" | |
| - run: echo "SCARB_TEST_BIN=$(which scarb)" >> $GITHUB_ENV | |
| - name: run tests | |
| run: cargo test -p scarb-metadata | |
| build-nightly-test: | |
| name: build nightly test ${{ matrix.platform.name }} | |
| runs-on: ${{ matrix.platform.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: | |
| # TODO: Enable tests on windows when stwo supports it. | |
| - name: linux x86-64 | |
| os: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ env.RUST_NIGHTLY_TOOLCHAIN }} | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: [email protected] | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: nextest archive | |
| run: cargo nextest archive --all-features --cargo-profile ci --archive-file 'nextest-nightly-archive-${{ matrix.platform.os }}.tar.zst' --package scarb-prove --package scarb-verify | |
| - uses: actions/upload-artifact@v5 | |
| with: | |
| name: nextest-nightly-archive-${{ matrix.platform.os }} | |
| path: nextest-nightly-archive-${{ matrix.platform.os }}.tar.zst | |
| test-nightly: | |
| name: test nightly ${{ matrix.platform.name }} | |
| runs-on: ${{ matrix.platform.os }} | |
| needs: | |
| - build-test | |
| - build-nightly-test | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: | |
| - name: linux x86-64 | |
| os: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ env.RUST_NIGHTLY_TOOLCHAIN }} | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: [email protected] | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Download stable build artifacts | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-${{ matrix.platform.os }} | |
| - name: Unpack build stable rust artifacts from nextest archive on linux | |
| if: matrix.platform.os == 'ubuntu-latest' | |
| run: | | |
| tar --use-compress-program=unzstd -xvf nextest-archive-ubuntu-latest.tar.zst | |
| mv target stable-crates-target | |
| echo "NEXTEST_BIN_EXE_scarb=$GITHUB_WORKSPACE/stable-crates-target/ci/scarb" >> $GITHUB_ENV | |
| echo "$GITHUB_WORKSPACE/stable-crates-target/ci" >> $GITHUB_PATH | |
| echo "$GITHUB_WORKSPACE/target/ci" >> $GITHUB_PATH | |
| - name: Download nightly build artifacts | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-nightly-archive-${{ matrix.platform.os }} | |
| - name: nextest partition | |
| run: cargo nextest run --archive-file 'nextest-nightly-archive-${{ matrix.platform.os }}.tar.zst' --extract-to ./ | |
| test-cairo-lang-macro: | |
| name: test cairo-lang-macro ${{ matrix.platform.name }} | |
| runs-on: ${{ matrix.platform.os }} | |
| needs: setup-matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.setup-matrix.outputs.matrix) }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Run tests | |
| # Note tests depending on trybuild crate cannot be run with nextest, | |
| # as they require access to cargo build cache of the package, | |
| # which is not archived with nextest-archive. | |
| run: cargo test -p cairo-lang-macro --all-features | |
| check-rust: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo fmt --check | |
| # TODO(#1915): Build all crates with stable toolchain once stwo is stable. | |
| - run: cargo clippy --all-targets --all-features --workspace --exclude scarb-prove --exclude scarb-verify -- --no-deps | |
| env: | |
| # Make sure CI fails on all warnings, including Clippy lints. | |
| RUSTFLAGS: "-Dwarnings" | |
| - run: cargo doc --all-features --no-deps --workspace --exclude scarb-prove --exclude scarb-verify | |
| env: | |
| # Make sure CI fails on all warnings, including Clippy lints. | |
| RUSTDOCFLAGS: "-Dwarnings" | |
| detect-unused-dependencies: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Machete | |
| uses: bnjbvr/[email protected] | |
| check-rust-nightly: | |
| name: check-rust (nightly) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ env.RUST_NIGHTLY_TOOLCHAIN }} | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo +${{ env.RUST_NIGHTLY_TOOLCHAIN }} clippy --all-targets --all-features -p scarb-prove -p scarb-verify -- --no-deps | |
| env: | |
| # Make sure CI fails on all warnings, including Clippy lints. | |
| RUSTFLAGS: "-Dwarnings" | |
| - run: cargo +${{ env.RUST_NIGHTLY_TOOLCHAIN }} doc --all-features --no-deps -p scarb-prove -p scarb-verify | |
| env: | |
| # Make sure CI fails on all warnings, including Clippy lints. | |
| RUSTDOCFLAGS: "-Dwarnings" | |
| check-website: | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: ./website | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: '18.x' | |
| cache: npm | |
| cache-dependency-path: website/package-lock.json | |
| - run: npm ci | |
| - run: npm run fmt:check | |
| - run: npm run build | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.SCARB_GITHUB_PUBLIC_API_TOKEN }} | |
| snforge-init: | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-test | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: [email protected] | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: nextest-archive-ubuntu-latest | |
| - uses: foundry-rs/setup-snfoundry@v4 | |
| - run: cargo nextest run --archive-file 'nextest-archive-ubuntu-latest.tar.zst' --run-ignored=all --filterset 'test(new_simple)' |