Skip to content

[KGA-19] dev: use Cairo1Helpers class for 'call_contract' for future-proofness #499

[KGA-19] dev: use Cairo1Helpers class for 'call_contract' for future-proofness

[KGA-19] dev: use Cairo1Helpers class for 'call_contract' for future-proofness #499

Workflow file for this run

name: cairo-zero-CI
on:
push:
branches:
- main
pull_request:
branches:
- "*"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
concurrency:
group: cairo-zero-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: read-all
jobs:
paths-filter:
runs-on: ubuntu-latest
outputs:
src: ${{ steps.filter.outputs.src }}
kakarot_scripts: ${{ steps.filter.outputs.kakarot_scripts }}
solidity: ${{ steps.filter.outputs.solidity }}
tests: ${{ steps.filter.outputs.tests }}
makefile: ${{ steps.filter.outputs.makefile }}
rust: ${{ steps.filter.outputs.rust }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
src:
- 'cairo_zero/**'
kakarot_scripts:
- 'kakarot_scripts/**'
solidity:
- 'solidity_contracts/**'
tests:
- 'tests/**'
makefile:
- 'Makefile'
rust:
- 'rust-toolchain'
build:
runs-on: ubuntu-latest
needs: paths-filter
if:
needs.paths-filter.outputs.src == 'true' ||
needs.paths-filter.outputs.kakarot_scripts == 'true' ||
needs.paths-filter.outputs.makefile == 'true' ||
needs.paths-filter.outputs.rust == 'true'
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: uv.lock
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- uses: asdf-vm/actions/install@v3
- run: asdf install
- name: Compile all the cairo files
run: |
cp .env.example .env
make build
- name: Uploads Kakarot build artifacts
uses: actions/upload-artifact@v4
with:
name: kakarot-build
path: ./build
tests-unit:
runs-on: ubuntu-latest-16-cores
env:
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
needs: paths-filter
if:
needs.paths-filter.outputs.src == 'true' ||
needs.paths-filter.outputs.tests == 'true'
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: uv.lock
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Run tests
env:
HYPOTHESIS_PROFILE: ci
run: |
cp .env.example .env
make test-unit-cairo-zero
- name: Upload coverage report to codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./coverage/
tests-end-to-end:
runs-on: ubuntu-latest
env:
STARKNET_NETWORK: katana
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
needs: paths-filter
if:
needs.paths-filter.outputs.src == 'true' ||
needs.paths-filter.outputs.kakarot_scripts == 'true' ||
needs.paths-filter.outputs.solidity == 'true' ||
needs.paths-filter.outputs.tests == 'true' ||
needs.paths-filter.outputs.makefile == 'true' ||
needs.paths-filter.outputs.rust == 'true'
steps:
- uses: actions/checkout@v4
- name: Extract Katana Version
id: extract_katana_version
run: |
KATANA_VERSION=$(grep -E "^KATANA_VERSION\s*=" kakarot_scripts/setup/setup.py | cut -d'"' -f2)
echo "katana_version=$KATANA_VERSION" >> "$GITHUB_OUTPUT"
- uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: uv.lock
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- uses: asdf-vm/actions/install@v3
- name: Load cached katana
id: cached-katana
uses: actions/cache@v4
with:
path: ~/.cargo/bin
key: katana-${{ steps.extract_katana_version.outputs.katana_version }}
- name: Install Katana
if: steps.cached-katana.outputs.cache-hit != 'true'
run: make setup "katana"
- name: Run tests
run: |
cp .env.example .env
make run-nodes & make test-end-to-end
forge-test:
runs-on: ubuntu-latest
needs: paths-filter
if: needs.paths-filter.outputs.solidity == 'true'
steps:
- uses: actions/checkout@v4
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Install deps
run: forge install
- name: Run tests
run: forge test -vvv
ef-tests:
runs-on: ubuntu-latest-32-cores
needs:
- build
- paths-filter
if: needs.paths-filter.outputs.src == 'true'
steps:
- name: Checkout ef-tests
uses: actions/checkout@v4
with:
repository: kkrt-labs/ef-tests
ref: feat/update-base-fee-state
- name: Checkout local skip file
uses: actions/checkout@v4
with:
sparse-checkout: |
blockchain-tests-skip.yml
sparse-checkout-cone-mode: false
path: skip-file
- name: Replace the skip files
run: |
mv skip-file/blockchain-tests-skip.yml blockchain-tests-skip.yml
- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
cache-on-failure: "true"
- name: setup
run: mkdir -p build/common && make setup setup-kakarot-v1
- uses: taiki-e/install-action@nextest
- name: Download Kakarot build artifacts in v0
uses: actions/download-artifact@v4
with:
name: kakarot-build
path: ./build/v0
- name: Move ERC20
run: mv build/v0/ERC20.json build/common
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.10.14
- name: run tests
run: |
set -o pipefail
make ef-test-v0 | tee test_v0.out
set +o pipefail
- name: Retrieve ef-tests execution resources
run: python scripts/compute_resources.py
env:
KAKAROT_VERSION: v0
- name: upload resources
uses: actions/upload-artifact@v4
with:
path: resources
name: resources
resources:
runs-on: ubuntu-latest
needs:
- ef-tests
- paths-filter
if: needs.paths-filter.outputs.src == 'true'
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v2
with:
enable-cache: true
cache-dependency-glob: uv.lock
- uses: actions/setup-python@v5
with:
python-version-file: .python-version
- name: Load performance artifacts
uses: actions/download-artifact@v4
with:
path: resources
name: resources
- name: Check resources evolution
run: |
result=$(GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} make check-resources 2>&1)
echo "$result" >> "$GITHUB_STEP_SUMMARY"