From 65ccea6bc91db27223fef6a3285ca8617d3c921d Mon Sep 17 00:00:00 2001 From: Mohammed Naser Date: Wed, 4 Oct 2017 13:10:48 -0400 Subject: [PATCH] Refactor releasenote job to have one path for tox building The past bash code had two paths for building release notes, it makes it much harder to refactor and debug (for example, the result was being moved only if the release notes had translations). Change-Id: I45272750fc734566d08329d915fbedc10b9eed65 --- roles/build-releasenotes/tasks/main.yaml | 154 +++++++++++------------ 1 file changed, 75 insertions(+), 79 deletions(-) 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