From 821027ace7174826a734f2c616bc750973d62547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Tue, 22 Sep 2026 14:16:10 +0200 Subject: [PATCH 1/2] ci(docs): validate catalogs without forced regeneration --- .github/workflows/docs-check.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml index d902154c10..b112b676f8 100644 --- a/.github/workflows/docs-check.yml +++ b/.github/workflows/docs-check.yml @@ -29,7 +29,7 @@ env: MDBOOK_VERSION: v0.5.4 jobs: - build-and-freshness: + build-and-validation: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 @@ -53,11 +53,10 @@ jobs: python3 scripts/check_docs.py - name: Check TypeScript fences run: cargo run --release --quiet -p perry-doc-tests -- --lint docs/src - - name: Check gettext catalogs are current + - name: Validate gettext catalogs run: | - ./docs/i18n.sh extract - ./docs/i18n.sh sync - git diff --exit-code -- docs/po + # Translation updates require review. Regenerating here rewrites + # obsolete entries and can drop existing translations (#10955). for catalog in docs/po/*.po; do msgfmt --check --check-format --statistics --output-file=/dev/null "$catalog" done From 8d9cf7094ef5936e48b8b0e38f1c40910a9710f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Tue, 22 Sep 2026 14:16:34 +0200 Subject: [PATCH 2/2] docs(changelog): note catalog validation gate --- changelog.d/10972-docs-catalog-validation.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/10972-docs-catalog-validation.md diff --git a/changelog.d/10972-docs-catalog-validation.md b/changelog.d/10972-docs-catalog-validation.md new file mode 100644 index 0000000000..fc2de80f8b --- /dev/null +++ b/changelog.d/10972-docs-catalog-validation.md @@ -0,0 +1,3 @@ +### Fixed + +- Docs checks now validate the committed gettext catalogs and build every translation without regenerating catalogs during CI. Translation refreshes remain a reviewed change, avoiding a permanently failing freshness diff and unintended loss of existing translations. (#10955)