diff --git a/.github/workflows/cont_integration.yml b/.github/workflows/cont_integration.yml index 3088cd6e..af7e256f 100644 --- a/.github/workflows/cont_integration.yml +++ b/.github/workflows/cont_integration.yml @@ -172,3 +172,32 @@ jobs: run: rustup update - name: Check fmt run: cargo fmt --all -- --config format_code_in_doc_comments=true --check + + test_harware_wallet: + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - version: 1.60.0 # STABLE + - version: 1.56.1 # MSRV + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build simulator image + run: docker build -t hwi/ledger_emulator ./ci -f ci/Dockerfile.ledger + - name: Run simulator image + run: docker run --name simulator --network=host hwi/ledger_emulator & + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + - name: Install python dependencies + run: pip install hwi==2.1.1 protobuf==3.20.1 + - name: Set default toolchain + run: rustup default ${{ matrix.rust.version }} + - name: Set profile + run: rustup set profile minimal + - name: Update toolchain + run: rustup update + - name: Test + run: cargo test --features test-hardware-signer diff --git a/ci/Dockerfile.ledger b/ci/Dockerfile.ledger new file mode 100644 index 00000000..5fe2dd88 --- /dev/null +++ b/ci/Dockerfile.ledger @@ -0,0 +1,9 @@ +# Taken from bitcoindevkit/rust-hwi +FROM ghcr.io/ledgerhq/speculos + +RUN apt-get update +RUN apt-get install wget -y +RUN wget "https://github.com/LedgerHQ/speculos/blob/master/apps/nanos%23btc%232.1%231c8db8da.elf?raw=true" -O /speculos/btc.elf +ADD automation.json /speculos/automation.json + +ENTRYPOINT ["python", "./speculos.py", "--automation", "file:automation.json", "--display", "headless", "--vnc-port", "41000", "btc.elf"] diff --git a/ci/automation.json b/ci/automation.json new file mode 100644 index 00000000..9de2f60e --- /dev/null +++ b/ci/automation.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "rules": [ + { + "regexp": "Address \\(\\d/\\d\\)|Message hash \\(\\d/\\d\\)|Confirm|Fees|Review|Amount", + "actions": [ + [ "button", 2, true ], + [ "button", 2, false ] + ] + }, + { + "text": "Sign", + "conditions": [ + [ "seen", false ] + ], + "actions": [ + [ "button", 2, true ], + [ "button", 2, false ], + [ "setbool", "seen", true ] + ] + }, + { + "regexp": "Approve|Sign|Accept", + "actions": [ + [ "button", 3, true ], + [ "button", 3, false ] + ] + } + ] +}