b493ca62dd
Sphinx jobs and reno jobs need basically the same thing for dependencies. So make a new role, ensure-sphinx, which is parameterizable enough that it can be used by both reno and sphinx jobs. Make build jobs for both releasenotes and sphinx docs, as both of these things are perfectly valid things to do in both OpenStack and non-OpenStack contexts. We'll add an openstack specific job in openstack-zuul-jobs that uses these as parents but adds the requirements repo and constraints file settings. Some of the pip commands here can be improved once https://github.com/ansible/ansible/pull/33098 lands and is released, which would allow specifying --user and -c as parameters to the pip module. Change-Id: Idd7caf7d88b56d61872906027b4ce7d743572ded Needed-By: I57de14580f39b9e1c11a587b51b44b61b02c84da
130 lines
4.5 KiB
YAML
130 lines
4.5 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"
|
|
get_checksum: false
|
|
get_mime: false
|
|
get_md5: false
|
|
register: translations
|
|
|
|
- name: Prepare release note translations
|
|
shell:
|
|
chdir: '{{ zuul_work_dir }}'
|
|
executable: /bin/bash
|
|
cmd: |
|
|
set -e
|
|
set -x
|
|
|
|
DOCNAME=releasenotes
|
|
DIRECTORY=releasenotes
|
|
|
|
source {{ zuul_work_virtualenv }}/bin/activate
|
|
|
|
# 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
|
|
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
|
|
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: Run releasenotes sphinx build
|
|
shell:
|
|
executable: /bin/bash
|
|
chdir: '{{ zuul_work_dir }}'
|
|
cmd: |
|
|
{{ zuul_work_virtualenv }}/bin/sphinx-build -a -E -W \
|
|
-d releasenotes/build/doctrees \
|
|
-b html releasenotes/source releasenotes/build/html
|