- putty-website/licence.html
-Before tagging a release
-------------------------
+Preparing to make a release
+---------------------------
+
+Now that PuTTY is in git, a lot of the release preparation can be done
+in advance, in local checkouts, and not pushed until the actual
+process of _releasing_ it.
+
+To begin with, before dropping the tag, make sure everything is ready
+for it:
- First of all, go through the source (including the documentation),
and the website, and review anything tagged with a comment
particular, any headline features for the release should get a
workout with memory checking enabled!
-For a long time we got away with never checking the current version
-number in at all - all version numbers were passed into the build
-system on the compiler command line, and the _only_ place version
-numbers showed up in the source files was in the tag information.
-
-Unfortunately, those halcyon days are gone, and we do need the
-version number checked in in a couple of places. These must be updated
-_before_ tagging a new release.
+ - Double-check that we have removed anything tagged with a comment
+ containing the words XXX-REMOVE-BEFORE-RELEASE or
+ XXX-REVIEW-BEFORE-RELEASE. ('git grep XXX-RE' should only show up
+ hits in this file itself.)
-The file used to generate the Unix snapshot version numbers (which
-are <previousrelease>-<date> so that the Debian versioning system
-orders them correctly with respect to releases):
+ - Now update the version numbers and the transcripts in the docs, by
+ checking out the release branch and running
- - putty/LATEST.VER
+ make distclean
+ ./release.pl --set-version=X.YZ
-The Windows installer script (_four_ times, on consecutive lines):
+ Then check that the resulting automated git commit has updated the
+ version number in the following places:
- - putty/windows/putty.iss
+ * putty/LATEST.VER
+ * putty/doc/plink.but
+ * putty/doc/pscp.but
+ * putty/windows/putty.iss (four times, on consecutive lines)
-The Windows resource file (used to generate the binary bit of the
-VERSIONINFO resources -- the strings are supplied by the usual means):
+ and also check that it has reset the definition of 'Epoch' in
+ Buildscr.
- - putty/windows/version.rc2 (BASE_VERSION; NB, _comma_-separated)
+ - Make the release tag, pointing at the version-update commit we just
+ generated.
-It might also be worth going through the documentation looking for
-version numbers - we have a couple of transcripts showing the help
-text from the command-line tools, and it would be nice to ensure the
-whole transcripts (certainly including the version numbers) are up
-to date. Sometimes these are marked in between releases as `0.XX', so
-it's worth grepping for that too.
+ - If the release is on a branch (which I expect it generally will
+ be), merge that branch to master.
- - putty/doc/pscp.but
- - putty/doc/plink.but
- - putty/doc/psftp.but (in case it ever acquires a similar thing)
+ - Write a release announcement (basically a summary of the changes
+ since the last release). Squirrel it away in
+ atreus:src/putty-local/announce-<ver> in case it's needed again
+ within days of the release going out.
-The actual release procedure
-----------------------------
+ - Update the web site, in a local checkout.
+ + Adjust front page to say 'The latest version is <ver>'.
+ + Adjust front page to add a news item.
+ + Adjust Download page to say 'The latest release version (<ver>)'.
+ + Adjust Download page to update filenames of installer and Unix
+ tarball (both in the hrefs themselves and the link text).
+ + Check over the Download page and remove any mention of
+ pre-releases, if there were any before this release. Comment out
+ the big pre-release section at the top, and also adjust the
+ sections about source archives at the bottom.
+ + Do the same on the Docs page.
+ + Adjust header text on Changelog page. (That includes changing
+ `are new' in previous version to `were new'!)
+ + .htaccess has an individual redirect for each version number. Add
+ a new one.
-This is the procedure I (SGT) currently follow (or _should_ follow
-:-) when actually making a release, once I'm happy with the position
-of the tag.
+ - If there are any last-minute wishlist entries (e.g. security
+ vulnerabilities fixed in the new release), write entries for them
+ in a local checkout of putty-wishlist.
- - Double-check that we have removed anything tagged with a comment
- containing the words XXX-REMOVE-BEFORE-RELEASE or
- XXX-REVIEW-BEFORE-RELEASE.
+ - Update the wishlist mechanism for the new release. This can be done
+ without touching individual items by editing the @releases array in
+ control/bugs2html.
- - Write a release announcement (basically a summary of the changes
- since the last release). Squirrel it away in
- ixion:src/putty/local/announce-<ver> in case it's needed again
- within days of the release going out.
+ - Build the release, by checking out the release tag:
+ git checkout 0.XX
+ bob . RELEASE=0.XX
+ This should generate a basically valid release directory as
+ `build.out/putty', and provide link maps and sign.sh alongside that
+ in build.out.
- - Build the release: `bob putty-0.XX RELEASE=0.XX'. This should
- generate a basically valid release directory as
- `build.out/putty', and provide link maps and sign.sh alongside
- that in build.out.
+ - Double-check in build.log that the release was built from the right
+ git commit.
- Do a bit of checking that the release binaries basically work,
report their version numbers accurately, and so on. Test the
installer and the Unix source tarball.
- - Save the link maps. Currently I keep these on ixion, in
- src/putty/local/maps-<version>.
+ - Sign the release: in the `build.out' directory, type
+ sh sign.sh -r putty
+ and enter the passphrases a lot of times.
+
+The actual release procedure
+----------------------------
+
+Once all the above preparation is done and the release has been built
+locally, this is the procedure for putting it up on the web.
- - Sign the release: in the `build.out' directory, type `./sign.sh
- putty Releases', and enter the passphrases a lot of times.
+ - Save the link maps. Currently I keep these on atreus, in
+ src/putty-local/maps-<version>.
+ rsync -av maps-x86/ atreus:src/putty-local/maps-X.YZ
- - Now the whole release directory should be present and correct.
- Upload it to ixion:www/putty/<ver>.
+ - Upload the entire release directory to atreus:www/putty/<version>.
+ rsync -av putty/ atreus:www/putty/X.YZ
- - Do final checks on the release directory:
+ - Do final checks on the release directory in its new location:
+ verify all the signatures:
- for i in `find . -name '*.*SA'`; do case $i in *md5sums*) gpg --verify $i;; *) gpg --verify $i ${i%%.?SA};; esac; done
- + check the md5sums:
+ for i in `find . -name '*.gpg'`; do case $i in *sums*) gpg --verify $i;; *) gpg --verify $i ${i%%.gpg};; esac; done
+ + check the checksum files:
md5sum -c md5sums
+ sha1sum -c sha1sums
+ sha256sum -c sha256sums
+ sha512sum -c sha512sums
- - Having double-checked the release, copy it from ixion to
+ - Having double-checked the release, copy it from atreus to
chiark:ftp/putty-<ver> and to the:www/putty/<ver>.
+ rsync -av putty/ chiark:ftp/putty-X.YZ
+ rsync -av putty/ the:www/putty/X.YZ
- Check the permissions! Actually try downloading from the, to make
sure it really works.
- - Update the HTTP redirects.
- + Update the one at the:www/putty/htaccess which points the
- virtual subdir `latest' at the actual latest release dir. TEST
- THIS ONE - it's quite important.
- + ixion:www/putty/.htaccess has an individual redirect for each
- version number. Add a new one.
+ - Update the HTTP redirect at the:www/putty/htaccess which points the
+ virtual subdir `latest' at the actual latest release dir. TEST THIS
+ ONE - it's quite important.
- Update the FTP symlink (chiark:ftp/putty-latest -> putty-<ver>).
- - Update web site.
- + Adjust front page (`the latest version is <ver>').
- + Adjust Download page similarly.
- + Adjust filenames of installer and Unix tarball on links in
- Download page.
- + Adjust header text on Changelog page. (That includes changing
- `are new' in previous version to `were new'!)
-
- - Update the wishlist. This can be done without touching individual
- items by editing the @releases array in control/bugs2html.
-
- Check the Docs page links correctly to the release docs. (It
should do this automatically, owing to the `latest' HTTP
redirect.)
- - Check that the web server attaches the right content type to .HLP
- and .CNT files.
+ - Check that the web server attaches the right content type to .HLP,
+ .CNT and .CHM files, by downloading one of each and checking
+ they're all application/octet-stream.
+ for ext in hlp cnt chm; do curl -v http://the.earth.li/~sgtatham/putty/X.YZ/putty.$ext 2>&1 >/dev/null | grep Content-Type; done
- - Run webupdate, so that all the changes on ixion propagate to
+ - Run 'git push' in the website checkout, and then 'git pull' in
+ ~/www/putty on atreus to fetch the website updates.
+
+ - Push the changes to PuTTY itself. Something like:
+ git push origin master # update the master branch
+ git push origin --tags # should push the new release tag
+ git push origin :pre-0.XX # delete the pre-release branch
+
+ - Run 'git push' in the putty-wishlist checkout. Then run 'git pull'
+ in ~/pub/putty-wishlist on atreus, and update the wishlist web
+ pages with the commands
+ cd ~/pub/putty-wishlist/control
+ perl bugs2html
+
+ - Check over the web site to make sure all the changes to wishlist
+ and main web pages are present and correct.
+
+ - Run webupdate, so that all the changes on atreus propagate to
chiark. Important to do this _before_ announcing that the release
is available.
- - After running webupdate, run update-rsync on chiark and verify
- that the rsync mirror package correctly identifies the new
- version.
+ - After running webupdate, run update-rsync on chiark and verify that
+ the rsync mirror package (~/ftp/putty-website-mirror) contains a
+ subdirectory for the new version and mentions it in its .htaccess.
- Announce the release!
- + Mail the announcement to putty-announce.
- * Set a Reply-To on the mail so that people don't keep
- replying to my personal address.
+ + Construct a release announcement email whose message body is the
+ announcement written above, and which includes the following
+ headers:
+ * Reply-To: <putty@projects.tartarus.org>
+ * Subject: PuTTY X.YZ is released
+ + Mail that release announcement to
+ <putty-announce@lists.tartarus.org>.
+ Post it to comp.security.ssh.
+ Mention it in <TDHTT> on mono.
- - Relax (slightly).
-
-After the release
------------------
+ - Edit ~/adm/puttysnap.sh to disable pre-release builds, if they were
+ previously enabled.
-The following want doing some time soon after a release has been made:
-
- - If the release was made from a branch, make sure the version number
- on the _trunk_ is up to date in all the locations listed above, so
- that (e.g.) Unix snapshots come out right.
+ - Relax (slightly).