Skip to content

[test] turn app into navigator #1233

[test] turn app into navigator

[test] turn app into navigator #1233

Workflow file for this run

name: Build & test apps
# This workflow will build the app and then run functional tests using the Ragger framework upon Speculos emulation.
# It then calls another reusable workflow to run the Ragger tests on the compiled application binary.
#
# While this workflow is optional, having functional testing on your application is mandatory and this workflow and
# tooling environment is meant to be easy to use and adapt after forking your application
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
jobs:
build_app:
name: Build application
strategy:
matrix:
device: [nanos, nanosp, nanox, stax, flex]
runs-on: ubuntu-latest
container:
image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Build
run: |
DEVICE_SDK="$(echo ${{ matrix.device }} | tr a-z A-Z)_SDK"
bash -c "make -C app BOLOS_SDK=\$${DEVICE_SDK}"
tar -C app/bin -czf app_${{ matrix.device }}.tgz .
bash -c "make -C app BOLOS_SDK=\$${DEVICE_SDK} DEBUG=1"
tar -C app/bin -czf app_${{ matrix.device }}_dbg.tgz .
- name: Upload
uses: actions/upload-artifact@v4
with:
path: app_${{ matrix.device }}.tgz
name: app_${{ matrix.device }}.tgz
- name: Upload (dbg)
uses: actions/upload-artifact@v4
with:
path: app_${{ matrix.device }}_dbg.tgz
name: app_${{ matrix.device }}_dbg.tgz
build_docker_tezos_ocaml:
if: github.repository == 'trilitech/ledger-app-tezos-wallet'
uses: ./.github/workflows/docker.yml
secrets: inherit
with:
dockerfile: docker/Dockerfile.ocaml
image_name: tezos_ocaml
integration_tests_basic:
needs: [build_app]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
device: [nanos, nanosp, nanox, stax, flex]
container:
image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest
steps:
- name: Set Git Safe Directory
run: |
git config --global safe.directory "$GITHUB_WORKSPACE"
- name: Checkout
uses: actions/checkout@v3
- name: Download app
uses: actions/download-artifact@v4
with:
name: app_${{ matrix.device }}.tgz
- name: Download app (dbg)
uses: actions/download-artifact@v4
with:
name: app_${{ matrix.device }}_dbg.tgz
- name: Run test
run: |
if [ "${{ matrix.device }}" = "stax" ] || [ "${{ matrix.device }}" = "flex" ]; then
./tests/integration/run_test_local.sh -F -m ${{ matrix.device }} \
./tests/integration/touch
else
apk add gmp-dev curl jq libsodium-dev git xxd procps
python3 -m venv tezos_test_env --system-site-package
source ./tezos_test_env/bin/activate
python3 -m pip install --upgrade pip -q
python3 -m pip install -r ./tests/requirements.txt -q
TMP_DIR=$(mktemp -d /tmp/foo-XXXXXX)
tar xfz app_${{ matrix.device }}_dbg.tgz -C $TMP_DIR
python3 -m pytest -n 32 tests/integration/nano/ --tb=no \
--device ${{ matrix.device }} --app $TMP_DIR/app.elf \
--log-dir integration_tests_log
fi
- name: Upload Stax results
uses: actions/upload-artifact@v4
if: always() && (matrix.device == 'stax' || matrix.device == 'flex')
with:
name: integration_tests_${{ matrix.device }}.json
path: ./integration_tests.json
- name: Upload Nano results
uses: actions/upload-artifact@v4
if: always() && (matrix.device != 'stax' && matrix.device != 'flex')
with:
name: integration_tests_log_${{ matrix.device }}
path: ./integration_tests_log
generate_samples_unit_tests:
needs: [build_docker_tezos_ocaml]
runs-on: ubuntu-latest
container:
image: ${{ needs.build_docker_tezos_ocaml.outputs.image }}
credentials:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
options: -u root --entrypoint /bin/bash
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create dirs
run: |
mkdir -p tests/samples/micheline/nano
mkdir -p tests/samples/operations/nano
- name: Generate
run: |
export PATH=/home/opam/.opam/4.14/bin:$PATH
cp ./app/src/parser/[!g]*.[ch] ./tests/unit/parser
dune exec ./tests/generate/generate.exe micheline 50 \
nano tests/samples/micheline
dune exec ./tests/generate/generate.exe operations 50 \
nano tests/samples/operations
- name: Unit tests
run: |
export PATH=/home/opam/.opam/4.14/bin:$PATH
make -C tests/unit
- name: Upload results (nano, micheline)
uses: actions/upload-artifact@v4
with:
name: nano_samples_micheline
path: tests/samples/micheline/nano
- name: Upload results (nano, operations)
uses: actions/upload-artifact@v4
with:
name: nano_samples_operations
path: tests/samples/operations/nano
integration_tests_samples:
needs: [build_app, generate_samples_unit_tests]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
device: [nanos, nanosp, nanox]
type: [micheline, operations]
container:
image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download app
uses: actions/download-artifact@v4
with:
name: app_${{ matrix.device }}.tgz
- name: Download app (dbg)
uses: actions/download-artifact@v4
with:
name: app_${{ matrix.device }}_dbg.tgz
- name: Download samples
uses: actions/download-artifact@v4
with:
name: nano_samples_${{ matrix.type }}
path: tests
- name: Test
run: |
apk add gmp-dev curl jq libsodium-dev git xxd procps
python3 -m venv tezos_test_env --system-site-package
source ./tezos_test_env/bin/activate
python3 -m pip install --upgrade pip -q
python3 -m pip install -r ./tests/requirements.txt -q
./tests/integration/run_test_local.sh -T100 -F -m ${{ matrix.device }} tests
- name: Upload results
uses: actions/upload-artifact@v4
if: always()
with:
name: integration_tests_${{ matrix.type}}_${{ matrix.device }}.json
path: ./integration_tests.json