What changed, and why it matters
This commit only changes the project's internal continuous integration (CI) setup to add hardware testing runners for a new Trezor device model (T3T1 / Safe 5). It does not modify the firmware code that runs on user devices, nor does it change any security-critical logic. There is no indication this commit fixes or introduces a security vulnerability.
No security action required. Treat as a normal CI/infrastructure change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff updates .github/workflows/core-hw.yml to include T3T1 in the test matrix and route it to a new self-hosted runner label hw-t3t1. It also flips the BOOTLOADER_DEVEL expression so that every model except T2T1 uses bootloader development mode during CI. The second file, ci/hardware_tests/bootstrap.py, adds a branch to recognize the T3T1 model and label it as ‘Safe 5’ during firmware flashing in the test harness. These are test-infrastructure changes only.
Changed components
.github/workflows/core-hw.ymlci/hardware_tests/bootstrap.pyInspect captured patch +10 / −10
diff --git a/.github/workflows/core-hw.yml b/.github/workflows/core-hw.yml
index 3aef0a8a..4485d854 100644
--- a/.github/workflows/core-hw.yml
+++ b/.github/workflows/core-hw.yml
@@ -22,13 +22,12 @@ jobs:
name: Device tests
runs-on:
- self-hosted
- - ${{ matrix.model == 'T2B1' && 'runner3' || 'hw-t2t1' }}
- # runner4 does not work at the moment
- # - ${{ matrix.model == 'T2B1' && 'hw-t2b1' || 'hw-t2t1' }}
+ # FIXME runner4 with t2b1 does not work at the moment
+ - ${{ matrix.model == 'T2B1' && 'runner3' || matrix.model == 'T3T1' && 'hw-t3t1' || 'hw-t2t1' }}
strategy:
fail-fast: false
matrix:
- model: [T2T1, T2B1]
+ model: [T2T1, T2B1, T3T1]
coins: [universal, btconly]
env:
TREZOR_MODEL: ${{ matrix.model }}
@@ -37,7 +36,7 @@ jobs:
PYOPT: 0
DISABLE_OPTIGA: 1
STORAGE_INSECURE_TESTING_MODE: 1
- BOOTLOADER_DEVEL: ${{ matrix.model == 'T2B1' && '1' || '0' }}
+ BOOTLOADER_DEVEL: ${{ matrix.model == 'T2T1' && '0' || '1' }}
# TODO: enable SD-related tests after fixing #4924
# Disable authenticity test since it requires DISABLE_OPTIGA=0
# 5.5h pytest global timeout
@@ -76,19 +75,18 @@ jobs:
name: Monero tests
runs-on:
- self-hosted
- - ${{ matrix.model == 'T2B1' && 'runner3' || 'hw-t2t1' }}
- # runner4 does not work at the moment
- # - ${{ matrix.model == 'T2B1' && 'hw-t2b1' || 'hw-t2t1' }}
+ # FIXME runner4 with t2b1 does not work at the moment
+ - ${{ matrix.model == 'T2B1' && 'runner3' || matrix.model == 'T3T1' && 'hw-t3t1' || 'hw-t2t1' }}
strategy:
fail-fast: false
matrix:
- model: [T2T1, T2B1]
+ model: [T2T1, T2B1, T3T1]
env:
TREZOR_MODEL: ${{ matrix.model }}
PYTEST_TIMEOUT: 1200
PYOPT: 0
DISABLE_OPTIGA: 1
- BOOTLOADER_DEVEL: ${{ matrix.model == 'T2B1' && '1' || '0' }}
+ BOOTLOADER_DEVEL: ${{ matrix.model == 'T2T1' && '0' || '1' }}
TT_UHUB_PORT: 1
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # actions/checkout@v4.3.1
diff --git a/ci/hardware_tests/bootstrap.py b/ci/hardware_tests/bootstrap.py
index f2b64c0d..cdadf05f 100755
--- a/ci/hardware_tests/bootstrap.py
+++ b/ci/hardware_tests/bootstrap.py
@@ -25,6 +25,8 @@ def main(model: str, file: str = None):
path = tt.update_firmware(file, "Trezor T")
elif model == "T2B1":
path = tt.update_firmware(file, "Safe 3")
+ elif model == "T3T1":
+ path = tt.update_firmware(file, "Safe 5")
else:
raise ValueError("Unknown Trezor model.")
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.