ragger 1.40.2__tar.gz → 1.40.3__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.3}/.github/workflows/build_and_tests.yml +33 -3
- {ragger-1.40.2 → ragger-1.40.3}/.github/workflows/codeql-analysis.yml +4 -7
- {ragger-1.40.2 → ragger-1.40.3}/.github/workflows/fast-checks.yml +1 -1
- {ragger-1.40.2 → ragger-1.40.3}/CHANGELOG.md +6 -0
- {ragger-1.40.2/src/ragger.egg-info → ragger-1.40.3}/PKG-INFO +1 -1
- {ragger-1.40.2 → ragger-1.40.3}/ledger_app.toml +1 -1
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/__version__.py +3 -3
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/navigation_scenario.py +23 -30
- {ragger-1.40.2 → ragger-1.40.3/src/ragger.egg-info}/PKG-INFO +1 -1
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger.egg-info/SOURCES.txt +5 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00000.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00001.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00002.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00003.png +0 -0
- ragger-1.40.3/tests/snapshots/apex_p/waiting_screen/00004.png +0 -0
- ragger-1.40.3/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.3/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_physical_backend.py +1 -1
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/utils/test_misc.py +1 -1
- ragger-1.40.2/tests/snapshots/flex/waiting_screen/00001.png +0 -0
- ragger-1.40.2/tests/snapshots/stax/waiting_screen/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/.codeql-config.yaml +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/.gitattributes +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/.github/workflows/documentation.yml +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/.github/workflows/force-rebase.yml +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/.gitignore +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/LICENSE +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/MANIFEST.in +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/README.md +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/Makefile +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/_static/layout.css +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/_templates/layout.html +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/architecture.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/conf.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/faq.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/glossary.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/navigate.draw +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/navigate.svg +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/ragger.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/stax_infos.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/stax_welcome.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/usage.draw +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/images/usage.svg +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/index.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/installation.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/rationale.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/source.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/tutorial.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/tutorial_conftest.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/tutorial_installation.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/doc/tutorial_screen.rst +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/pyproject.toml +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/setup.cfg +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/ledgercomm.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/ledgerwallet.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/physical_backend.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/backend/stub.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/bip/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/bip/path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/bip/seed.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/conftest/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/conftest/base_conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/conftest/configuration.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/error.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/structs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/element.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/layouts.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/positions.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/screen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/firmware/touch/use_cases.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanos_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanos_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanos_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanosp_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanox_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanox_leftbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/nanox_rightbutton.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/stax_body.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/swipe_left_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/swipe_right_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/assets/touch_action.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/gui/process.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/logger.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/instruction.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/nano_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/navigator/touch_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/py.typed +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/utils/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/utils/misc.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/utils/packing.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger/utils/structs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger.egg-info/dependency_links.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger.egg-info/requires.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/src/ragger.egg-info/top_level.txt +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/template/.dispatch_to_your_test_folder +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/template/conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/template/usage.md +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/backend/test_speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/navigator/test_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/functional/test_boilerplate.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/pytest.ini +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/flex/waiting_screen/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/generic/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/generic/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/generic/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/generic/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/generic/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00005.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00006.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare/00007.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_no_golden/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_and_compare_wrong_golden/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00001.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00000.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00002.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00003.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/stax/waiting_screen/00004.png +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/stubs.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_interface.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_ledgercomm.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_ledgerwallet.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_speculos.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/backend/test_stub.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/bip/test_path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/bip/test_seed.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/conftests/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/conftests/test_base_conftest.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/firmware/test_structs_Firmware.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/firmware/touch/test_element.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/firmware/touch/test_screen_FullScreen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/firmware/touch/test_screen_MetaScreen.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/helpers.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/navigator/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/navigator/test_nano_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/navigator/test_navigation_scenario.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/navigator/test_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/navigator/test_touch_navigator.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/test_error_ApplicationError.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/utils/__init__.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/utils/test_packing.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/tests/unit/utils/test_path.py +0 -0
- {ragger-1.40.2 → ragger-1.40.3}/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,12 @@ 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.3] - 2025-11-06
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Add new parameter in `navigation_scenario` functions `xxx_with_warning` to specify the number of warning screens
|
|
13
|
+
|
|
8
14
|
## [1.40.2] - 2025-09-09
|
|
9
15
|
|
|
10
16
|
### 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.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 40, 3)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g21c065416'
|
|
@@ -19,17 +19,22 @@ 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 = [NavInsID.BOTH_CLICK]
|
|
37
|
+
self.dismiss_warning = [NavInsID.BOTH_CLICK] * nb_warnings
|
|
33
38
|
# navigation scenario when running an App compiled with nbgl sdk library
|
|
34
39
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
35
40
|
self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
|
|
@@ -54,7 +59,7 @@ class NavigationScenarioData:
|
|
|
54
59
|
|
|
55
60
|
elif device.touchable:
|
|
56
61
|
self.navigation = NavInsID.SWIPE_CENTER_TO_LEFT
|
|
57
|
-
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT]
|
|
62
|
+
self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT] * nb_warnings
|
|
58
63
|
|
|
59
64
|
if use_case == UseCase.ADDRESS_CONFIRMATION:
|
|
60
65
|
if approve:
|
|
@@ -133,10 +138,7 @@ class NavigateWithScenario:
|
|
|
133
138
|
test_name: Optional[str] = None,
|
|
134
139
|
custom_screen_text: Optional[str] = None,
|
|
135
140
|
do_comparison: bool = True):
|
|
136
|
-
scenario = NavigationScenarioData(self.device,
|
|
137
|
-
self.backend,
|
|
138
|
-
UseCase.TX_REVIEW,
|
|
139
|
-
approve=True)
|
|
141
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True)
|
|
140
142
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
141
143
|
|
|
142
144
|
def review_approve_with_warning(self,
|
|
@@ -144,11 +146,10 @@ class NavigateWithScenario:
|
|
|
144
146
|
test_name: Optional[str] = None,
|
|
145
147
|
custom_screen_text: Optional[str] = None,
|
|
146
148
|
do_comparison: bool = True,
|
|
147
|
-
warning_path: str = "warning"
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
approve=True)
|
|
149
|
+
warning_path: str = "warning",
|
|
150
|
+
nb_warnings: int = 1):
|
|
151
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True,
|
|
152
|
+
nb_warnings)
|
|
152
153
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
153
154
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
154
155
|
|
|
@@ -157,10 +158,7 @@ class NavigateWithScenario:
|
|
|
157
158
|
test_name: Optional[str] = None,
|
|
158
159
|
custom_screen_text: Optional[str] = None,
|
|
159
160
|
do_comparison: bool = True):
|
|
160
|
-
scenario = NavigationScenarioData(self.device,
|
|
161
|
-
self.backend,
|
|
162
|
-
UseCase.TX_REVIEW,
|
|
163
|
-
approve=False)
|
|
161
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False)
|
|
164
162
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
165
163
|
|
|
166
164
|
def review_reject_with_warning(self,
|
|
@@ -168,11 +166,10 @@ class NavigateWithScenario:
|
|
|
168
166
|
test_name: Optional[str] = None,
|
|
169
167
|
custom_screen_text: Optional[str] = None,
|
|
170
168
|
do_comparison: bool = True,
|
|
171
|
-
warning_path: str = "warning"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
approve=False)
|
|
169
|
+
warning_path: str = "warning",
|
|
170
|
+
nb_warnings: int = 1):
|
|
171
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False,
|
|
172
|
+
nb_warnings)
|
|
176
173
|
self._navigate_warning(scenario, test_name, do_comparison, warning_path)
|
|
177
174
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
178
175
|
|
|
@@ -181,10 +178,8 @@ class NavigateWithScenario:
|
|
|
181
178
|
test_name: Optional[str] = None,
|
|
182
179
|
custom_screen_text: Optional[str] = None,
|
|
183
180
|
do_comparison: bool = True):
|
|
184
|
-
scenario = NavigationScenarioData(self.device,
|
|
185
|
-
|
|
186
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
187
|
-
approve=True)
|
|
181
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
182
|
+
True)
|
|
188
183
|
self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
|
|
189
184
|
|
|
190
185
|
def address_review_reject(self,
|
|
@@ -192,8 +187,6 @@ class NavigateWithScenario:
|
|
|
192
187
|
test_name: Optional[str] = None,
|
|
193
188
|
custom_screen_text: Optional[str] = None,
|
|
194
189
|
do_comparison: bool = True):
|
|
195
|
-
scenario = NavigationScenarioData(self.device,
|
|
196
|
-
|
|
197
|
-
UseCase.ADDRESS_CONFIRMATION,
|
|
198
|
-
approve=False)
|
|
190
|
+
scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
|
|
191
|
+
False)
|
|
199
192
|
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
|
|
@@ -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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.3}/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.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00000.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00001.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.3}/tests/snapshots/nanos/test_navigate_until_text_and_compare/00002.png
RENAMED
|
File without changes
|
{ragger-1.40.2 → ragger-1.40.3}/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
|
|
File without changes
|
|
File without changes
|