
At the moment, the tox_envlist is defined inside the include_role for tox as releasenotes. This means that other roles which run beforehand such as tox-siblings will use the default value of venv instead which isn't always defined. This patch makes the change to make that variable defined in the job which means that all other roles will reference the correct tox envlist in the entire job run. Change-Id: I0323f8f1bccf720268d947b8e1dcb6c5f8b26dfa
120 lines
4.2 KiB
YAML
120 lines
4.2 KiB
YAML
# TODO(mordred) Put the translations logic into a sphinx plugin?
|
|
- name: Check if translations exist for release notes
|
|
stat:
|
|
path: "{{ zuul_work_dir }}/releasenotes/source/locale"
|
|
register: translations
|
|
|
|
- name: Prepare release note translations
|
|
shell:
|
|
chdir: '{{ zuul_work_dir }}'
|
|
executable: /bin/bash
|
|
cmd: |
|
|
set -e
|
|
set -x
|
|
|
|
DOCNAME=releasenotes
|
|
DIRECTORY=releasenotes
|
|
|
|
# Mapping of language codes to language names
|
|
declare -A LANG_NAME=(
|
|
["de"]="German"
|
|
["en_AU"]="English (Australian)"
|
|
["en_GB"]="English (United Kingdom)"
|
|
["es"]="Spanish"
|
|
["fr"]="French"
|
|
["id"]="Indonesian"
|
|
["it"]="Italian"
|
|
["ja"]="Japanese"
|
|
["ko_KR"]="Korean (South Korea)"
|
|
["pt_BR"]="Portuguese (Brazil)"
|
|
["ru"]="Russian"
|
|
["tr_TR"]="Turkish (Turkey)"
|
|
["zh_CN"]="Chinese (China)"
|
|
)
|
|
|
|
# Check that locale_dirs is really set, otherwise translations
|
|
# will not work.
|
|
if ! grep -q -E '^locale_dirs *=' $DIRECTORY/source/conf.py; then
|
|
echo "Translations exist and locale_dirs missing in source/conf.py"
|
|
exit 1
|
|
fi
|
|
|
|
REFERENCES=`mktemp`
|
|
trap "rm -f -- '$REFERENCES'" EXIT
|
|
|
|
# Extract translations
|
|
tox -e venv -- sphinx-build -b gettext \
|
|
-d ${DIRECTORY}/build/doctrees.gettext \
|
|
${DIRECTORY}/source/ \
|
|
${DIRECTORY}/source/locale/
|
|
|
|
# Add links for translations to index file
|
|
cat <<EOF >> ${REFERENCES}
|
|
|
|
Translated Release Notes
|
|
========================
|
|
|
|
EOF
|
|
|
|
# Check all language translation resources
|
|
for locale in `find ${DIRECTORY}/source/locale/ -maxdepth 1 -type d` ; do
|
|
# Skip if it is not a valid language translation resource.
|
|
if [ ! -e ${locale}/LC_MESSAGES/${DOCNAME}.po ]; then
|
|
continue
|
|
fi
|
|
language=$(basename $locale)
|
|
|
|
echo "Building $language translation"
|
|
|
|
# Prepare all translation resources
|
|
for pot in ${DIRECTORY}/source/locale/*.pot ; do
|
|
# Get filename
|
|
resname=$(basename ${pot} .pot)
|
|
|
|
# Merge all translation resources. Note this is done the same
|
|
# way as done in common_translation_update.sh where we merge
|
|
# all strings together in a single file.
|
|
msgmerge --silent -o \
|
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.po \
|
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po \
|
|
${pot}
|
|
# Compile all translation resources
|
|
msgfmt -o \
|
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.mo \
|
|
${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${resname}.po
|
|
done
|
|
|
|
# Build translated document
|
|
tox -e venv -- sphinx-build -b html -D language=${language} \
|
|
-d "${DIRECTORY}/build/doctrees.${language}" \
|
|
${DIRECTORY}/source/ ${DIRECTORY}/build/html/${language}
|
|
|
|
# Reference translated document from index file
|
|
if [ ${LANG_NAME["${language}"]+_} ] ; then
|
|
name=${LANG_NAME["${language}"]}
|
|
name+=" (${language})"
|
|
echo "* \`$name <${language}/index.html>\`__" >> ${REFERENCES}
|
|
else
|
|
echo "* \`${language} <${language}/index.html>\`__" >> ${REFERENCES}
|
|
fi
|
|
|
|
# Remove newly created files
|
|
git clean -f -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/*.po
|
|
git clean -f -x -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/*.mo
|
|
# revert changes to po file
|
|
git reset -q ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po
|
|
git checkout -- ${DIRECTORY}/source/locale/${language}/LC_MESSAGES/${DOCNAME}.po
|
|
done
|
|
|
|
# Now append our references to the index file. We cannot do this
|
|
# earlier since the sphinx commands will read this file.
|
|
cat ${REFERENCES} >> ${DIRECTORY}/source/index.rst
|
|
|
|
# Remove newly created pot files
|
|
rm -f ${DIRECTORY}/source/locale/*.pot
|
|
when: translations.stat.exists == True
|
|
|
|
- name: Build release notes
|
|
include_role:
|
|
name: tox
|