Split CI by device group #195
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: | ||
| # See: https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request. | ||
| pull_request: | ||
| # See: https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#push. | ||
| push: | ||
| branches: | ||
| - '**' | ||
| tags-ignore: | ||
| - '**' | ||
| concurrency: | ||
| group: ${{ github.event_name != 'pull_request' && github.run_id || github.ref }} | ||
| cancel-in-progress: true | ||
| env: | ||
| LC_ALL: 'C.UTF-8' | ||
| LANG: 'C.UTF-8' | ||
| LANGUAGE: 'C.UTF-8' | ||
| jobs: | ||
| type-check: | ||
| name: Type check | ||
| runs-on: ubuntu-latest | ||
| container: python:latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - run: | | ||
| pip install poetry | ||
| poetry install | ||
| - name: Run check | ||
| run: > | ||
| poetry run | ||
| mypy | ||
| hwi.py | ||
| hwilib/_base58.py | ||
| hwilib/_bech32.py | ||
| hwilib/_cli.py | ||
| hwilib/commands.py | ||
| hwilib/common.py | ||
| hwilib/descriptor.py | ||
| hwilib/devices/bitbox02.py | ||
| hwilib/devices/coldcard.py | ||
| hwilib/devices/digitalbitbox.py | ||
| hwilib/devices/jade.py | ||
| hwilib/devices/__init__.py | ||
| hwilib/devices/keepkey.py | ||
| hwilib/devices/ledger.py | ||
| hwilib/devices/trezor.py | ||
| hwilib/errors.py | ||
| hwilib/_script.py | ||
| hwilib/_serialize.py | ||
| hwilib/tx.py | ||
| hwilib/hwwclient.py | ||
| hwilib/__init__.py | ||
| hwilib/key.py | ||
| hwilib/udevinstaller.py | ||
| non-device-tests: | ||
| name: Non-device tests | ||
| runs-on: ubuntu-latest | ||
| container: python:latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - run: | | ||
| pip install poetry | ||
| poetry install | ||
| - name: Run tests | ||
| run: | | ||
| cd test; poetry run ./run_tests.py; cd .. | ||
| lint: | ||
| name: lint | ||
| runs-on: ubuntu-latest | ||
| container: python:latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - run: | | ||
| pip install poetry | ||
| poetry install | ||
| - run: | | ||
| poetry run flake8 | ||
| wine-builder: | ||
| name: Wine builder | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: docker/build-push-action@v6 | ||
| with: | ||
| context: . | ||
| file: contrib/build-wine.Dockerfile | ||
| tags: build-wine-container | ||
| load: true | ||
| - run: > | ||
| docker run --rm \ | ||
| --volume ${{ github.workspace }}:${{ github.workspace }} \ | ||
| --workdir ${{ github.workspace }} \ | ||
| build-wine-container bash -c " | ||
| git config --global --add safe.directory ${{ github.workspace }} | ||
| contrib/build_wine.sh | ||
| find dist -type f -exec sha256sum {} \; | ||
| " | ||
| dist-builder: | ||
| name: Dist builder | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: docker/build-push-action@v6 | ||
| with: | ||
| context: . | ||
| file: contrib/build.Dockerfile | ||
| tags: build-container | ||
| load: true | ||
| - run: > | ||
| docker run --rm \ | ||
| --volume ${{ github.workspace }}:${{ github.workspace }} \ | ||
| --workdir ${{ github.workspace }} \ | ||
| build-container bash -c " | ||
| git config --global --add safe.directory ${{ github.workspace }} | ||
| contrib/build_bin.sh | ||
| contrib/build_dist.sh | ||
| find dist -type f -exec sha256sum {} \; | ||
| " | ||
| - uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: dist | ||
| path: dist/ | ||
| sim-builder-trezor: | ||
| name: Trezor sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'trezor-1', archive: 'trezor-firmware', paths: 'test/work/trezor-firmware' } | ||
| - { name: 'trezor-t', archive: 'trezor-firmware', paths: 'test/work/trezor-firmware' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| sim-builder-coldcard: | ||
| name: Coldcard sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'coldcard', archive: 'coldcard-mpy', paths: 'test/work/firmware/external/micropython/ports/unix/coldcard-mpy test/work/firmware/unix/coldcard-mpy test/work/firmware/unix/l-mpy test/work/firmware/unix/l-port' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| sim-builder-bitbox: | ||
| name: Bitbox sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'bitbox01', archive: 'mcu', paths: 'test/work/mcu' } | ||
| - { name: 'bitbox02', archive: 'bitbox02', paths: 'test/work/bitbox02-firmware/build-build/bin/simulator' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| sim-builder-jade: | ||
| name: Jade sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'jade', archive: 'jade', paths: 'test/work/jade/simulator' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| sim-builder-ledger: | ||
| name: Ledger sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'ledger', archive: 'speculos', paths: 'test/work/speculos' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| sim-builder-keepkey: | ||
| name: Keepkey sim builder | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| device: | ||
| - { name: 'keepkey', archive: 'keepkey-firmware', paths: 'test/work/keepkey-firmware/bin' } | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-sim | ||
| ledger-app-builder: | ||
| name: Ledger App builder | ||
| runs-on: ubuntu-latest | ||
| container: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest | ||
| steps: | ||
| - run: | | ||
| git clone https://github.com/LedgerHQ/app-bitcoin-new.git | ||
| cd app-bitcoin-new | ||
| make DEBUG=1 | ||
| - uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: ledger_app | ||
| path: app-bitcoin-new/bin/app.elf | ||
| bitcoind-builder: | ||
| name: bitcoind builder | ||
| # Ubuntu 22.04 ships with glibc 2.35, which is needed to keep binaries | ||
| # compatible with Debian Bookworm (glibc 2.36) Python containers. | ||
| runs-on: ubuntu-22.04 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/build-bitcoind | ||
| test-dist: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.script.name }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ dist-builder, sim-builder, ledger-app-builder, bitcoind-builder ] | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'trezor-1' | ||
| - 'trezor-t' | ||
| - 'coldcard' | ||
| - 'bitbox01' | ||
| - 'jade' | ||
| - 'ledger' | ||
| - 'ledger-legacy' | ||
| - 'keepkey' | ||
| - 'bitbox02' | ||
| script: | ||
| - name: 'Wheel' | ||
| install: 'pip install dist/*.whl' | ||
| test: 'cd test; ./run_tests.py $DEVICE --interface=cli --device-only; cd ..' | ||
| - name: 'Sdist' | ||
| install: 'pip install $(find dist -name "*.tar.gz" -a -not -name "*linux*")' | ||
| test: 'cd test; ./run_tests.py $DEVICE --interface=cli --device-only; cd ..' | ||
| - name: 'Bindist' | ||
| install: 'poetry install; cd dist; tar -xvf hwi*linux*.tar.gz; cd ..' | ||
| test: 'cd test; poetry run ./run_tests.py $DEVICE --interface=bindist --device-only; cd ..' | ||
| env: | ||
| DEVICE: '--${{ matrix.device }}' | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - run: | | ||
| pip install poetry | ||
| - uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dist | ||
| path: dist/ | ||
| - run: | | ||
| ${{ matrix.script.install }} | ||
| - uses: actions/download-artifact@v4 | ||
| with: | ||
| name: bitcoind | ||
| - run: | | ||
| tar -xvf bitcoind.tar.gz | ||
| - uses: ./.github/actions/install-sim | ||
| with: | ||
| device: ${{ matrix.device }} | ||
| - name: Run tests | ||
| run: | | ||
| ${{ matrix.script.test }} | ||
| - if: failure() | ||
| run: | | ||
| tail -v -n +1 test/*.std* | ||
| test-trezor: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-trezor, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'trezor-1' | ||
| - 'trezor-t' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||
| test-ledger: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-ledger, ledger-app-builder, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'ledger' | ||
| - 'ledger-legacy' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||
| test-coldcard: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-coldcard, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'coldcard' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||
| test-bitbox: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-bitbox, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'bitbox01' | ||
| - 'bitbox02' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||
| test-jade: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-jade, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'jade' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||
| test-keepkey: | ||
| name: Python ${{ matrix.python-version }} ${{ matrix.device }} ${{ matrix.interface }} | ||
| runs-on: ubuntu-latest | ||
| needs: [ sim-builder-keepkey, bitcoind-builder ] | ||
| timeout-minutes: 45 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| python-version: [ '3.9', '3.10', '3.11', '3.12' ] | ||
| device: | ||
| - 'keepkey' | ||
| interface: [ 'library', 'cli', 'stdin' ] | ||
| container: python:${{ matrix.python-version }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: ./.github/actions/test-device | ||