ragger 1.40.2__tar.gz → 1.40.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ragger-1.40.2 → ragger-1.40.4}/.github/workflows/build_and_tests.yml +33 -3
- {ragger-1.40.2 → ragger-1.40.4}/.github/workflows/codeql-analysis.yml +4 -7
- {ragger-1.40.2 → ragger-1.40.4}/.github/workflows/fast-checks.yml +1 -1
- {ragger-1.40.2 → ragger-1.40.4}/CHANGELOG.md +12 -0
- {ragger-1.40.2/src/ragger.egg-info → ragger-1.40.4}/PKG-INFO +1 -1
- {ragger-1.40.2 → ragger-1.40.4}/ledger_app.toml +1 -1
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/__version__.py +3 -3
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/navigation_scenario.py +25 -30
- {ragger-1.40.2 → ragger-1.40.4/src/ragger.egg-info}/PKG-INFO +1 -1
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger.egg-info/SOURCES.txt +5 -0
- ragger-1.40.4/tests/snapshots/apex_p/waiting_screen/00000.png +0 -0
- ragger-1.40.4/tests/snapshots/apex_p/waiting_screen/00001.png +0 -0
- ragger-1.40.4/tests/snapshots/apex_p/waiting_screen/00002.png +0 -0
- ragger-1.40.4/tests/snapshots/apex_p/waiting_screen/00003.png +0 -0
- ragger-1.40.4/tests/snapshots/apex_p/waiting_screen/00004.png +0 -0
- ragger-1.40.4/tests/snapshots/flex/waiting_screen/00000.png +0 -0
- ragger-1.40.4/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.4/tests/snapshots/flex/waiting_screen/00002.png +0 -0
- ragger-1.40.4/tests/snapshots/flex/waiting_screen/00003.png +0 -0
- ragger-1.40.4/tests/snapshots/flex/waiting_screen/00004.png +0 -0
- ragger-1.40.4/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/stax/waiting_screen/00002.png +0 -0
- ragger-1.40.4/tests/snapshots/stax/waiting_screen/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_physical_backend.py +1 -1
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/utils/test_misc.py +1 -1
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00000.png +0 -0
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00002.png +0 -0
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00003.png +0 -0
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00004.png +0 -0
- ragger-1.40.2/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- ragger-1.40.2/tests/snapshots/stax/waiting_screen/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/.codeql-config.yaml +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/.gitattributes +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/.github/workflows/documentation.yml +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/.github/workflows/force-rebase.yml +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/.gitignore +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/LICENSE +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/MANIFEST.in +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/README.md +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/Makefile +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/_static/layout.css +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/_templates/layout.html +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/architecture.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/conf.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/faq.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/glossary.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/navigate.draw +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/navigate.svg +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/ragger.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/stax_infos.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/stax_welcome.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/usage.draw +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/images/usage.svg +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/index.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/installation.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/rationale.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/source.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/tutorial.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/tutorial_conftest.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/tutorial_installation.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/doc/tutorial_screen.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/pyproject.toml +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/setup.cfg +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/ledgercomm.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/ledgerwallet.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/physical_backend.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/backend/stub.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/bip/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/bip/path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/bip/seed.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/conftest/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/conftest/base_conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/conftest/configuration.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/error.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/structs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/element.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/layouts.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/positions.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/screen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/firmware/touch/use_cases.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanos_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanos_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanos_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanosp_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanosp_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanosp_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanox_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanox_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/nanox_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/stax_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/swipe_left_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/swipe_right_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/assets/touch_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/gui/process.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/logger.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/instruction.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/nano_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/navigator/touch_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/py.typed +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/utils/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/utils/misc.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/utils/packing.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger/utils/structs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger.egg-info/dependency_links.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger.egg-info/requires.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/src/ragger.egg-info/top_level.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/template/.dispatch_to_your_test_folder +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/template/conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/template/usage.md +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/backend/test_speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/navigator/test_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/functional/test_boilerplate.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/pytest.ini +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/generic/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/generic/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/generic/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/generic/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/generic/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00005.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00006.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare/00007.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare_no_golden/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/stax/waiting_screen/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/stax/waiting_screen/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/stubs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_ledgercomm.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_ledgerwallet.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/backend/test_stub.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/bip/test_path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/bip/test_seed.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/conftests/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/conftests/test_base_conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/firmware/test_structs_Firmware.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/firmware/touch/test_element.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/firmware/touch/test_screen_FullScreen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/firmware/touch/test_screen_MetaScreen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/helpers.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/navigator/test_nano_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/navigator/test_navigation_scenario.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/navigator/test_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/navigator/test_touch_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/test_error_ApplicationError.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/utils/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/utils/test_packing.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/utils/test_path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.4}/tests/unit/utils/test_structs.py +0 -0
|
@@ -36,14 +36,36 @@ jobs:
|
|
|
36
36
|
app_branch_name: nanos_baseline
|
|
37
37
|
upload_app_binaries_artifact: boilerplate_binaries_nanos
|
|
38
38
|
|
|
39
|
+
prepare_matrix:
|
|
40
|
+
name: Prepare matrix from TOML file
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
outputs:
|
|
43
|
+
devices: ${{ steps.get_devices.outputs.devices }}
|
|
44
|
+
env:
|
|
45
|
+
APP_MANIFEST: "ledger_app.toml"
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Clone
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
- name: Install ledgered
|
|
51
|
+
run: pip install ledgered
|
|
52
|
+
- name: Get devices from TOML
|
|
53
|
+
id: get_devices
|
|
54
|
+
run: |
|
|
55
|
+
# get device list as a single line json formatted value
|
|
56
|
+
compatible_devices="$(ledger-manifest --output-devices "${APP_MANIFEST}" -j | jq -rc '.devices')"
|
|
57
|
+
|
|
58
|
+
echo "devices=${compatible_devices}" | sed 's/+/p/' >> "${GITHUB_OUTPUT}"
|
|
59
|
+
|
|
39
60
|
build_install_test:
|
|
40
61
|
name: Install and test the library
|
|
41
|
-
needs: [build_boilerplate_application, build_boilerplate_application_nanos]
|
|
62
|
+
needs: [prepare_matrix, build_boilerplate_application, build_boilerplate_application_nanos]
|
|
42
63
|
runs-on: ubuntu-latest
|
|
43
64
|
strategy:
|
|
44
65
|
fail-fast: false
|
|
45
66
|
matrix:
|
|
46
67
|
python_version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
68
|
+
device: ${{ fromJson(needs.prepare_matrix.outputs.devices) }}
|
|
47
69
|
|
|
48
70
|
steps:
|
|
49
71
|
- name: Clone
|
|
@@ -64,13 +86,20 @@ jobs:
|
|
|
64
86
|
pip install -U .[tests,all_backends]
|
|
65
87
|
pip install -U "click>=8"
|
|
66
88
|
|
|
89
|
+
- name: Install speculos for Nanos
|
|
90
|
+
if: ${{ matrix.device == 'nanos' }}
|
|
91
|
+
run: |
|
|
92
|
+
pip install -U speculos==v0.25.5
|
|
93
|
+
|
|
67
94
|
- name: Download app binaries
|
|
95
|
+
if: ${{ matrix.device != 'nanos' }}
|
|
68
96
|
uses: actions/download-artifact@v4
|
|
69
97
|
with:
|
|
70
98
|
name: boilerplate_binaries
|
|
71
99
|
path: ./build/
|
|
72
100
|
|
|
73
101
|
- name: Download app binaries for Nano S
|
|
102
|
+
if: ${{ matrix.device == 'nanos' }}
|
|
74
103
|
uses: actions/download-artifact@v4
|
|
75
104
|
with:
|
|
76
105
|
name: boilerplate_binaries_nanos
|
|
@@ -83,7 +112,7 @@ jobs:
|
|
|
83
112
|
run: pytest -v --tb=short tests/unit --cov ragger --cov-report xml
|
|
84
113
|
|
|
85
114
|
- name: Run functional tests and generate coverage
|
|
86
|
-
run: pytest -v --tb=short tests/functional --cov ragger --cov-report xml --cov-append --device
|
|
115
|
+
run: pytest -v --tb=short tests/functional --cov ragger --cov-report xml --cov-append --device ${{ matrix.device }}
|
|
87
116
|
|
|
88
117
|
- name: Upload to codecov.io
|
|
89
118
|
uses: codecov/codecov-action@v5
|
|
@@ -91,6 +120,7 @@ jobs:
|
|
|
91
120
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
92
121
|
with:
|
|
93
122
|
name: codecov-ragger
|
|
123
|
+
flags: ${{ matrix.device }}-py${{ matrix.python_version }}
|
|
94
124
|
|
|
95
125
|
package_and_deploy:
|
|
96
126
|
name: Build and deploy the Ragger Python package
|
|
@@ -100,4 +130,4 @@ jobs:
|
|
|
100
130
|
package_name: ragger
|
|
101
131
|
publish: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
102
132
|
secrets:
|
|
103
|
-
pypi_token: ${{ secrets.PYPI_PUBLIC_API_TOKEN
|
|
133
|
+
pypi_token: ${{ secrets.PYPI_PUBLIC_API_TOKEN }}
|
|
@@ -27,16 +27,13 @@ jobs:
|
|
|
27
27
|
contents: read
|
|
28
28
|
security-events: write
|
|
29
29
|
|
|
30
|
-
strategy:
|
|
31
|
-
fail-fast: false
|
|
32
|
-
|
|
33
30
|
steps:
|
|
34
31
|
- name: Checkout repository
|
|
35
32
|
uses: actions/checkout@v4
|
|
36
33
|
|
|
37
34
|
# Initializes the CodeQL tools for scanning.
|
|
38
35
|
- name: Initialize CodeQL
|
|
39
|
-
uses: github/codeql-action/init@
|
|
36
|
+
uses: github/codeql-action/init@v3
|
|
40
37
|
with:
|
|
41
38
|
languages: "python"
|
|
42
39
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -45,10 +42,10 @@ jobs:
|
|
|
45
42
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
46
43
|
queries: +security-and-quality
|
|
47
44
|
|
|
48
|
-
# Autobuild attempts to build any compiled languages
|
|
45
|
+
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
49
46
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
50
47
|
- name: Autobuild
|
|
51
|
-
uses: github/codeql-action/autobuild@
|
|
48
|
+
uses: github/codeql-action/autobuild@v3
|
|
52
49
|
|
|
53
50
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
54
51
|
# 📚 https://git.io/JvXDl
|
|
@@ -62,6 +59,6 @@ jobs:
|
|
|
62
59
|
# make release
|
|
63
60
|
|
|
64
61
|
- name: Perform CodeQL Analysis
|
|
65
|
-
uses: github/codeql-action/analyze@
|
|
62
|
+
uses: github/codeql-action/analyze@v3
|
|
66
63
|
with:
|
|
67
64
|
config-file: .codeql-config.yaml
|
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.40.4] - 2025-11-20
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fix navigation in functions `xxx_with_warning` with multiple warning screens for Nano on NBGL
|
|
13
|
+
|
|
14
|
+
## [1.40.3] - 2025-11-06
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Add new parameter in `navigation_scenario` functions `xxx_with_warning` to specify the number of warning screens
|
|
19
|
+
|
|
8
20
|
## [1.40.2] - 2025-09-09
|
|
9
21
|
|
|
10
22
|
### Fixed
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.40.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 40,
|
|
31
|
+
__version__ = version = '1.40.4'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 40, 4)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gfbba4eeb8'
|
|
@@ -19,17 +19,24 @@ class NavigationScenarioData:
|
|
|
19
19
|
dismiss_warning: Sequence[InstructionType]
|
|
20
20
|
pattern: str = ""
|
|
21
21
|
|
|
22
|
-
def __init__(self,
|
|
22
|
+
def __init__(self,
|
|
23
|
+
device: Device,
|
|
24
|
+
backend: BackendInterface,
|
|
25
|
+
use_case: UseCase,
|
|
26
|
+
approve: bool,
|
|
27
|
+
nb_warnings: int = 1):
|
|
23
28
|
if device.is_nano:
|
|
24
29
|
self.navigation = NavInsID.RIGHT_CLICK
|
|
25
30
|
self.validation = [NavInsID.BOTH_CLICK]
|
|
26
31
|
|
|
27
32
|
if backend.sdk_graphics == GraphicalLibrary.BAGL:
|
|
28
|
-
self.dismiss_warning = [NavInsID.RIGHT_CLICK]
|
|
33
|
+
self.dismiss_warning = [NavInsID.RIGHT_CLICK] * nb_warnings
|
|
29
34
|
# Legacy navigation scenario when running an App compiled with bagl sdk library
|
|
30
35
|
self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
|
|
31
36
|
else:
|
|
32
|
-
self.dismiss_warning = [
|
|
37
|
+
self.dismiss_warning = []
|
|
38
|
+
self.dismiss_warning += [NavInsID.RIGHT_CLICK] * (nb_warnings - 1)
|
|
39
|
+
self.dismiss_warning += [NavInsID.BOTH_CLICK]
|
|
33
40
|
# navigation scenario when running an App compiled with nbgl sdk library
|
|
34
41
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
35
42
|
self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
|
|
@@ -54,7 +61,7 @@ class NavigationScenarioData:
|
|
|
54
61
|
|
|
55
62
|
elif device.touchable:
|
|
56
63
|
self.navigation = NavInsID.SWIPE_CENTER_TO_LEFT
|
|
57
|
-
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT]
|
|
64
|
+
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT] * nb_warnings
|
|
58
65
|
|
|
59
66
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
60
67
|
if approve:
|
|
@@ -133,10 +140,7 @@ class NavigateWithScenario:
|
|
|
133
140
|
test_name: Optional[str] = None,
|
|
134
141
|
custom_screen_text: Optional[str] = None,
|
|
135
142
|
do_comparison: bool = True):
|
|
136
|
-
scenario = NavigationScenarioData(self.device,
|
|
137
|
-
self.backend,
|
|
138
|
-
UseCase.TX_REVIEW,
|
|
139
|
-
approve=True)
|
|
143
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True)
|
|
140
144
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
141
145
|
|
|
142
146
|
def review_approve_with_warning(self,
|
|
@@ -144,11 +148,10 @@ class NavigateWithScenario:
|
|
|
144
148
|
test_name: Optional[str] = None,
|
|
145
149
|
custom_screen_text: Optional[str] = None,
|
|
146
150
|
do_comparison: bool = True,
|
|
147
|
-
warning_path: str = "warning"
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
approve=True)
|
|
151
|
+
warning_path: str = "warning",
|
|
152
|
+
nb_warnings: int = 1):
|
|
153
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True,
|
|
154
|
+
nb_warnings)
|
|
152
155
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
153
156
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
154
157
|
|
|
@@ -157,10 +160,7 @@ class NavigateWithScenario:
|
|
|
157
160
|
test_name: Optional[str] = None,
|
|
158
161
|
custom_screen_text: Optional[str] = None,
|
|
159
162
|
do_comparison: bool = True):
|
|
160
|
-
scenario = NavigationScenarioData(self.device,
|
|
161
|
-
self.backend,
|
|
162
|
-
UseCase.TX_REVIEW,
|
|
163
|
-
approve=False)
|
|
163
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False)
|
|
164
164
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
165
165
|
|
|
166
166
|
def review_reject_with_warning(self,
|
|
@@ -168,11 +168,10 @@ class NavigateWithScenario:
|
|
|
168
168
|
test_name: Optional[str] = None,
|
|
169
169
|
custom_screen_text: Optional[str] = None,
|
|
170
170
|
do_comparison: bool = True,
|
|
171
|
-
warning_path: str = "warning"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
approve=False)
|
|
171
|
+
warning_path: str = "warning",
|
|
172
|
+
nb_warnings: int = 1):
|
|
173
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False,
|
|
174
|
+
nb_warnings)
|
|
176
175
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
177
176
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
178
177
|
|
|
@@ -181,10 +180,8 @@ class NavigateWithScenario:
|
|
|
181
180
|
test_name: Optional[str] = None,
|
|
182
181
|
custom_screen_text: Optional[str] = None,
|
|
183
182
|
do_comparison: bool = True):
|
|
184
|
-
scenario = NavigationScenarioData(self.device,
|
|
185
|
-
|
|
186
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
187
|
-
approve=True)
|
|
183
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
184
|
+
True)
|
|
188
185
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
189
186
|
|
|
190
187
|
def address_review_reject(self,
|
|
@@ -192,8 +189,6 @@ class NavigateWithScenario:
|
|
|
192
189
|
test_name: Optional[str] = None,
|
|
193
190
|
custom_screen_text: Optional[str] = None,
|
|
194
191
|
do_comparison: bool = True):
|
|
195
|
-
scenario = NavigationScenarioData(self.device,
|
|
196
|
-
|
|
197
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
198
|
-
approve=False)
|
|
192
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
193
|
+
False)
|
|
199
194
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
@@ -104,6 +104,11 @@ tests/functional/backend/__init__.py
|
|
|
104
104
|
tests/functional/backend/test_speculos.py
|
|
105
105
|
tests/functional/navigator/__init__.py
|
|
106
106
|
tests/functional/navigator/test_navigator.py
|
|
107
|
+
tests/snapshots/apex_p/waiting_screen/00000.png
|
|
108
|
+
tests/snapshots/apex_p/waiting_screen/00001.png
|
|
109
|
+
tests/snapshots/apex_p/waiting_screen/00002.png
|
|
110
|
+
tests/snapshots/apex_p/waiting_screen/00003.png
|
|
111
|
+
tests/snapshots/apex_p/waiting_screen/00004.png
|
|
107
112
|
tests/snapshots/flex/waiting_screen/00000.png
|
|
108
113
|
tests/snapshots/flex/waiting_screen/00001.png
|
|
109
114
|
tests/snapshots/flex/waiting_screen/00002.png
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -22,7 +22,7 @@ class StubPhysicalBackend(PhysicalBackend):
|
|
|
22
22
|
def receive(self) -> RAPDU:
|
|
23
23
|
return RAPDU(0x9000, b"")
|
|
24
24
|
|
|
25
|
-
def exchange_raw(self, data: bytes = b"") -> RAPDU:
|
|
25
|
+
def exchange_raw(self, data: bytes = b"", tick_timeout: int = 0) -> RAPDU:
|
|
26
26
|
return RAPDU(0x9000, b"")
|
|
27
27
|
|
|
28
28
|
@contextmanager
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_and_compare_no_golden/00000.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00000.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00001.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00002.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.4}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00003.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|