Persist partial i18n progress on transient translator failures

This commit is contained in:
MacRimi
2026-08-14 20:43:44 +02:00
parent 157ab50f9b
commit f0c8e73446
3 changed files with 29 additions and 9 deletions
+10 -2
View File
@@ -316,7 +316,8 @@ def main() -> int:
if total_failures:
print(
f"\nCompleted with {len(total_failures)} translation failures.",
f"\nCompleted with {len(total_failures)} translation failures "
f"(partial progress persisted, next run will retry).",
file=sys.stderr,
flush=True,
)
@@ -324,7 +325,14 @@ def main() -> int:
print(f" - {lang}: {key}{error}", file=sys.stderr, flush=True)
if len(total_failures) > 20:
print(f" ... and {len(total_failures) - 20} more.", file=sys.stderr, flush=True)
return 2
# Exit 0 on partial failure so the workflow's Commit + push
# step still runs and the keys that DID translate reach
# develop. The un-translated keys stay empty and the next
# workflow tick (or a manual dispatch) retries them.
# Previously we returned 2, which failed the whole run and
# discarded 36 out of 38 successful translations because
# 2 googletrans timeouts hit sv at the start of the burst.
return 0
print("\ni18n messages generated successfully.", flush=True)
return 0
+10 -2
View File
@@ -388,12 +388,20 @@ def main() -> int:
write_language_cache(output_dir / f"{lang}.json", cache)
if failures:
print(f"Completed with {len(failures)} translation failures.", file=sys.stderr, flush=True)
print(
f"Completed with {len(failures)} translation failures "
f"(partial progress persisted, next run will retry).",
file=sys.stderr, flush=True,
)
for text, lang, error in failures[:20]:
print(f"- {lang}: {text[:80]} -> {error}", file=sys.stderr, flush=True)
if len(failures) > 20:
print(f"... and {len(failures) - 20} more.", file=sys.stderr, flush=True)
return 2
# Exit 0 on partial failure so the workflow's Commit + push
# step still runs. Otherwise a couple of transient googletrans
# timeouts would fail the whole workflow and discard every
# successful translation from the same batch.
return 0
print("Translation cache generated successfully.", flush=True)
return 0
+9 -5
View File
@@ -24,11 +24,15 @@ on:
push:
branches: [develop]
paths:
# `**/common.json` catches every locale, not just en/. Needed
# because manual edits to sk/sv (or any curated locale) that
# empty a key so the workflow refills it wouldn't otherwise
# trigger the job when en/ hasn't changed.
- 'AppImage/messages/**/common.json'
# Only en/ triggers the run — it's the source of truth. Other
# locales are destinations, and the bot auto-commits them at
# the end of every run; if they were in the trigger too, each
# auto-commit would fire another (empty) run.
# Manual edits to a curated locale that empty a key for the
# workflow to refill are the exception — dispatch this
# workflow manually from Actions in that case, or piggy-back
# a trivial en/ change onto the commit.
- 'AppImage/messages/en/common.json'
- '.github/scripts/build_i18n_messages.py'
- '.github/workflows/build-i18n-messages.yml'
workflow_dispatch: