summaryrefslogtreecommitdiff
path: root/Admin/release-steps
blob: ec5ec91f5ea814861e1289e50de373a891b5795a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
-*- 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

  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-gnu-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-gnu-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-gnu-gettext libtextstyle "GNU libtextstyle")

  FIXME: Add a script to automate this process.

  Copy the resulting manual/ directories.  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/