blob: 85d0084294a3c15b2bd821f82fc08c20c657e948 [file]
SPAMASSASSIN DEVELOPMENT SNAPSHOT PROCEDURE
===========================================
- cd to the directory for the codebase you want the devel tree to
come from
ssh people.apache.org
cd [checkedoutdir]
- ensure the required code and data is available for the build scripts:
$HOME/sabuildtools
All can be copied (or symlinked) from ~jm on people.apache.org if
required.
- ensure your PATH is correct, with the right perl FIRST in the path:
PATH=$HOME/sabuildtools/perl584/bin:$HOME/sabuildtools/bin:$PATH
- run "./build/update_devel" to build the tar.gz files
- by default, they're written to ~/site/devel/ .
Copy them to wherever you want, yourself.
SPAMASSASSIN RELEASE PROCEDURE
==============================
- First off, log in to people.apache.org for some preliminary tool
checks.
ssh people.apache.org
- ensure the required code and data is available for the build scripts:
see above.
- ensure your PATH is correct, with the right perl FIRST in the path:
PATH=$HOME/sabuildtools/perl584/bin:$HOME/sabuildtools/bin:$PATH
- In your own, writable, checkout (this may be on another host instead
of people.apache.org, such as your home machine):
Run "svn status" to ensure you're building/releasing from a pristine
checkout:
cd [checkedoutdir]
svn status
The output should look like this:
X rulesrc
Performing status on external item at 'rulesrc'
(no "M" or "C" files; any files marked "M" have been locally modified,
and should be "svn revert"ed before you continue.)
- edit lib/Mail/SpamAssassin.pm and comment the $IS_DEVEL_BUILD
line. Ensure the correct version number is present in $VERSION
and $EXTRA_VERSION.
Prereleases: formatted like this: "pre4" -- in $EXTRA_VERSION, and
$IS_DEVEL_BUILD is left as 1 instead of commented. When referred to in
full, it's "3.1.0-pre4".
Release candidates: formatted like this: "rc2" -- in $EXTRA_VERSION, and
$IS_DEVEL_BUILD is commented. When referred to in full, it's "3.1.0-rc2".
[NOTE: when editing files in these instructions, you may have to
use another checkout somewhere else, check in the changes there,
then 'svn update' in the release account -- since I think it
builds from a read-only checkout.]
- check "spamassassin.spec" has the right version number in the
"%define real_version" line. Fix if not.
- Ensure the new version number takes hold:
make clean ; perl Makefile.PL < /dev/null ; make
./spamassassin -L -t < sample-nonspam.txt | grep X-Spam-
Verify that the X-Spam-* headers use the correct version string,
without an SVN revision number (those are only for dev builds).
- create the Changes file. Do this step on your own checkout, as
the release checkout is read-only. There are two options here:
- For releases on a maintainance branch (e.g. 3.0.1, .2, etc.):
TZ=UTC svn log --non-interactive --stop-on-copy > Changes
This will output all of the changes since the .0 release in the
current branch (the last copy -- note, if a copy was done
afterwards (move between repositories, etc, you'll need to
modify that command).
- For releases on the trunk (e.g. a .0 release):
TZ=UTC svn log -r HEAD:233108 --non-interactive > Changes
r233108 was the start of 3.2.0, just after the 3.1.0 branch was
created; r46030 was the start of the 3.1.0 work (created 3.0 branch);
replace with the correct rev number for the point you want to start at
if different.
- run "make distcheck" to ensure all files are included in the
distribution that should be, and to ensure all files that are listed
in the MANIFEST also exist in SVN.
make distcheck
- run "make disttest" to ensure all tests pass once the distribution
is fully packaged. (this'll take a minute or two.)
make disttest < /dev/null
- Check in the updated Changes file, and SpamAssassin.pm.
svn commit -m "preparing to release X.Y.Z"
(If you are privately preparing a security release, and don't wish to
perform commits to public SVN repos, you can defer this step until
later.)
- SVN tag the release files. This is done using "svn copy".
For a maintainance release (x.y.1, x.y.2):
repo=https://svn.apache.org/repos/asf/spamassassin
svn delete -m "replaced" $repo/tags/spamassassin_release_3_1_7
svn copy -m "creating tag for release 3.1.7" \
$repo/branches/3.1 \
$repo/tags/spamassassin_release_3_1_7
For a trunk release (x.y.0):
repo=https://svn.apache.org/repos/asf/spamassassin
svn delete -m "replaced" $repo/tags/spamassassin_release_3_0_0
svn copy -m "creating tag for release 3.0.0" \
$repo/trunk \
$repo/tags/spamassassin_release_3_0_0
For a trunk pre-release (x.y.0-preZ):
repo=https://svn.apache.org/repos/asf/spamassassin
svn delete -m "replaced" $repo/tags/spamassassin_release_3_2_0_pre_2
svn copy -m "creating tag for release 3.2.0-pre2" \
$repo/trunk \
$repo/tags/spamassassin_release_3_2_0_pre_2
This will do a completely server-side tagging (which is the same as
a branch really) of whatever the latest branch revision to be the new
base of the tag release.
(If you are privately preparing a security release, and don't wish to
perform commits to public SVN repos, you can defer this step until
later.)
- In your checkout on people.apache.org (may be read-only):
Check out the code from the tag you just made:
repo=https://svn.apache.org/repos/asf/spamassassin
rm -rf ~/relbuild
svn co $repo/tags/spamassassin_release_3_2_0_pre_2 ~/relbuild
cd ~/relbuild
(If you are privately preparing a security release, you will need
to ensure that the code in this build directory matches up using
some other mechanism, since SVN is public.)
- run "./build/update_stable" to build the tar.gz files.
PATH=$HOME/sabuildtools/perl584/bin:$HOME/sabuildtools/bin:$PATH
./build/update_stable
if you get "gpg-agent" errors about not connecting to the PIN entry
module, you didn't update your $PATH.
- take a copy of the MD5sum line output.
- test the tar.gz and zip files! redo until they work!! ;)
- Write the release announcement mail! This is a simple matter of copying
the previous release's announcement, updating the version numbers and
links, fixing the MD5 and SHA1 checksums in this mail, and summarising
the important changes from the Changes file.
cp build/announcements/3.1.7.txt build/announcements/3.1.8.txt
svn add !$
vi !$
- (for any rc, prerelease, or full release) Place the tarballs in a
discreet location (discreet means not linked from the "downloads" page
of the website, but included in the vote mail) and request a vote on the
development mailing list to make the release. Post the URL,
md5sums/sha1sums, and proposed release announcement mail to the dev
list. The default location -- ~/public_html/devel/ , or
http://people.apache.org/~jm/devel/ , qualifies as "discreet".
While doing this, also upload a copy of the proposed release
announcement to the website:
version=3.2.4
cp build/announcements/$version.txt ~/public_html/devel/PROPOSED-$version.txt
Pre-releases and RCs require just lazy consensus -- ie. no objections.
- (for a full release) You need 3 +1's from PMC members. The release
manager (that's you) may vote as well. Once there are three or more +1
votes, you may proceed.
- If you've been doing some steps in private, for a security release,
now's the time to perform them publicly; tagging etc.
- Edit lib/Mail/SpamAssassin.pm, and uncomment the $IS_DEVEL_BUILD line.
SVN commit it (and the release announcement file from above, if
you made one):
svn commit -m "X.Y.Z RELEASED"
- [X.Y.0 RELEASES ONLY]: Now, start the new development codebase. For
minor updates of a 2.x tree (e.g. 2.x.1, 2.x.2), you don't need to
branch; for major updates (2.x.0) you need to create a new development
branch, off the trunk.
repo=https://svn.apache.org/repos/asf/spamassassin
svn copy $repo/tags/spamassassin_release_3_1_0 \
$repo/branches/3.1
"trunk" is SVN's concept of head. Typically, our branches are named
for their minor version number. In the example above, b3_1_0 is the
branch for the stable 3.1.x releases.
- In the new development codeline, edit lib/Mail/SpamAssassin.pm
and bump the $VERSION line to the correct version.
- In the new development codeline, edit spamassassin.spec, and bump the
version number in the "%define real_version" line.
- then, commit the new version number to the new branch:
svn commit -m "X.Y.N devel cycle started"
(where X.Y.N is the new version number)
- !WARNING! After the next step, the version number will be considered
"burned". The number is locked for this particular code. The same
number cannot be used for a future different release. So make sure
you're happy before you go on!
If you need to redo something, re-comment the $IS_DEVEL_BUILD line,
revert the $VERSION bump, and go back to 'Ensure the new version number
takes hold'. You can retag with the normal 'svn copy' command used in
'SVN tag the release files', even if that tag already existed; but be
sure to check in another commit message to note what happened, e.g.:
svn commit -m "oops, had to redo: THIS IS THE REAL X.Y.Z RELEASE"
- publish the tarballs.
(for rc and prerelease builds) copy the tarballs to the website.
ASF bylaws prohibit the distribution of files claiming to be
releases from the website, without 3 PMC +1 votes, so you need to
make it clear that this is an unofficial "test build" by placing it
in your public_html dir:
http://people.apache.org/~jm/rc/
this command will do it:
version=X.Y.Z
cp -p ~/public_html/devel/Mail-SpamAssassin-$version.* \
~/public_html/rc/
(for full release builds) copy the tarballs to www.apache.org/dist:
version=X.Y.Z
cp -p ~/public_html/devel/Mail-SpamAssassin-$version.* \
/www/www.apache.org/dist/spamassassin/source
cd /www/www.apache.org/dist/spamassassin
cp -p source/Mail-SpamAssassin-$version.* .
chmod -R g+w /www/www.apache.org/dist/spamassassin
[note: the ASF archives documentation claims that symlinks are
supported. This is not the case for some mirrors, so use "cp" instead.]
(for full release builds) remove release tarballs from now-obsolete
versions from dist:
cd /www/www.apache.org/dist/spamassassin
prev=X.Y.notZ
rm -f source/Mail-SpamAssassin-$prev.* Mail-SpamAssassin-$prev.*
rm -f binaries/*/Mail-SpamAssassin-$prev.*
(Archive copies are automatically kept on archive.apache.org/dist/ .)
- (for full release builds) update the main website "downloads" page:
cd /www/spamassassin.apache.org
vi main.wmk
See the comment at the top of the file; you'll need to change at
least one variable ("relversion") to the new version number, and
possibly more, depending on if this is the first release of a new
release line.
- rebuild the SpamAssassin website with webmake:
PATH=$HOME/sabuildtools/perl584/bin:$HOME/sabuildtools/bin:$PATH
cd /www/spamassassin.apache.org
webmake -F
- update the 'doc' tree in the SpamAssassin website (WARNING: if you're
moving to a new major release, x.y.0, you need to edit
'build/update_website_docs' beforehand and set the "vers" line):
cd /www/spamassassin.apache.org
svn up
svn delete --force full/3.2.x
svn commit -m "removing old doc tree from website" full
cd [checkedoutdir]
build/update_website_docs
cd /www/spamassassin.apache.org
svn add full/3.2.x
svn commit -m "updating new doc tree on website" full
- and check the entire website into SVN (see bug 4998 for reasons why).
Note that you may need to resolve conflicts and ensure the contents of
'full/3.2.x' are all added successfully:
svn up
svn commit -m "added new release to website"
- Release a new rules update matching the released code:
ssh spamassassin.zones.apache.org
cd /home/updatesd/svn/spamassassin/build/mkupdates
sudo -H -u updatesd ./update-rules 3.2
- update the tag used to point to "current release":
repo=https://svn.apache.org/repos/asf/spamassassin
svn delete -m "updating for new release" \
$repo/tags/spamassassin_current_release_3.2.x
svn copy -m "updating for new release" \
$repo/tags/spamassassin_release_3_2_0 \
$repo/tags/spamassassin_current_release_3.2.x
- upload release .tar.gz (not .bz2) tarball to CPAN at http://pause.cpan.org/:
https://pause.perl.org/pause/authenquery?ACTION=add_uri
(Note that recently, PAUSE has started indexing sub-modules under
Mail::SpamAssassin::, and it can't deal with our multi-maintainer
setup. You may receive mail indicating that "indexing failed" after
the upload; as long as the main Mail::SpamAssassin module was indexed
correctly, this is fine. However, it would help if you could visit
https://pause.perl.org/pause/authenquery?ACTION=share_perms
select 3.1 ("Make someone else co-maintainer"), and ensure that the
other releasers (JMASON, DOS, FELICITY, others?) all have permissions as
'co-maintainer' on the full set of your listed modules in the
"Mail::SpamAssassin::" namespace.
- announce on the users, dev, and announce mailing lists using the
previously-prepared release announcement.
NOTE: you must send this mail with a "From:" address @apache.org,
otherwise it'll be bounced by the ASF's custom spam filtering
rules.
- Before doing the next step, run through the release summary mail, and
write up a really short summary of the important changes in
human-readable format. This should be less than 600 chars to fit into
Freshmeat's format, and to be easily understandable.
- announce to Freshmeat at http://freshmeat.net/:
http://freshmeat.net/add-release/14876/
- Approve the posting to the announce list (the list admins will get a
mail indicating how to do this.)
- Add the new version to the Bugzilla versions list:
http://issues.apache.org/SpamAssassin/editversions.cgi?product=Spamassassin&action=add
// vim:tw=74: