diff --git a/roles/build-releasenotes/tasks/main.yaml b/roles/build-releasenotes/tasks/main.yaml index 0161cb77..517fc9f7 100644 --- a/roles/build-releasenotes/tasks/main.yaml +++ b/roles/build-releasenotes/tasks/main.yaml @@ -36,92 +36,88 @@ export UPPER_CONSTRAINTS_FILE=$HOME/src/git.openstack.org/openstack/requirements/upper-constraints.txt fi - if [ ! -e ${DIRECTORY}/source/locale/ ]; then - echo "No translations found, only building normal release notes" - $script_path/run-tox.sh releasenotes - exit 0 - fi - - # 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 <> ${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 + if [ -e ${DIRECTORY}/source/locale/ ]; then + # 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 - language=$(basename $locale) - echo "Building $language translation" + REFERENCES=`mktemp` + trap "rm -f -- '$REFERENCES'" EXIT - # Prepare all translation resources - for pot in ${DIRECTORY}/source/locale/*.pot ; do - # Get filename - resname=$(basename ${pot} .pot) + # Extract translations + tox -e venv -- sphinx-build -b gettext \ + -d ${DIRECTORY}/build/doctrees.gettext \ + ${DIRECTORY}/source/ \ + ${DIRECTORY}/source/locale/ - # 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 + # Add links for translations to index file + cat <> ${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 - # Build translated document - tox -e venv -- sphinx-build -b html -D language=${language} \ - -d "${DIRECTORY}/build/doctrees.${language}" \ - ${DIRECTORY}/source/ ${DIRECTORY}/build/html/${language} + # 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 - # 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 + # Remove newly created pot files + rm -f ${DIRECTORY}/source/locale/*.pot + fi # Now build releasenotes with reference to translations $script_path/run-tox.sh releasenotes