From cf31823d53a3518b7cb38993ce34f485247cbcd9 Mon Sep 17 00:00:00 2001 From: skkzsh Date: Thu, 30 Apr 2026 20:04:12 +0900 Subject: [PATCH] i18n: Enforce dennis lint warnings in CI (#4105) --- .github/workflows/test-only.yml | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-only.yml b/.github/workflows/test-only.yml index 356874e3..fb4d0964 100644 --- a/.github/workflows/test-only.yml +++ b/.github/workflows/test-only.yml @@ -35,18 +35,38 @@ jobs: run: | pip install "$(grep -E '^dennis ?>=' requirements.txt)" dennis-cmd lint --errorsonly changedetectionio/translations/ - - name: Lint .pot template with dennis (warnings, informational) + - name: Lint .pot template with dennis (baseline-limited warnings) + # BASELINE: dennis warnings present when this check was introduced. Ratchet down only. + # Each time a warning is fixed, lower BASELINE_LIMIT to lock in the improvement. + # Once it reaches 0, replace this step with a strict (`warnings > 0` fails) check, + # matching the `.po` step. + env: + BASELINE_LIMIT: 12 run: | - dennis-cmd lint changedetectionio/translations/messages.pot - - name: Lint .po files with dennis (warnings, informational) + output=$(dennis-cmd lint changedetectionio/translations/messages.pot) + echo "$output" + warnings=$(echo "$output" | awk '/Warnings:/ {print $NF; exit}') + if (( ${warnings:-0} > BASELINE_LIMIT )); then + echo "ERROR: ${warnings} dennis warning(s) exceed baseline of ${BASELINE_LIMIT} in messages.pot" + echo "Fix the new warning(s). BASELINE_LIMIT may only ratchet downward." + exit 1 + fi + - name: Lint .po files with dennis (warnings) # W302 (unchanged) and W303 (html mismatch) are excluded due to # high false-positive rate in this codebase: # many msgstrs intentionally match msgid (units like "Mb", proper nouns), # and many msgids contain literal ""/"<description>" text that isn't actual HTML. run: | - dennis-cmd lint \ + output=$(dennis-cmd lint \ --excluderules=W302,W303 \ - changedetectionio/translations/*/LC_MESSAGES/messages.po + changedetectionio/translations/*/LC_MESSAGES/messages.po) + echo "$output" + warnings=$(echo "$output" | awk '/Total number of warnings:/ {print $NF; exit}') + if (( ${warnings:-0} > 0 )); then + echo "ERROR: ${warnings} dennis warning(s) detected in .po files" + echo "Fix the warning(s)." + exit 1 + fi - name: Check translation catalog is up-to-date run: | pip install "$(grep -E '^babel==' requirements.txt)"