Skip to content

Implement a reversed data transformer for events #20971

Implement a reversed data transformer for events

Implement a reversed data transformer for events #20971

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/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