Skip to content

Make dependencies for Ledger support optional #5485

Make dependencies for Ledger support optional

Make dependencies for Ledger support optional #5485

Workflow file for this run

name: Checks
env:
CAIRO_LANG_VERSION: "0.13.1"
DEVNET_VERSION: "0.1.2"
DEVNET_SHA: 7e7dbb5
LEDGER_APP_SHA: dd58c5c
on:
push:
branches:
- master
- development
pull_request:
workflow_dispatch:
jobs:
# ---------------------------------------------------------- #
# ...................LINT-FORMAT-TYPECHECK.................. #
# ---------------------------------------------------------- #
lint-format-typecheck:
name: Lint - Format - Typecheck
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.12" ]
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies (+ledger)
run: poetry install -E ledger
# ====================== LINT, FORMAT, TYPECHECK ====================== #
- name: Check poetry.lock
run: |
poetry lock --check
- name: Lint
run: |
poetry run poe lint
- name: Format
run: |
poetry run poe format_check
- name: Typecheck
run: |
poetry run poe typecheck
# ---------------------------------------------------------- #
# .......................SETUP-TESTS........................ #
# ---------------------------------------------------------- #
setup-tests:
name: Setup Tests
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.12" ]
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- uses: asdf-vm/actions/setup@v3
# ====================== SETUP PYTHON ====================== #
- name: Install poetry
run: |
python -m pip install --upgrade pip
pip install poetry
poetry config installer.modern-installation false
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies
run: poetry install
# ====================== CONTRACTS v2 ====================== #
- name: Cache contracts v2
id: cache-contracts_v2
uses: actions/cache@v4
with:
path: starknet_py/tests/e2e/mock/contracts_v2/target
key: ${{ runner.os }}-contracts-${{ hashFiles('starknet_py/tests/e2e/mock/contracts_v2') }}
- name: Compile contracts v2
if: steps.cache-contracts_v2.outputs.cache-hit != 'true'
run: |
poetry run poe compile_contracts v2
# ====================== CONTRACTS v1 ====================== #
- name: Cache contracts v1
id: cache-contracts_v1
uses: actions/cache@v4
with:
path: starknet_py/tests/e2e/mock/contracts_v1/target
key: ${{ runner.os }}-contracts-${{ hashFiles('starknet_py/tests/e2e/mock/contracts_v1') }}
- name: Compile contracts v1
if: steps.cache-contracts_v1.outputs.cache-hit != 'true'
run: |
poetry run poe compile_contracts v1
- name: Upload contracts artifacts
uses: actions/upload-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ---------------------------------------------------------- #
# ........................RUN-TESTS......................... #
# ---------------------------------------------------------- #
run-tests:
name: Tests
needs: setup-tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.8", "3.12" ]
env:
LEDGER_PROXY_ADDRESS: 127.0.0.1
LEDGER_PROXY_PORT: 9999
SEPOLIA_RPC_URL: ${{ secrets.SEPOLIA_RPC_URL }}
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- name: Download contracts
uses: actions/download-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies (+ledger)
run: poetry install -E ledger
# ====================== SETUP DEVNET ====================== #
- name: Install devnet
run: ./starknet_py/tests/install_devnet.sh
# ====================== SETUP LEDGER SPECULOS ====================== #
- name: Pull speculos image
run: docker pull ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools
- name: Clone LedgerHQ Starknet app repository
run: git clone https://github.com/LedgerHQ/app-starknet.git
- name: Build the app inside Docker container
uses: addnab/docker-run-action@v3
with:
image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools
options: --rm -v ${{ github.workspace }}:/apps
run: |
cd /apps/app-starknet
git checkout ${{ env.LEDGER_APP_SHA }}
cargo clean
cargo ledger build nanox
- name: Start Speculos emulator container
uses: addnab/docker-run-action@v3
with:
image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools
options: --rm -d --name speculos-emulator -v ${{ github.workspace }}:/apps --publish 5000:5000 --publish 9999:9999
run: |
speculos \
-m nanox \
--apdu-port 9999 \
--api-port 5000 \
--display headless \
/apps/app-starknet/target/nanox/release/starknet
- name: Wait for Speculos to start
run: sleep 5
- name: Update automation rules
working-directory: starknet_py/tests/unit/signer
run: |
curl -X POST http://127.0.0.1:5000/automation \
-H "Content-Type: application/json" \
-d @speculos_automation.json
# ====================== RUN TESTS ====================== #
- name: Check circular imports
run: |
poetry run poe circular_imports_check
- name: Run tests
run: |
poetry run poe test_ci_v2
poetry run poe test_ci_v1
- name: Generate coverage in XML
run: |
poetry run coverage xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
# ---------------------------------------------------------- #
# ..................RUN-TESTS-ON-NETWORKS................... #
# ---------------------------------------------------------- #
run-tests-on-networks:
name: Tests on networks (testnet)
needs: setup-tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.12" ]
env:
SEPOLIA_RPC_URL: ${{ secrets.SEPOLIA_RPC_URL }}
SEPOLIA_ACCOUNT_ADDRESS: ${{ secrets.SEPOLIA_ACCOUNT_ADDRESS }}
SEPOLIA_ACCOUNT_PRIVATE_KEY: ${{ secrets.SEPOLIA_ACCOUNT_PRIVATE_KEY }}
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- name: Download contracts
uses: actions/download-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies (+ledger)
run: poetry install -E ledger
# ====================== SETUP DEVNET ====================== #
- name: Install devnet
run: ./starknet_py/tests/install_devnet.sh
# ====================== RUN TESTS ====================== #
- name: Check circular imports
run: |
poetry run poe circular_imports_check
- name: Run tests
run: |
poetry run poe test_ci_on_networks
- name: Generate coverage in XML
run: |
poetry run coverage xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
# ---------------------------------------------------------- #
# ....................RUN-TESTS-WINDOWS..................... #
# ---------------------------------------------------------- #
run-tests-windows:
if: ${{ github.event_name != 'pull_request' }}
name: Tests Windows
needs: setup-tests
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.8", "3.12" ]
env:
SEPOLIA_RPC_URL: ${{ secrets.SEPOLIA_RPC_URL }}
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@dc6353516c68da0f06325f42ad880f76a5e77ec9
with:
toolchain: 1.79.0 # Doesn't work with "stable"
- name: Download contracts
uses: actions/download-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ====================== SETUP DEVNET ====================== #
- name: Cache devnet build
id: windows-devnet-cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}\starknet_py\tests\e2e\devnet\bin
key: ${{ runner.os }}-devnet-${{ env.DEVNET_SHA }}
- name: Install devnet
if: steps.windows-devnet-cache.outputs.cache-hit != 'true'
run: |
$DEVNET_INSTALL_DIR = "${{ github.workspace }}\starknet_py\tests\e2e\devnet"
cargo install --git https://github.com/0xSpaceShard/starknet-devnet-rs.git --locked --rev ${{ env.DEVNET_SHA }} --root $DEVNET_INSTALL_DIR
shell: pwsh
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies (+ledger)
run: poetry install -E ledger
# ====================== RUN TESTS ====================== #
- name: Check circular imports
run: |
poetry run poe circular_imports_check
- name: Run tests
run: |
poetry run poe test_ci_v2
poetry run poe test_ci_v1
- name: Generate coverage in XML
run: |
poetry run coverage xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
# ---------------------------------------------------------- #
# .....................RUN-DOCS-TESTS....................... #
# ---------------------------------------------------------- #
run-docs-tests:
name: Docs Tests
needs: setup-tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.8", "3.12" ]
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- name: Download contracts
uses: actions/download-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies
run: poetry install
# ====================== SETUP DEVNET ====================== #
- name: Install devnet
run: ./starknet_py/tests/install_devnet.sh
# ====================== RUN DOC TESTS ====================== #
- name: Run doc tests
run: |
poetry run poe test_ci_docs_v2
poetry run poe test_ci_docs_v1
- name: Generate coverage in XML
run: |
poetry run coverage xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
# ---------------------------------------------------------- #
# .................RUN-DOCS-TESTS-WINDOWS................... #
# ---------------------------------------------------------- #
run-docs-tests-windows:
if: ${{ github.event_name != 'pull_request' }}
name: Docs Tests Windows
needs: setup-tests
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.8", "3.12" ]
steps:
# ====================== SETUP ====================== #
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@dc6353516c68da0f06325f42ad880f76a5e77ec9
with:
toolchain: 1.79.0 # Doesn't work with "stable"
- name: Download contracts
uses: actions/download-artifact@v3
with:
name: contract-artifacts
path: starknet_py/tests/e2e/mock/
# ====================== SETUP PYTHON ====================== #
- name: Install Poetry
run: pipx install poetry
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies
run: poetry install
# ====================== SETUP DEVNET ====================== #
- name: Cache devnet build
id: windows-devnet-cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}\starknet_py\tests\e2e\devnet\bin
key: ${{ runner.os }}-devnet-${{ env.DEVNET_SHA }}
- name: Install devnet
if: steps.windows-devnet-cache.outputs.cache-hit != 'true'
run: |
$DEVNET_INSTALL_DIR = "${{ github.workspace }}\starknet_py\tests\e2e\devnet"
cargo install --git https://github.com/0xSpaceShard/starknet-devnet-rs.git --locked --rev ${{ env.DEVNET_SHA }} --root $DEVNET_INSTALL_DIR
shell: pwsh
# ====================== RUN DOC TESTS ====================== #
- name: Run doc tests
run: |
poetry run poe test_ci_docs_v2
poetry run poe test_ci_docs_v1
- name: Generate coverage in XML
run: |
poetry run coverage xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3