1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-08-05 05:15:27 +00:00

ci: re-add missing fixtures.result.json to UI report directory

Also, download multiple UI fixtures in parallel.

[no changelog]
This commit is contained in:
Roman Zeyde 2025-06-06 10:43:41 +03:00 committed by Roman Zeyde
parent d752da0a94
commit f7e1444bba
2 changed files with 34 additions and 22 deletions

View File

@ -28,6 +28,7 @@ runs:
mkdir -p $OUTDIR
nix-shell --run "poetry run python ci/prepare_ui_artifacts.py || true"
mv -v tests/ui_tests/reports/test/* $OUTDIR
mv -v tests/ui_tests/fixtures.*.json $OUTDIR
# rename all model/job-speficific report files, so they won't be overwritten during upload
cd $OUTDIR

View File

@ -6,6 +6,7 @@ Allowing for interaction with the test results, e.g. with UI tests.
from __future__ import annotations
from concurrent.futures import Future, ThreadPoolExecutor
from pathlib import Path
from typing import Any, Iterable, Iterator
@ -18,7 +19,7 @@ AnyDict = dict[Any, Any]
HERE = Path(__file__).parent
LIST_RUNS_TEMPLATE = "https://api.github.com/repos/trezor/trezor-firmware/actions/workflows/{workflow}/runs?branch={branch}"
FIXTURES_TEMPLATE = "https://data.trezor.io/dev/firmware/ui_report/{run}/{model}-{lang}-{job}/fixtures.results.json"
FIXTURES_TEMPLATE = "https://data.trezor.io/dev/firmware/ui_report/{run}/{job_instance}-fixtures.results.json"
MODELS = [model.internal_name for model in models.TREZORS]
CORE_LANGUAGES = ["en", "cs", "de", "es", "fr", "it", "pt"]
@ -39,6 +40,15 @@ def get_last_run(branch_name: str, workflow: str) -> int | None:
return None
def download_or_none(url: str) -> AnyDict | None:
response = requests.get(url)
if response.status_code != 200:
print(f"Failed to get {url}: {response.status_code}")
return None
return response.json()
def get_branch_ui_fixtures_results(
branch_name: str,
only_jobs: Iterable[str] | None,
@ -64,6 +74,8 @@ def get_branch_ui_fixtures_results(
if run_id is None:
continue
futures: list[tuple[str, Future]] = []
with ThreadPoolExecutor(max_workers=8) as executor:
for lang in languages:
for job in jobs:
job_instance = f"{model}-{lang}-{job}"
@ -77,16 +89,15 @@ def get_branch_ui_fixtures_results(
):
continue
response = requests.get(
FIXTURES_TEMPLATE.format(
run=run_id, model=model, lang=lang, job=job
url = FIXTURES_TEMPLATE.format(
run=run_id, job_instance=job_instance
)
)
if response.status_code != 200:
print(
f"Failed to get fixtures for {job_instance}: {response.status_code}"
)
continue
yield job_instance, response.json()
future = executor.submit(download_or_none, url)
futures.append((job_instance, future))
for job_instance, future in futures:
result = future.result()
if result is not None:
yield (job_instance, result)
return dict(yield_key_value())