chore(ci): run tropic model_server in uv environment
What changed, and why it matters
This is a routine internal cleanup of the project's automated testing setup. It changes how a test-support program (the 'Tropic model server') is started during continuous integration (CI) runs, switching from a Poetry-based Python environment inside a vendored dependency directory to the project's own 'uv' Python environment. There is no change to the firmware, wallet logic, cryptography, or any code shipped to users.
No security action required. Treat as normal CI hygiene.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit modifies .github/workflows/core.yml only. It replaces several shell commands that previously changed into vendor/ts-tvl, configured Poetry to Python 3.12, installed dependencies, and ran model_server under poetry, with equivalent commands using uv run model_server directly from the trezor-firmware root. It also adds an explicit ‘if: matrix.model == T3W1’ guard in two places where it was missing. The change is build/test infrastructure only and does not alter firmware source, device behavior, or exposed attack surface.
Changed components
.github/workflows/core.ymlInspect captured patch +10 / −6
diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index 56fa2d2a..e688ab91 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -153,7 +153,9 @@ jobs:
- run: nix-shell --run "uv run make -C core build_bootloader_emu"
if: matrix.coins == 'universal' && matrix.asan == 'noasan'
- run: nix-shell --run "uv run make -C core build_unix_frozen"
- - run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ - name: Start Tropic model
+ if: ${{ matrix.model == 'T3W1' }}
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- run: nix-shell --run "uv run make -C core test_emu_sanity"
- run: cp core/build/unix/trezor-emu-core core/build/unix/trezor-emu-core-${{ matrix.model }}-${{ matrix.coins }}${{ matrix.n4w1 && '-n4w1' || '' }}
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # actions/upload-artifact@v7.0.0
@@ -229,7 +231,9 @@ jobs:
submodules: recursive
- uses: ./.github/actions/environment
- run: nix-shell --run "uv run make -C core build_unix"
- - run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ - name: Start Tropic model
+ if: ${{ matrix.model == 'T3W1' }}
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- run: nix-shell --run "uv run make -C core test"
- run: nix-shell --run "uv run make -C core test_emu_sanity" # sanity check non-frozen emulator
@@ -330,7 +334,7 @@ jobs:
- uses: ./.github/actions/environment
- name: Start Tropic model
if: ${{ env.TREZOR_MODEL == 'T3W1' && env.ACTIONS_DO_UI_TEST != 'true' }} # ACTIONS_DO_UI_TEST refers to the test_emu_ui_multicore below which uses --control-emulators and starts tvl internally
- run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- name: Run device tests
if: ${{ !matrix.n4w1 }}
run: nix-shell --run "uv run make -C core ${{ env.ACTIONS_DO_UI_TEST == 'true' && 'test_emu_ui_multicore' || 'test_emu' }}"
@@ -485,7 +489,7 @@ jobs:
- uses: ./.github/actions/environment
- name: Start Tropic model
if: ${{ matrix.model == 'T3W1' }}
- run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- run: nix-shell --run "uv run make -C core test_emu_persistence_ui"
if: ${{ matrix.asan == 'noasan' }}
- run: nix-shell --run "uv run make -C core test_emu_persistence"
@@ -650,7 +654,7 @@ jobs:
- uses: ./.github/actions/environment
- name: Start Tropic model
if: ${{ matrix.model == 'T3W1' }}
- run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- run: nix-shell --run "uv run make -C tests/fido_tests/u2f-tests-hid"
- run: nix-shell --run "uv run make -C core test_emu_u2f"
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # actions/upload-artifact@v7.0.0
@@ -688,7 +692,7 @@ jobs:
- uses: ./.github/actions/environment
- name: Start Tropic model
if: ${{ matrix.model == 'T3W1' }}
- run: nix-shell --arg fullDeps true --run "cd vendor/ts-tvl && poetry env use 3.12 && poetry install && poetry run model_server tcp -c ../../tests/tropic_model/config.yml > ../../tests/trezor-tropic-model.log 2>&1 &"
+ run: nix-shell --arg fullDeps true --run "uv run model_server tcp -c tests/tropic_model/config.yml > tests/trezor-tropic-model.log 2>&1 &"
- run: nix-shell --run "uv run make -C core test_emu_fido2"
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # actions/upload-artifact@v7.0.0
with:
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.