mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-28 09:24:45 +00:00
Co-authored-by: Diptanil Saha <diptanil@frappe.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> fix (#55348)
86 lines
2.9 KiB
Bash
86 lines
2.9 KiB
Bash
#!/bin/bash
|
|
# Syncs Crowdin translations from develop to version-16-hotfix.
|
|
# Merge logic: see merge_po_files.py.
|
|
# Env: GH_TOKEN, PR_REVIEWER, GITHUB_WORKSPACE (all set by Actions).
|
|
|
|
set -e
|
|
cd ~ || exit
|
|
|
|
echo "=== Setting up bench ==="
|
|
pip install frappe-bench
|
|
bench -v init frappe-bench --skip-assets --skip-redis-config-generation --python "$(which python)"
|
|
cd ./frappe-bench || exit
|
|
bench get-app --skip-assets erpnext "${GITHUB_WORKSPACE}"
|
|
|
|
echo "=== Fetching develop's .po files ==="
|
|
mkdir -p /tmp/develop-po
|
|
git -C "${GITHUB_WORKSPACE}" fetch origin develop
|
|
git -C "${GITHUB_WORKSPACE}" archive origin/develop erpnext/locale/ \
|
|
| tar -xf - -C /tmp/develop-po/
|
|
|
|
po_count=$(find /tmp/develop-po/erpnext/locale -name "*.po" | wc -l)
|
|
if [ "${po_count}" -eq 0 ]; then
|
|
echo "ERROR: No .po files found in develop's archive. Aborting." >&2
|
|
exit 1
|
|
fi
|
|
echo "Extracted ${po_count} .po file(s) from develop."
|
|
|
|
echo "=== Merging and reconciling ==="
|
|
env/bin/python "${GITHUB_WORKSPACE}/.github/helper/merge_po_files.py"
|
|
bench update-po-files --app erpnext
|
|
|
|
cd ./apps/erpnext || exit
|
|
|
|
git config user.email "developers@erpnext.com"
|
|
git config user.name "frappe-pr-bot"
|
|
git remote set-url upstream https://github.com/frappe/erpnext.git
|
|
|
|
if git diff --quiet erpnext/locale/; then
|
|
echo "Translations are already up to date. No PR needed."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Changed files:"
|
|
git diff --name-only erpnext/locale/
|
|
|
|
echo "=== Committing and pushing ==="
|
|
git checkout -B translations_hotfix
|
|
git add erpnext/locale/
|
|
git commit -m "fix: sync translations to version-16-hotfix"
|
|
gh auth setup-git
|
|
git push -u upstream translations_hotfix --force
|
|
|
|
echo "=== Opening PR (if not already open) ==="
|
|
existing_pr=$(gh pr list \
|
|
--base "version-16-hotfix" \
|
|
--head "translations_hotfix" \
|
|
--state open \
|
|
--json number \
|
|
--jq 'length' \
|
|
-R frappe/erpnext)
|
|
|
|
if [ "${existing_pr}" -gt 0 ]; then
|
|
echo "PR already open — branch updated in place. No new PR needed."
|
|
exit 0
|
|
fi
|
|
|
|
gh pr create \
|
|
--base "version-16-hotfix" \
|
|
--head "translations_hotfix" \
|
|
--title "fix: sync translations to version-16-hotfix" \
|
|
--body "Automated sync of Crowdin translations from \`develop\` to \`version-16-hotfix\`.
|
|
|
|
A 3-way merge is performed per language, then \`bench update-po-files\` reconciles each \`.po\` against hotfix's \`main.pot\`:
|
|
|
|
| Case | Condition | Result |
|
|
|------|-----------|--------|
|
|
| **a** | \`msgid\` in hotfix's \`main.pot\`, **not** in develop's \`.po\` | Hotfix's existing \`msgstr\` is **preserved** (string removed from develop but still needed in hotfix) |
|
|
| **b** | \`msgid\` **not** in hotfix's \`main.pot\` | **Dropped** from hotfix's \`.po\` |
|
|
| **c** | \`msgid\` in both hotfix's \`main.pot\` and develop's \`.po\` | Develop's \`msgstr\` is used (Crowdin translation wins) |
|
|
|
|
Generated by the \`sync-hotfix-translations\` workflow." \
|
|
--label "translation" \
|
|
--label "skip-release-notes" \
|
|
--reviewer "${PR_REVIEWER}" \
|
|
-R frappe/erpnext
|