1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-01-17 19:00:58 +00:00

build(core): check if language versions match firmware

[no changelog]
This commit is contained in:
Martin Milata 2024-11-06 14:39:39 +01:00
parent 7a61d8e858
commit 5bc2f8d1ec
2 changed files with 15 additions and 3 deletions

View File

@ -239,6 +239,7 @@ translations: ## update translations
python ./translations/cli.py gen python ./translations/cli.py gen
translations_check: ## check that translations are up to date translations_check: ## check that translations are up to date
python ./translations/cli.py gen --check
# spits out error if the stored merkle root is not up to date # spits out error if the stored merkle root is not up to date
python ./translations/cli.py merkle-root > /dev/null python ./translations/cli.py merkle-root > /dev/null

17
core/translations/cli.py Normal file → Executable file
View File

@ -147,7 +147,7 @@ class TranslationsDir:
def all_languages(self) -> t.Iterable[str]: def all_languages(self) -> t.Iterable[str]:
return (lang_file.stem for lang_file in self.path.glob("??.json")) return (lang_file.stem for lang_file in self.path.glob("??.json"))
def update_version_from_h(self) -> VersionTuple: def update_version_from_h(self, check: bool = False) -> VersionTuple:
version = _version_from_version_h() version = _version_from_version_h()
for lang in self.all_languages(): for lang in self.all_languages():
blob_json = self.load_lang(lang) blob_json = self.load_lang(lang)
@ -155,6 +155,10 @@ class TranslationsDir:
blob_json["header"]["version"] blob_json["header"]["version"]
) )
if blob_version != version: if blob_version != version:
if check:
raise ValueError(
f"Language {lang} has version {blob_version} not matching firmware version {version}"
)
blob_json["header"]["version"] = _version_str(version[:3]) blob_json["header"]["version"] = _version_str(version[:3])
self.save_lang(lang, blob_json) self.save_lang(lang, blob_json)
return version return version
@ -242,7 +246,8 @@ def cli() -> None:
@click.option( @click.option(
"--version", "version_str", help="Set the blob version independent of JSON data." "--version", "version_str", help="Set the blob version independent of JSON data."
) )
def gen(signed: bool | None, version_str: str | None) -> None: @click.option("--check", is_flag=True, help="Only check if JSON version matches firmware.")
def gen(signed: bool | None, version_str: str | None, check: bool | None) -> None:
"""Generate all language blobs for all models. """Generate all language blobs for all models.
The generated blobs will be signed with the development keys. The generated blobs will be signed with the development keys.
@ -250,8 +255,10 @@ def gen(signed: bool | None, version_str: str | None) -> None:
tdir = TranslationsDir() tdir = TranslationsDir()
if version_str is None: if version_str is None:
version = tdir.update_version_from_h() version = tdir.update_version_from_h(check=check)
else: else:
if check:
raise click.ClickException("Options --version and --check are mutually exclusive.")
version = translations.version_from_json(version_str) version = translations.version_from_json(version_str)
all_blobs = tdir.generate_all_blobs(version) all_blobs = tdir.generate_all_blobs(version)
@ -260,6 +267,10 @@ def gen(signed: bool | None, version_str: str | None) -> None:
signature_file: SignatureFile = json.loads(SIGNATURES_JSON.read_text()) signature_file: SignatureFile = json.loads(SIGNATURES_JSON.read_text())
if check:
click.echo("Translation versions match firmware.")
return
if signed: if signed:
for entry in signature_file["history"]: for entry in signature_file["history"]:
if entry["merkle_root"] == root.hex(): if entry["merkle_root"] == root.hex():