Skip to content

Pull Translations from Transifex #141

Pull Translations from Transifex

Pull Translations from Transifex #141

name: Pull Translations from Transifex
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
permissions:
contents: write
jobs:
update-translation:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [ '3.15' ]
steps:
- uses: styfle/cancel-workflow-action@main
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@master
with:
python-version: 3
- name: Install Dependencies
run: |
sudo apt-get install -y gettext
pip install requests cogapp polib transifex-python sphinx-intl blurb six
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
working-directory: /usr/local/bin
- uses: actions/checkout@master
with:
ref: ${{ matrix.version }}
fetch-depth: 0
- run: curl -O https://raw.githubusercontent.com/python-docs-translations/transifex-automations/master/sample-workflows/transifex-util.py
- run: chmod +x transifex-util.py
- run: ./transifex-util.py recreate_tx_config --language ta --project-slug python-newest --version ${{ matrix.version }}
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
- run: ./transifex-util.py fetch --language ta --project-slug python-newest --version ${{ matrix.version }}
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
- run: ./transifex-util.py delete_obsolete_files --language ta --project-slug python-newest --version ${{ matrix.version }}
- name: Set up Git
run: |
git config --local user.email github-actions@github.com
git config --local user.name "GitHub Action's update-translation job"
# 1. FAIL-SAFE PROTECTION: Restore any file that Transifex deleted or stripped of content
- name: Protect GitHub translations from Transifex overwrites
run: |
git diff --name-only | grep '\.po$' | while read file; do
# Catch file deletions from the delete_obsolete_files step
if [ ! -f "$file" ]; then
echo "CRITICAL: Transifex deleted $file. Restoring from GitHub baseline!"
git checkout HEAD -- "$file"
continue
fi
# Catch string subtractions (lines starting with '-' that had active translations)
REMOVED_TRANSLATIONS=$(git diff HEAD -- "$file" | grep '^-msgstr "[^"]' || true)
if [ ! -z "$REMOVED_TRANSLATIONS" ]; then
echo "CRITICAL: Transifex stripped translations from $file. Restoring from GitHub baseline!"
git checkout HEAD -- "$file"
fi
done || true
# 2. Filter files accurately based on what remains changed
- name: Filter files
run: |
! git diff -I'^"POT-Creation-Date: ' \
-I'^"Language-Team: ' \
-I'^# ' -I'^"Last-Translator: ' \
--exit-code \
&& echo "SIGNIFICANT_CHANGES=1" >> $GITHUB_ENV || exit 0
- run: git add . ':!transifex-util.py'
# 3. Safely commit only if there are valid changes remaining
- run: git commit -m 'Update translation from Transifex' || echo "No changes to commit"
if: ${{ env.SIGNIFICANT_CHANGES == '1' }}
# 4. Push the safe updates back up to GitHub
- uses: ad-m/github-push-action@master
if: ${{ env.SIGNIFICANT_CHANGES == '1' }}
with:
branch: ${{ matrix.version }}
github_token: ${{ secrets.GITHUB_TOKEN }}