Skip to content

Test Translation

Test Translation #179

# This workflow extracts translation source files from code and adds the extracted
# translation source files to the openedx-translations repository via an auto-merged pull
# request.
name: Extract Translation Source Files
on:
pull_request:
branches:
- '**'
jobs:
setup-branch:
runs-on: ubuntu-latest
outputs:
branch: ${{ steps.dynamic_branch.outputs.branch }}
steps:
# sets the job output that creates a unique branch name
- name: dynamically set branch job output variable
id: dynamic_branch
run: echo "branch=automated/extract-translation-source-files-$(date +'%Y%m%dT%H%M%S')" >> $GITHUB_OUTPUT
# clones the openedx-translations repo so a branch can be added in the next step
- name: echo branch name
id: date
run: echo $BRANCH
- name: clone Zeit-Labs/openedx-translations
uses: actions/checkout@v3
# creates the branch where all the translations will be added to
- name: make and push a new branch
run: |
git checkout -b ${{ steps.dynamic_branch.outputs.branch }}
git push --set-upstream origin ${{ steps.dynamic_branch.outputs.branch }}
python-translations:
strategy:
# using max-parallel to avoid git push/pull issues when running in parallel
max-parallel: 1
matrix:
repo:
# - AudioXBlock
# - completion
# - course-discovery
# - credentials
# - credentials-themes
# - DoneXBlock
# - edx-ace
# - edx-bulk-grades
# - edx-ora2
- edx-platform
# - edx-proctoring
# - FeedbackXBlock
# - RecommenderXBlock
# - xblock-drag-and-drop-v2
# - xblock-free-text-response
# - xblock-google-drive
# - xblock-image-explorer
# - xblock-image-modal
# - xblock-lti-consumer
# - xblock-qualtrics-survey
# - xblock-sql-grader
# - xblock-submit-and-compare
runs-on: ubuntu-latest
continue-on-error: true
needs: [setup-branch]
steps:
# Clones the openedx-translations repo
- name: clone Zeit-Labs/openedx-translations
uses: actions/checkout@v3
with:
ref: ${{ needs.setup-branch.outputs.branch }}
# Installs gettext, a dependency for extracting translation source files in django
- name: install gettext
run: sudo apt install -y gettext
# Clones the repository
- name: clone Zeit-Labs/${{ matrix.repo }}
uses: actions/checkout@v3
with:
repository: Zeit-Labs/${{ matrix.repo }}
ref: shadinaif/FC-0012-OEP-58.no-segment
path: translations/${{ matrix.repo }}
- name: prepare the environment with edx-platform specific changes
if: matrix.repo == 'edx-platform'
run: |
# This is needed for edx-platform base.txt packages
sudo apt install -y libxml2-dev libxmlsec1-dev libxslt1-dev
# Remove unwanted `en` django/djangojs po files
rm -rf translations/${{ matrix.repo }}/conf/locale/en
mkdir -p translations/${{ matrix.repo }}/conf/locale/en/LC_MESSAGES
# Setup Python
- name: setup python
uses: actions/setup-python@v4
id: setup_python
with:
python-version: '3.8'
cache: pip
# Using wild-card for `edx-platf*rm` -> `edx-platform` which separates its dependencies from other repos
cache-dependency-path: |
requirements/translations.txt
translations/edx-platf*rm/requirements/edx/base.txt
# Installs Python requirements from translations.txt
- name: install requirements
run: |
# Install requirements for all packages
pip install -r requirements/translations.txt
EDX_BASE_REQS=translations/edx-platform/requirements/edx/base.txt
if test -f $EDX_BASE_REQS; then
# Install edx-platform specific apps (e.g. wiki) which is required to extract translations from
pip install -r $EDX_BASE_REQS
fi
# Extracts the translation source files
- name: extract translation source files
run: |
cd translations/${{ matrix.repo }}
make extract_translations
env:
IS_OPENEDX_TRANSLATIONS_WORKFLOW: yes
# Validate compilation of translation source files
- name: validate compilation of translation source files
run: |
cd translations/${{ matrix.repo }}
django-admin compilemessages --locale en
# git adds only the translation source files, found in conf/locale/en
- name: git add the translation source files
id: add-sources
run: |
# set identity
git config --global user.email "[email protected]"
git config --global user.name "edx-transifex-bot"
# Change directory to translations/${{ matrix.repo }}
cd translations/${{ matrix.repo }}
# finds the directory containing the english locale usually located in
# */*/conf/locale/en
EN_DIR=$(find . -type d -regex ".+conf\/locale\/en$" | head -n 1)
echo "EN_DIR=$EN_DIR" >> $GITHUB_ENV
# If the directory is not found, exit with an error. This can happen if we add a repository that doesn't
# comply with OEP-58, or it still doesn't have any translations yet
if [ -z "$EN_DIR" ]; then
echo "Missing English locale directory for ${{ matrix.repo }}!"
echo "exiting with error!"
exit 1
fi
# remove translations/${{ matrix.repo }}/.git so we don't commit a submodule
rm -rf .git
# All repositories except for edx-platform follows the standard Django i18n pattern
- name: add repo translation source files openedx-translations
if: matrix.repo != 'edx-platform'
run: |
# finds the django.po and djangojs.po files generated by make
# extract_translations into EN_DIR and adds them
cd translations/${{ matrix.repo.repo_name }}
DJANGO_PATH=$(find $EN_DIR -name 'django.po')
DJANGOJS_PATH=$(find $EN_DIR -name 'djangojs.po')
############## Special support for XBlocks
# if both files are not found, then it can be an XBlock (thus, text.po and textjs.po files)
if [ -z "$DJANGO_PATH" ] && [ -z "$DJANGOJS_PATH" ]; then
DJANGO_PATH=$(find $EN_DIR -name 'text.po')
DJANGOJS_PATH=$(find $EN_DIR -name 'textjs.po')
# Rename the files to django.po and djangojs.po, if exists
if [ -n "$DJANGO_PATH" ]; then
mv $DJANGO_PATH $(dirname $DJANGO_PATH)/django.po
DJANGO_PATH=$(dirname $DJANGO_PATH)/django.po
fi
if [ -n "$DJANGOJS_PATH" ]; then
mv $DJANGOJS_PATH $(dirname $DJANGOJS_PATH)/djangojs.po
DJANGOJS_PATH=$(dirname $DJANGOJS_PATH)/djangojs.po
fi
fi
############## End of - Special support for XBlocks
# use (-f) to force add the files even if they are ignored in the source repo
git add $DJANGO_PATH $DJANGOJS_PATH -f -v
# Check the git statuses of the translation source files
echo "GIT_STATUS=$(git status $DJANGO_PATH $DJANGOJS_PATH -s | wc -l)" >> $GITHUB_ENV
# Attempts to commit the translation source files if there is a difference
- name: git commit the translation source files
if: "${{ env.GIT_STATUS > 0 }}"
run: |
# commit the changes
git commit -m "chore: add extracted translation source files from ${{ matrix.repo }}"
# push changes to branch
git push
# js-translations:
# strategy:
# # using max-parallel to avoid git push/pull issues when running in parallel
# max-parallel: 1
# matrix:
# # repos missing extract_translations target in makefile:
# # * frontend-platform
# # * frontend-enterprise?
# # * frontend-app-learner-portal-enterprise
# # * frontend-build?
# # * frontend-app-learner-portal-programs
# # * frontend-component-cookie-policy-banner
# # * frontend-app-programs-dashboard
# # repos with errors running extract_translations
# # * frontend-template-application
# repo:
# - frontend-app-admin-portal
# - frontend-app-publisher
# - frontend-app-account
# - frontend-app-authn
# - frontend-app-communications
# - frontend-app-course-authoring
# - frontend-app-discussions
# - frontend-app-ecommerce
# - frontend-app-enterprise-public-catalog
# - frontend-app-gradebook
# - frontend-app-learner-dashboard
# - frontend-app-learner-record
# - frontend-app-learning
# - frontend-app-library-authoring
# - frontend-app-ora-grading
# - frontend-app-payment
# - frontend-app-profile
# - frontend-app-program-console
# - frontend-app-support-tools
# - frontend-component-footer
# - frontend-component-header
# - frontend-lib-content-components
# - frontend-lib-special-exams
# - paragon
# - studio-frontend
# runs-on: ubuntu-latest
# continue-on-error: true
# needs: [setup-branch, python-translations]
# steps:
# # Clones the openedx-translations repo
# - name: clone Zeit-Labs/openedx-translations
# uses: actions/checkout@v3
# with:
# ref: ${{ needs.setup-branch.outputs.branch }}
#
# # Clones the repository
# - name: clone Zeit-Labs/${{ matrix.repo }}
# uses: actions/checkout@v3
# with:
# repository: Zeit-Labs/${{ matrix.repo }}
# path: translations/${{ matrix.repo }}
#
# # Sets up node/npm
# - name: setup node
# uses: actions/setup-node@v3
# with:
# node-version: 16
#
# # Extracts the translation source files
# - name: extract translation source files
# run: |
# cd translations/${{ matrix.repo }}
# make extract_translations
# # git adds only the translation source files, found in src/i18n/transifex_input.json
# - name: git add the translation source files
# id: add-sources
# run: |
# # set identity
# git config --global user.email "[email protected]"
# git config --global user.name "edx-transifex-bot"
# # Change directory to translations/${{ matrix.repo }}
# cd translations/${{ matrix.repo }}
# # remove translations/${{ matrix.repo }}/.git so we don't commit a submodule
# rm -rf .git
# # find transifex_input.json
# TRANSIFEX_JSON_PATH=$(find . -name 'transifex_input.json')
# # stage the transifex_input.json file generated by make
# git add $TRANSIFEX_JSON_PATH -f -v
# # Check the git status of the translation source files
# echo "GIT_STATUS=$(git status $TRANSIFEX_JSON_PATH -s | wc -l)" >> $GITHUB_ENV
# # Attempts to commit the translation source files if there is a difference
# - name: git commit the translation source files
# if: "${{ env.GIT_STATUS > 0 }}"
# run: |
# # commit the changes
# git commit -m "chore: add extracted translation source files from ${{ matrix.repo }}"
# # push changes to branch
# git push
merge-translations:
runs-on: ubuntu-latest
needs: [setup-branch, python-translations] #, js-translations]
steps:
# Clones the openedx-translations repo on the automated/extract-translation-source-files-# branch
- name: clone Zeit-Labs/openedx-translations
uses: actions/checkout@v3
with:
ref: ${{ needs.setup-branch.outputs.branch }}
fetch-depth: 0
# Create a pull request
- name: create pull request
id: createPR
env:
# This token requires Write access to the openedx-translations repo
GITHUB_TOKEN: ${{ github.token }}
run: |
echo "COMMIT_COUNT=$(git rev-list HEAD ^origin/main | wc -l)" >> $GITHUB_ENV
echo "PR_URL=$(gh pr create -d --title 'chore: add updated translation source files' --body 'This PR is auto-generated by [extract-translation-source-files](https://github.com/Zeit-Labs/openedx-translations/blob/master/.github/workflows/extract-translation-source-files.yml).')" >> $GITHUB_ENV
# # Merges the pull request
# - name: merge pull request
# id: mergePR
# env:
# # This token requires Write access to the openedx-translations repo
# GITHUB_TOKEN: ${{ secrets.EDX_TRANSIFEX_BOT_GITHUB_TOKEN }}
# if: "${{ env.COMMIT_COUNT > 0 }}"
# run: gh pr merge ${{ env.PR_URL }} --merge --auto
#
# # Notify that branch did not merge because there were no new commits in the branch
# # and delete the branch now that it is unnecessary
# - name: notify of empty branch and delete branch
# if: (steps.mergePR.outcome == 'skipped')
# run: |
# echo "The branch was not merged because the branch had 0 commits."
# git push origin -d ${{ needs.setup-branch.outputs.branch }}