| -*- outline -*- |
| Here are most of the steps we (maintainers) follow when making a release. |
| We assume that the following environment variables are set: |
| |
| GPG_KEY_ID - your gpg key ID |
| CURRENT_VERSION - the next release version |
| PREVIOUS_VERSION - the previous release version |
| |
| * Making a snapshot release |
| |
| ** Update 'gnulib' git submodule: |
| |
| ./gitsub.sh upgrade |
| git add gnulib |
| git commit -m 'Update to newest gnulib' |
| |
| ** Run these commands, in this order: |
| |
| # Forcing a specific version number, without having to set a git tag. |
| echo $CURRENT_VERSION > .tarball-version |
| |
| ./autogen.sh |
| ./configure |
| make |
| make dist |
| |
| # To prevent auto-updating '.version' file by GNUmakefile due to |
| # regenerated PO files, specify Makefile manually. |
| make -f Makefile distcheck |
| |
| Then you will get a distribution tarball: |
| |
| gettext-$CURRENT_VERSION-*.tar.gz |
| |
| If necessary, produce variants with higher compression (takes 7 minutes): |
| |
| gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | xz -c -e > gettext-$CURRENT_VERSION-*.tar.xz |
| gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION-*.tar.lz |
| |
| Rename it e.g. gettext-ss.tar.xz |
| |
| ** Verify that |
| gettext-runtime/po/POTFILES.in |
| gettext-tools/po/POTFILES.in |
| are complete. |
| |
| Test the snapshot tarball. If it seems good, then upload to |
| alpha.gnu.org: |
| |
| gnulib/build-aux/gnupload --to alpha.gnu.org:gettext \ |
| gettext-ss.tar.xz |
| |
| Notify translators and testers, by sending an email to: |
| |
| coordinator@translationproject.org |
| platform-testers@gnu.org |
| |
| ** Finally: |
| |
| rm -f .tarball-version |
| |
| * Making an official release |
| |
| ** Create a branch for release |
| |
| git checkout -b release-$CURRENT_VERSION |
| |
| or |
| |
| # Forcing a specific version number, without having to set a git tag. |
| echo $CURRENT_VERSION > .tarball-version |
| |
| ** Update files: |
| |
| - gettext-runtime/doc/matrix.texi |
| |
| Update with information from the Translation Project, by running |
| run.sh in gettext-runtime/doc/Admin/. Copy resulting matrix.texi |
| into gettext-runtime/doc/. Update the STATUS date in nls.texi. |
| |
| - gettext-runtime/intl/locale.alias |
| |
| Update with glibc's intl/locale.alias. |
| |
| - gettext-runtime/intl/localcharset.h |
| - gettext-runtime/intl/localcharset.c |
| |
| Update with libcharset inside libiconv. Check that |
| gnulib/lib/{localcharset.h,localcharset.c} agree with it, except |
| for copyright header changes. |
| |
| - gettext-runtime/po/Makefile.in.in |
| |
| Update Origin version. |
| |
| - gettext-runtime/m4/*.m4 |
| |
| Update version at the first line. |
| |
| - gettext-runtime/intl/libgnuintl.in.h |
| |
| Update LIBINTL_VERSION. |
| |
| - libtextstyle/version.sh |
| |
| Update VERSION_NUMBER and RELEASE_DATE. |
| |
| - gettext-tools/libgettextpo/gettext-po.in.h |
| |
| Update LIBGETTEXTPO_VERSION. |
| |
| - gettext-runtime/intl/Makefile.am |
| - libtextstyle/lib/Makefile.am |
| - gettext-tools/libgettextpo/Makefile.am |
| |
| Update -version-info arguments, according to libtool versioning |
| (info "(libtool) Updating version info"). |
| Preferrably using the gnulib/build-aux/libtool-next-version program. |
| Or manually, using these rules: |
| |
| * increment LTV_REVISION, |
| * if any interfaces (functions/variables/classes) have been removed |
| or changed [i.e. backwards compatibility has been broken], |
| increment LTV_CURRENT, set LTV_REVISION to 0, set LTV_AGE to 0. |
| * otherwise: |
| * if any interfaces (functions/variables/classes) have been added, |
| increment LTV_CURRENT, set LTV_REVISION to 0, increment LTV_AGE. |
| |
| - gettext-tools/emacs/po-mode.el |
| |
| Update po-mode-version-string, if there is any change. |
| |
| - gettext-runtime/src/envsubst.c |
| gettext-runtime/src/gettext.c |
| gettext-runtime/src/gettext.sh.in |
| gettext-runtime/src/ngettext.c |
| gettext-tools/misc/autopoint.in |
| gettext-tools/misc/convert-archive.in |
| gettext-tools/misc/gettextize.in |
| gettext-tools/src/cldr-plurals.c |
| gettext-tools/src/hostname.c |
| gettext-tools/src/msgattrib.c |
| gettext-tools/src/msgcat.c |
| gettext-tools/src/msgcmp.c |
| gettext-tools/src/msgcomm.c |
| gettext-tools/src/msgconv.c |
| gettext-tools/src/msgen.c |
| gettext-tools/src/msgexec.c |
| gettext-tools/src/msgfilter.c |
| gettext-tools/src/msgfmt.c |
| gettext-tools/src/msggrep.c |
| gettext-tools/src/msginit.c |
| gettext-tools/src/msgmerge.c |
| gettext-tools/src/msgunfmt.c |
| gettext-tools/src/msguniq.c |
| gettext-tools/src/recode-sr-latin.c |
| gettext-tools/src/urlget.c |
| gettext-tools/src/xgettext.c |
| |
| Update copyright years of the --version output of all programs. |
| |
| - NEWS |
| - gettext-runtime/libasprintf/NEWS |
| - gettext-runtime/NEWS |
| - libtextstyle/NEWS |
| |
| Add news entries if any. |
| |
| ** Update autopoint related files: |
| |
| - gettext-tools/configure.ac |
| |
| Update ARCHIVE_VERSION. |
| |
| - gettext-tools/misc/autopoint.in |
| |
| Update the 'case' statement around line 371 to include the latest release. |
| |
| ** If you got any translation updates, update translations: |
| |
| rsync -Lrtvz translationproject.org::tp/latest/gettext-runtime/ \ |
| gettext-runtime/po/new |
| Optionally merge: |
| cd gettext-runtime/po |
| make update-po |
| cd new |
| for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-runtime.pot; done |
| mv *.po ../ |
| cd ..; rm -rf new |
| |
| rsync -Lrtvz translationproject.org::tp/latest/gettext-tools/ \ |
| gettext-tools/po/new |
| Optionally merge: |
| cd gettext-tools/po |
| make update-po |
| cd new |
| for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-tools.pot; done |
| mv *.po ../ |
| cd ..; rm -rf new |
| |
| rsync -Lrtvz translationproject.org::tp/latest/gettext-examples/ \ |
| gettext-tools/examples/po/new |
| Optionally merge: |
| cd gettext-tools/examples/po |
| make update-po |
| cd new |
| for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-examples.pot; done |
| mv *.po ../ |
| cd ..; rm -rf new |
| |
| Adjust LINGUAS files if any of the languages has been added or |
| removed since the last release. Commit the changes. |
| |
| ** Create a release: |
| |
| git clean -xdff |
| git checkout . |
| |
| # Forcing a specific version number, without having to set a git tag. |
| echo $CURRENT_VERSION > .tarball-version |
| |
| ./autogen.sh |
| ./configure --disable-shared |
| make distcheck-hook |
| make |
| make distcheck |
| |
| This last "make distcheck" is supposed to fail: The tests autopoint-2, |
| autopoint-3 fail. |
| |
| Make 'autopoint' work in the new release: |
| |
| (cd gettext-tools/misc |
| ./add-to-archive ../../gettext-$CURRENT_VERSION.tar.gz) |
| |
| Update the examples: |
| |
| Update the AM_GNU_GETTEXT_VERSION argument in the gettext-tools/examples/hello-*/configure.ac |
| and gettext-tools/examples/hello-c++-kde/configure.in.in. |
| |
| gettext-tools/examples/hello-c/m4/Makefile.am |
| gettext-tools/examples/hello-c/autoclean.sh |
| gettext-tools/examples/hello-c-gnome/m4/Makefile.am |
| gettext-tools/examples/hello-c-gnome/autoclean.sh |
| gettext-tools/examples/hello-c-gnome3/m4/Makefile.am |
| gettext-tools/examples/hello-c-gnome3/autoclean.sh |
| gettext-tools/examples/hello-c++/m4/Makefile.am |
| gettext-tools/examples/hello-c++/autoclean.sh |
| gettext-tools/examples/hello-c++-kde/m4/Makefile.am |
| gettext-tools/examples/hello-c++-kde/autoclean.sh |
| gettext-tools/examples/hello-c++-gnome/m4/Makefile.am |
| gettext-tools/examples/hello-c++-gnome/autoclean.sh |
| gettext-tools/examples/hello-objc/m4/Makefile.am |
| gettext-tools/examples/hello-objc/autoclean.sh |
| gettext-tools/examples/hello-objc-gnome/m4/Makefile.am |
| gettext-tools/examples/hello-objc-gnome/autoclean.sh |
| |
| Update list of .m4 files (brought in by autopoint). |
| |
| Install the gettext package, so as to overwrite or override the locally |
| installed 'autopoint' with the newest version: |
| $ type autopoint |
| autopoint is SOME_PREFIX/bin/autopoint |
| $ make -k distclean |
| $ ./configure --prefix=SOME_PREFIX && make && make install |
| |
| Then check the build infrastructure of the examples by running |
| $ cd gettext-tools/examples |
| $ ./check-examples |
| |
| Finally really make the release tarball: |
| |
| # To prevent auto-updating '.version' file by GNUmakefile due to |
| # regenerated PO files, specify Makefile manually. |
| make -f Makefile distcheck |
| |
| If necessary, produce variants with higher compression (takes 7 minutes): |
| |
| gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | xz -c -e > gettext-$CURRENT_VERSION.tar.xz |
| gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION.tar.lz |
| |
| Add a git tag (an annotated tag, not a lightweight tag): |
| |
| git commit --allow-empty -m "Release $CURRENT_VERSION" |
| git tag -a -m "Release $CURRENT_VERSION" v$CURRENT_VERSION |
| |
| ** Upload tarballs: |
| |
| gnulib/build-aux/gnupload --to ftp.gnu.org:gettext \ |
| gettext-$CURRENT_VERSION.tar.{gz,xz,lz} |
| |
| ** Upload autopoint archive to alpha.gnu.org: |
| |
| This is needed to compile git master after the release (as |
| autogen.sh fetches the archive). |
| |
| xz -c -e < gettext-tools/misc/archive.dir.tar > archive.dir-$CURRENT_VERSION.tar.xz |
| gnulib/build-aux/gnupload \ |
| --to alpha.gnu.org:gettext \ |
| --symlink-regex archive.dir-$CURRENT_VERSION.tar.xz |
| |
| ** Finally: |
| |
| rm -f .tarball-version |
| |
| ** Merge release-$CURRENT_VERSION branch to master and push the changes to the |
| remote repository: |
| |
| git checkout master |
| git merge release-$CURRENT_VERSION |
| git push origin master |
| git push origin release-$CURRENT_VERSION |
| |
| ** Update the homepage on www.gnu.org: |
| |
| - Bump the version number in gettext.html. |
| - Update FAQ.html from gettext-tools/doc/FAQ.html. |
| |
| ** Regenerate the documentation for www.gnu.org: |
| |
| cp gnulib/build-aux/gendocs.sh gettext-tools/doc |
| cp gnulib/doc/gendocs_template gettext-tools/doc |
| cp -p gettext-runtime/doc/*.texi gettext-tools/doc |
| cp build-aux/texinfo.tex gettext-tools/doc |
| (cd gettext-tools/doc |
| LC_ALL=C ./gendocs.sh --email bug-gettext gettext "GNU gettext") |
| |
| cp gnulib/build-aux/gendocs.sh gettext-runtime/libasprintf |
| cp gnulib/doc/gendocs_template gettext-runtime/libasprintf |
| cp build-aux/texinfo.tex gettext-runtime/libasprintf |
| (cd gettext-runtime/libasprintf |
| LC_ALL=C ./gendocs.sh --email bug-gettext autosprintf "GNU autosprintf") |
| |
| cp gnulib/build-aux/gendocs.sh libtextstyle/doc |
| cp gnulib/doc/gendocs_template libtextstyle/doc |
| cp build-aux/texinfo.tex libtextstyle/doc |
| (cd libtextstyle/doc |
| LC_ALL=C ./gendocs.sh --email bug-gettext libtextstyle "GNU libtextstyle") |
| |
| Copy the resulting manual/ directories: |
| |
| (cd gettext-tools/doc/manual && tar cf - .) | (cd ../www.gnu.org/gettext/manual && tar xf -) |
| (cd gettext-runtime/libasprintf/manual && tar cf - .) | (cd ../www.gnu.org/gettext/libasprintf/manual && tar xf -) |
| (cd libtextstyle/doc/manual && tar cf - .) | (cd ../www.gnu.org/gettext/libtextstyle/manual && tar xf -) |
| |
| FIXME: Add a script to automate this process. |
| |
| Commit the resulting manual/ directories in CVS, and for every removed |
| HTML file (that corresponds to a deleted node) add a line to the .symlinks |
| file in the same directory. |
| |
| ** Announce on info-gnu |
| |
| The announcement template can be generated with: |
| |
| gnulib/build-aux/announce-gen \ |
| --release-type stable \ |
| --package-name gettext \ |
| --previous-version $PREVIOUS_VERSION \ |
| --current-version $CURRENT_VERSION \ |
| --gpg-key-id $GPG_KEY_ID \ |
| --url-directory https://ftp.gnu.org/gnu/gettext \ |
| --bootstrap-tools=autoconf,automake,libtool,bison,gnulib \ |
| --gnulib-version=$(cd gnulib && git describe) |
| |
| * Submit a News entry on https://savannah.gnu.org/projects/gettext/ |