Implement a reversed data transformer for events #20971
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/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 | |
| build-test-forge-nextest-archive: | |
| name: Build Nextest Archive (Forge) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - 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: Build and archive tests | |
| run: cargo nextest archive --cargo-profile ci -p forge --archive-file 'nextest-archive-forge-${{ runner.os }}.tar.zst' | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v5 | |
| 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@v6 | |
| - 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: Build and archive tests | |
| run: cargo nextest archive --cargo-profile ci -p forge --features cairo-native --archive-file 'nextest-archive-forge-native-${{ runner.os }}.tar.zst' | |
| - name: Upload archive to workflow | |
| uses: actions/upload-artifact@v5 | |
| 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@v6 | |
| - 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@v6 | |
| 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@v6 | |
| - 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@v6 | |
| 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@v6 | |
| - 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@v6 | |
| 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@v6 | |
| - 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@v6 | |
| 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@v6 | |
| - 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@v6 | |
| - 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.12.0' | |
| - run: cargo test --profile ci --package forge --features scarb_2_12_0 --test main e2e::plugin_versions::new_with_minimal_scarb | |
| - 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-scarb-plugin: | |
| name: Test Forge Scarb Plugin | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - 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@v6 | |
| - 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@v5 | |
| 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@v6 | |
| - 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@v6 | |
| 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-cast-docs: | |
| name: Test Cast / Doctests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 | |
| - uses: ./.github/actions/setup-tools | |
| - name: Run doctests | |
| run: cargo test --profile ci -p sncast --doc | |
| 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 | |
| with: | |
| cache-key: 'cast-ledger' | |
| save-cache: 'true' | |
| - 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@v6 | |
| - uses: ./.github/actions/setup-tools | |
| with: | |
| install-llvm: 'true' | |
| setup-usc: 'false' | |
| cache-key: 'lint' | |
| save-cache: 'true' | |
| - 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 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - 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 | |
| run: | | |
| # TODO(#2781): Use `mdbook build` | |
| ./scripts/build_docs.sh | |
| - name: Install Forge | |
| run: | | |
| cargo build --profile ci -p forge --locked | |
| cp target/ci/snforge ~/.cargo/bin/ | |
| - name: Verify Cairo listings | |
| run: | | |
| ./scripts/verify_cairo_listings.sh |