summaryrefslogtreecommitdiff
path: root/doc/HOWTO-RELEASE
blob: 2b07dca842ee87a39fc4d8d6fd86015a659b93e6 (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
How to make a new release of GNU Stow
=====================================

Prerequisite reading
--------------------

First read the official information for maintainers of GNU software:

  https://www.gnu.org/prep/maintain/

Release procedure
-----------------

- Ensure configure.ac contains the number of the new unreleased
  version.  This should follow Semantic Versioning as described at:

    http://semver.org/

- To make the following steps easier, set the $version shell variable
  to the same version number as above, e.g.

    version=$( tools/get-version ) && echo $version

- Ensure NEWS contains the latest changes, and that any new
  contributors have been added to THANKS.  If necessary, commit
  any additions:

    git commit -m "Prepare NEWS and THANKS for $version release"

- Check CPAN distribution will work via Module::Build:

    - Start from a clean slate:

        make distclean
        autoreconf -iv

    - Generate stow, chkstow, and lib/Stow.pm via:

        eval `perl -V:siteprefix`
        automake --add-missing
        ./configure --prefix=$siteprefix && make

      (N.B. the CPAN distribution will contain these files, whereas
      the GNU distribution will not.)

    - Make sure all the following commands all run successfully:

        perl Build.PL --prefix=/tmp/stow-test
        ./Build test
        ./Build install
        ./Build distcheck
        ./Build distmeta
        ./Build dist

    - Check META.yaml and META.json have the new version number.
      They already should if the final step of this document was
      carried out after the previous release was published, but
      if not:

        git commit -m "Bump version to $version"

- Ensure all changes are committed to git.

- Run make distcheck and ensure that everything looks good.
  It should generate the distribution files for you.

- Run the tests on various Perl versions via Docker:

    ./build-docker.sh
    ./test-docker.sh

  Obviously if there are any failures, they will need to be fixed
  first, and then repeat the above steps.

- At this point we have a release candidate.  Tag the current git HEAD
  with the new version number:

    git tag -s v$version -m "Release $version"

- Upload the resulting Stow-v7.8.9.tar.gz to CPAN via https://pause.perl.org/

- Wait until PAUSE has accepted the upload as a valid module.  If you
  are the maintainer of the module, you should receive two email
  notifications: a CPAN upload confirmation, and a PAUSE indexer
  report.  This provides some valuable final validation, as learnt the
  hard way during the non-release of 2.2.1.

- Push HEAD and tag to savannah and GitHub:

    git push savannah
    git push --tags savannah
    git push github
    git push --tags github

- Upload the new release to ftp.gnu.org.  This is easiest using gnupload:

    - git clone git://git.savannah.gnu.org/gnulib.git
    - Copy gnulib/build-aux/gnupload to somewhere on your $PATH
    - Run gnupload --to ftp.gnu.org:stow --symlink-regex stow-7.8.9.tar.*

- Regenerate the documentation for the website:

    # First check out gnulib repository via:
    # git clone git://git.savannah.gnu.org/gnulib.git

    # and stow-web CVS repository via the instructions here:
    # https://savannah.gnu.org/cvs/?group=stow

    # Set paths:
    stow_repo=/path/to/stow/git/repo
    stow_web_repo=/path/to/stow-web/CVS/working/dir
    gnulib_repo=/path/to/gnulib/git/repo

    cd $stow_repo
    export GENDOCS_TEMPLATE_DIR=$gnulib_repo/doc
    $gnulib_repo/util/gendocs.sh \
        -s doc/stow.texi \
        -o $stow_web_repo/manual \
        --email bug-stow@gnu.org \
        stow "GNU Stow manual"

    cd $stow_web_repo
    # Check that the changes look OK
    cvs diff
    # Then commit
    cvs commit -m "Update manual to v$version"

- Update the news section of stow.html in the stow-web CVS repository
  to mention the new release.

    cd $stow_web_repo
    # Check that the changes look OK
    cvs diff
    # Then commit
    cvs commit -m "Update home page to v$version"

- Send release announcements to

    - info-stow@gnu.org
    - stow-devel@gnu.org
    - info-gnu@gnu.org
    - https://savannah.gnu.org/news/?group=stow

  See http://www.gnu.org/prep/maintain/html_node/Announcements.html for
  more on making release announcements.

  Excerpts of NEWS can be formatted for inclusion in the email by
  selecting the relevant version subtree via M-x org-mark-element,
  minus the "* Changes in version x.y.z", running M-x
  org-export-dispatch, and exporting as plain text.

- Update the git repositories to the next expected version, so that anyone
  who builds from git gets a version of Stow which is higher than the release
  which was just cut:

    - Increment the patchlevel of the version number in configure.ac.

    - Run this again:

        version=$( tools/get-version ) && echo $version

    - Repeat the same procedure listed in the Module::Build section
      above, in order to update META.yaml and META.json.

    - git commit -m "Bump version to $version for development of next release"

    - git push savannah

    - git push github