1-*- outline -*- 2Here are most of the steps we (maintainers) follow when making a release. 3We assume that the following environment variables are set: 4 5 GPG_KEY_ID - your gpg key ID 6 CURRENT_VERSION - the next release version 7 PREVIOUS_VERSION - the previous release version 8 9* Making a snapshot release 10 11** Update 'gnulib' git submodule: 12 13 ./gitsub.sh upgrade 14 git add gnulib 15 git commit -m 'Update to newest gnulib' 16 17** Run these commands, in this order: 18 19 # Forcing a specific version number, without having to set a git tag. 20 echo $CURRENT_VERSION > .tarball-version 21 22 ./autogen.sh 23 ./configure 24 make 25 make dist 26 27 # To prevent auto-updating '.version' file by GNUmakefile due to 28 # regenerated PO files, specify Makefile manually. 29 make -f Makefile distcheck 30 31 Then you will get a distribution tarball: 32 33 gettext-$CURRENT_VERSION-*.tar.gz 34 35 If necessary, produce variants with higher compression (takes 7 minutes): 36 37 gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | xz -c -e > gettext-$CURRENT_VERSION-*.tar.xz 38 gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION-*.tar.lz 39 40 Rename it e.g. gettext-ss.tar.xz 41 42** Verify that 43 gettext-runtime/po/POTFILES.in 44 gettext-tools/po/POTFILES.in 45 are complete. 46 47 Test the snapshot tarball. If it seems good, then upload to 48 alpha.gnu.org: 49 50 gnulib/build-aux/gnupload --to alpha.gnu.org:gettext \ 51 gettext-ss.tar.xz 52 53 Notify translators and testers, by sending an email to: 54 55 coordinator@translationproject.org 56 platform-testers@gnu.org 57 58** Finally: 59 60 rm -f .tarball-version 61 62* Making an official release 63 64** Create a branch for release 65 66 git checkout -b release-$CURRENT_VERSION 67 68 or 69 70 # Forcing a specific version number, without having to set a git tag. 71 echo $CURRENT_VERSION > .tarball-version 72 73** Update files: 74 75 - gettext-runtime/doc/matrix.texi 76 77 Update with information from the Translation Project, by running 78 run.sh in gettext-runtime/doc/Admin/. Copy resulting matrix.texi 79 into gettext-runtime/doc/. Update the STATUS date in nls.texi. 80 81 - gettext-runtime/intl/locale.alias 82 83 Update with glibc's intl/locale.alias. 84 85 - gettext-runtime/intl/localcharset.h 86 - gettext-runtime/intl/localcharset.c 87 88 Update with libcharset inside libiconv. Check that 89 gnulib/lib/{localcharset.h,localcharset.c} agree with it, except 90 for copyright header changes. 91 92 - gettext-runtime/po/Makefile.in.in 93 94 Update Origin version. 95 96 - gettext-runtime/m4/*.m4 97 98 Update version at the first line. 99 100 - gettext-runtime/intl/libgnuintl.in.h 101 102 Update LIBINTL_VERSION. 103 104 - libtextstyle/version.sh 105 106 Update VERSION_NUMBER and RELEASE_DATE. 107 108 - gettext-tools/libgettextpo/gettext-po.in.h 109 110 Update LIBGETTEXTPO_VERSION. 111 112 - gettext-runtime/intl/Makefile.am 113 - libtextstyle/lib/Makefile.am 114 - gettext-tools/libgettextpo/Makefile.am 115 116 Update -version-info arguments, according to libtool versioning 117 (info "(libtool) Updating version info"). 118 Preferrably using the gnulib/build-aux/libtool-next-version program. 119 Or manually, using these rules: 120 121 * increment LTV_REVISION, 122 * if any interfaces (functions/variables/classes) have been removed 123 or changed [i.e. backwards compatibility has been broken], 124 increment LTV_CURRENT, set LTV_REVISION to 0, set LTV_AGE to 0. 125 * otherwise: 126 * if any interfaces (functions/variables/classes) have been added, 127 increment LTV_CURRENT, set LTV_REVISION to 0, increment LTV_AGE. 128 129 - gettext-tools/emacs/po-mode.el 130 131 Update po-mode-version-string, if there is any change. 132 133 - gettext-runtime/src/envsubst.c 134 gettext-runtime/src/gettext.c 135 gettext-runtime/src/gettext.sh.in 136 gettext-runtime/src/ngettext.c 137 gettext-tools/misc/autopoint.in 138 gettext-tools/misc/convert-archive.in 139 gettext-tools/misc/gettextize.in 140 gettext-tools/src/cldr-plurals.c 141 gettext-tools/src/hostname.c 142 gettext-tools/src/msgattrib.c 143 gettext-tools/src/msgcat.c 144 gettext-tools/src/msgcmp.c 145 gettext-tools/src/msgcomm.c 146 gettext-tools/src/msgconv.c 147 gettext-tools/src/msgen.c 148 gettext-tools/src/msgexec.c 149 gettext-tools/src/msgfilter.c 150 gettext-tools/src/msgfmt.c 151 gettext-tools/src/msggrep.c 152 gettext-tools/src/msginit.c 153 gettext-tools/src/msgmerge.c 154 gettext-tools/src/msgunfmt.c 155 gettext-tools/src/msguniq.c 156 gettext-tools/src/recode-sr-latin.c 157 gettext-tools/src/urlget.c 158 gettext-tools/src/xgettext.c 159 160 Update copyright years of the --version output of all programs. 161 162 - NEWS 163 - gettext-runtime/libasprintf/NEWS 164 - gettext-runtime/NEWS 165 - libtextstyle/NEWS 166 167 Add news entries if any. 168 169** Update autopoint related files: 170 171 - gettext-tools/configure.ac 172 173 Update ARCHIVE_VERSION. 174 175 - gettext-tools/misc/autopoint.in 176 177 Update the 'case' statement around line 371 to include the latest release. 178 179** If you got any translation updates, update translations: 180 181 rsync -Lrtvz translationproject.org::tp/latest/gettext-runtime/ \ 182 gettext-runtime/po/new 183 Optionally merge: 184 cd gettext-runtime/po 185 make update-po 186 cd new 187 for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-runtime.pot; done 188 mv *.po ../ 189 cd ..; rm -rf new 190 191 rsync -Lrtvz translationproject.org::tp/latest/gettext-tools/ \ 192 gettext-tools/po/new 193 Optionally merge: 194 cd gettext-tools/po 195 make update-po 196 cd new 197 for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-tools.pot; done 198 mv *.po ../ 199 cd ..; rm -rf new 200 201 rsync -Lrtvz translationproject.org::tp/latest/gettext-examples/ \ 202 gettext-tools/examples/po/new 203 Optionally merge: 204 cd gettext-tools/examples/po 205 make update-po 206 cd new 207 for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-examples.pot; done 208 mv *.po ../ 209 cd ..; rm -rf new 210 211 Adjust LINGUAS files if any of the languages has been added or 212 removed since the last release. Commit the changes. 213 214** Create a release: 215 216 git clean -xdff 217 git checkout . 218 219 # Forcing a specific version number, without having to set a git tag. 220 echo $CURRENT_VERSION > .tarball-version 221 222 ./autogen.sh 223 ./configure --disable-shared 224 make distcheck-hook 225 make 226 make distcheck 227 228 This last "make distcheck" is supposed to fail: The tests autopoint-2, 229 autopoint-3 fail. 230 231 Make 'autopoint' work in the new release: 232 233 (cd gettext-tools/misc 234 ./add-to-archive ../../gettext-$CURRENT_VERSION.tar.gz) 235 236 Update the examples: 237 238 Update the AM_GNU_GETTEXT_VERSION argument in the gettext-tools/examples/hello-*/configure.ac 239 and gettext-tools/examples/hello-c++-kde/configure.in.in. 240 241 gettext-tools/examples/hello-c/m4/Makefile.am 242 gettext-tools/examples/hello-c/autoclean.sh 243 gettext-tools/examples/hello-c-gnome/m4/Makefile.am 244 gettext-tools/examples/hello-c-gnome/autoclean.sh 245 gettext-tools/examples/hello-c-gnome3/m4/Makefile.am 246 gettext-tools/examples/hello-c-gnome3/autoclean.sh 247 gettext-tools/examples/hello-c++/m4/Makefile.am 248 gettext-tools/examples/hello-c++/autoclean.sh 249 gettext-tools/examples/hello-c++-kde/m4/Makefile.am 250 gettext-tools/examples/hello-c++-kde/autoclean.sh 251 gettext-tools/examples/hello-c++-gnome/m4/Makefile.am 252 gettext-tools/examples/hello-c++-gnome/autoclean.sh 253 gettext-tools/examples/hello-objc/m4/Makefile.am 254 gettext-tools/examples/hello-objc/autoclean.sh 255 gettext-tools/examples/hello-objc-gnome/m4/Makefile.am 256 gettext-tools/examples/hello-objc-gnome/autoclean.sh 257 258 Update list of .m4 files (brought in by autopoint). 259 260 Install the gettext package, so as to overwrite or override the locally 261 installed 'autopoint' with the newest version: 262 $ type autopoint 263 autopoint is SOME_PREFIX/bin/autopoint 264 $ make -k distclean 265 $ ./configure --prefix=SOME_PREFIX && make && make install 266 267 Then check the build infrastructure of the examples by running 268 $ cd gettext-tools/examples 269 $ ./check-examples 270 271 Finally really make the release tarball: 272 273 # To prevent auto-updating '.version' file by GNUmakefile due to 274 # regenerated PO files, specify Makefile manually. 275 make -f Makefile distcheck 276 277 If necessary, produce variants with higher compression (takes 7 minutes): 278 279 gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | xz -c -e > gettext-$CURRENT_VERSION.tar.xz 280 gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION.tar.lz 281 282 Add a git tag (an annotated tag, not a lightweight tag): 283 284 git commit --allow-empty -m "Release $CURRENT_VERSION" 285 git tag -a -m "Release $CURRENT_VERSION" v$CURRENT_VERSION 286 287** Upload tarballs: 288 289 gnulib/build-aux/gnupload --to ftp.gnu.org:gettext \ 290 gettext-$CURRENT_VERSION.tar.{gz,xz,lz} 291 292** Upload autopoint archive to alpha.gnu.org: 293 294 This is needed to compile git master after the release (as 295 autogen.sh fetches the archive). 296 297 xz -c -e < gettext-tools/misc/archive.dir.tar > archive.dir-$CURRENT_VERSION.tar.xz 298 gnulib/build-aux/gnupload \ 299 --to alpha.gnu.org:gettext \ 300 --symlink-regex archive.dir-$CURRENT_VERSION.tar.xz 301 302** Finally: 303 304 rm -f .tarball-version 305 306** Merge release-$CURRENT_VERSION branch to master and push the changes to the 307 remote repository: 308 309 git checkout master 310 git merge release-$CURRENT_VERSION 311 git push origin master 312 git push origin release-$CURRENT_VERSION 313 314** Update the homepage on www.gnu.org: 315 316 - Bump the version number in gettext.html. 317 - Update FAQ.html from gettext-tools/doc/FAQ.html. 318 319** Regenerate the documentation for www.gnu.org: 320 321 cp gnulib/build-aux/gendocs.sh gettext-tools/doc 322 cp gnulib/doc/gendocs_template gettext-tools/doc 323 cp -p gettext-runtime/doc/*.texi gettext-tools/doc 324 cp build-aux/texinfo.tex gettext-tools/doc 325 (cd gettext-tools/doc 326 LC_ALL=C ./gendocs.sh --email bug-gnu-gettext gettext "GNU gettext") 327 328 cp gnulib/build-aux/gendocs.sh gettext-runtime/libasprintf 329 cp gnulib/doc/gendocs_template gettext-runtime/libasprintf 330 cp build-aux/texinfo.tex gettext-runtime/libasprintf 331 (cd gettext-runtime/libasprintf 332 LC_ALL=C ./gendocs.sh --email bug-gnu-gettext autosprintf "GNU autosprintf") 333 334 cp gnulib/build-aux/gendocs.sh libtextstyle/doc 335 cp gnulib/doc/gendocs_template libtextstyle/doc 336 cp build-aux/texinfo.tex libtextstyle/doc 337 (cd libtextstyle/doc 338 LC_ALL=C ./gendocs.sh --email bug-gnu-gettext libtextstyle "GNU libtextstyle") 339 340 FIXME: Add a script to automate this process. 341 342 Copy the resulting manual/ directories. Commit the resulting 343 manual/ directories in CVS, and for every removed HTML file (that 344 corresponds to a deleted node) add a line to the .symlinks file in 345 the same directory. 346 347** Announce on info-gnu 348 349 The announcement template can be generated with: 350 351 gnulib/build-aux/announce-gen \ 352 --release-type stable \ 353 --package-name gettext \ 354 --previous-version $PREVIOUS_VERSION \ 355 --current-version $CURRENT_VERSION \ 356 --gpg-key-id $GPG_KEY_ID \ 357 --url-directory https://ftp.gnu.org/gnu/gettext \ 358 --bootstrap-tools=autoconf,automake,libtool,bison,gnulib \ 359 --gnulib-version=$(cd gnulib && git describe) 360 361* Submit a News entry on https://savannah.gnu.org/projects/gettext/ 362