This page is a brain dump of the various items needed for a release.
DRAFT
Requirements
- a Java JDK in according with target JDK (Java 5 for JMeter 2.8)
- a recent Ant binary (1.8+)
- subversion (svn) client installed; the command-line utility svnmucc is needed (it should be included in the svn client installation, but please check)
- a text editor
- hostname must resolve to ip address (not loopback)
- Internet access
Preparation
- request Bugzilla version update (on INFRA or if you are JMeter committer, ask for sufficient Bugzilla karma to do this yourself)
- ensure changes.xml is up to date. If necessary, commit after update.
- ensure unit tests pass
- do not update the version in build.xml yet; trunk should remain a SNAPSHOT
- check out SVN trunk into a clean workspace, for example (assuming current trunk is 2.8-SNAPSHOT in preparation for releasing 2.8):
svn co https://svn.apache.org/repos/asf/jmeter/trunk jmeter_v2_8_RC1
- Move to the new workspace:
cd jmeter_v2_8_RC1
- update the version / year in the new workspace: JMeterVersion.java (version and year) and NOTICE (year)
- ./src/core/org/apache/jmeter/util/JMeterVersion.java:
- section: private static final String VERSION = "2.8";
- section: private static final String COPYRIGHT = "Copyright (c) 1998-2012 The Apache Software Foundation";
- ./NOTICE:
- section: Copyright 1998-2012 The Apache Software Foundation
- ./src/core/org/apache/jmeter/util/JMeterVersion.java:
- update xdocs/download_jmeter.xml to the new version
- section: <!ENTITY release '2.8'>
- Download external jars
ant download_jars
- build site documents, having first cleaned out existing files (so obsolete files will be removed):
- TODO should this be done on trunk, before creating the clean checkout? Are there any references to the current version in the docs?
ant clean-docs ant docs-site ant docs-api -Djmeter.version=2.8
- commit docs changes
svn commit -m "Prepare next release 2.8: update docs tree and overview (RC1)"
- make a last SVN update to update revision number for your workspace
svn update
- edit now the version for build.xml (remove -SNAPSHOT)
- ./build.xml:
- section: <property name="jmeter.version" value="2.8"/>
- ./build.xml:
- create the new RC tag, e.g. v2_8_RC1 from the workspace
svn copy -m "Tag for pre-release" . https://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1
- this will create the tag from the contents of the workspace. Only the updated files will be shown in the commit message; most files will be shown as being copied from trunk.
- N.B. Tags must be immutable, i.e. must not be changed once created. A tag can be deleted if it is no longer needed, but must not be recreated.
- If there is a problem with the contents of an RC tag, create a new tag, for example v2_8_RC2
- If the tag is part of an ongoing release vote, do not delete it whilst the vote is ongoing, even if the vote is now using a later tag. It can be useful to be able to compare the contents of tags as part of the voting process.
- Once the release vote is over, intermediate tags are no longer needed, and can be deleted.
- If the tag has not been used in a release vote, it can be deleted immediately.
- N.B. Tags must be immutable, i.e. must not be changed once created. A tag can be deleted if it is no longer needed, but must not be recreated.
- Switch to the new tag
svn switch https://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1
- build code to make a testing binary with this ant task:
ant -Djmeter.version=2.8 -Duser.name=milamber@apache.org distribution
- test the new binaries (move/extract binaries in a temporary directory outside the workspace)
- GUI and non-GUI using host with graphic capability
- non-GUI only using host with no graphic capability
- ideally test on minimum supported Java and latest Java - especially for GUI
Generate Release
- If tests are ok, from the workspace jmeter_v2_8_RC1
- (no need to fetch the tag again, as we already have a clean workspace)
- sign distribution files and maven files via ant tasks:
ant _dist_maven -Djmeter.version=2.8 ant sign_dist -Dgpg.keyname=0612B399 -Dgpg.secretKeyring=~/.gnupg/secring.gpg
- Upload Maven files to Maven repository:
ant maven_upload -Djmeter.version=2.8 -DrepoType=releases
- Go to Apache Repository
- Section Staging Repositories
- Check the RC box, add click on Close button (see Closing a staging repository)
- You will receive a email with JMeter Maven Repo URLs
- The main URL must be added to email vote.
- The main URL must be added to email vote.
- Section Staging Repositories
- Generate RAT report (example on Linux with Java)
cd dist/ java -jar $RAT_HOME/apache-rat-0.8.jar ./apache-jmeter-2.8.tgz > rat-report-jmeter-2.8RC1.txt unix2dos rat-report-jmeter-2.8RC1.txt
Checks to do before sending vote email
- review RAT report
- to do: add some checks (zip/tgz binary files vs src files, SVN tree vs SRC files, etc.)
Check: JMeter SVN tree vs JMeter archive sources
TODO: simplify this checking process and extend to Windows.
For JMeter sources, need a Linux box, SVN (apache) and GIT (local).
Export the RC tags to a temporay directory.
cd /tmp svn export http://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1 jmeter_v2_8_RC1
Initialize a GIT local repository
cd jmeter_v2_8_RC1/ git init
Add and commit all files from the svn export
git add * git commit -m "SVN export to initial import"
Untar the JMeter sources tgz file into a temporary directory, and copy the contents in the git repo.
tar xfz /tmp/releases/jmeter_2_8/jmeter_v2_8_RC1/dist/apache-jmeter-2.8_src.tgz -C /tmp cp -a /tmp/apache-jmeter-2.8/* /tmp/jmeter_v2_8_RC1/
Check the differences with the git diff command:
cd /tmp/jmeter_v2_8_RC1/ git diff
Samples Results:
diff --git a/bin/jmeter b/bin/jmeter old mode 100755 new mode 100644 diff --git a/bin/jmeter-server b/bin/jmeter-server old mode 100755 new mode 100644 diff --git a/xdocs/download_jmeter.cgi b/xdocs/download_jmeter.cgi old mode 100755 new mode 100644
Here, differences is only the permission on some files (not matter in this case)
After all checks, you can remove the temporary directories.
Upload release artifacts to staging directory
JMeter releases are now published using svnpubsub. For release votes, the files are uploaded to the dev/jmeter tree at https://dist.apache.org/repos/dist/dev/jmeter/
If the vote succeeds, they are renamed to the release directory at https://dist.apache.org/repos/dist/release/jmeter/ which is automatically published to the ASF mirror system.
ant RC_upload -DRC=RCn -DrepoType=live [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ]
The files should now be available under https://dist.apache.org/repos/dist/dev/jmeter/
Vote on release
*** This section is outdated ***
- Install the site docs:
cd ~/public_html/jmeter-2.8RC1/ svn export https://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1/docs docs
- Extract Javadocs:
unzip -x jmeter-m.n.o.zip '*/docs/api/*'
and move to docs/api- Example:
cd $HOME cp ~/public_html/jmeter-2.8RC1/dist/apache-jmeter-2.8.tgz $HOME tar xfz apache-jmeter-2.8.tgz cd apache-jmeter-2.8/docs/ mv api ~/public_html/jmeter-2.8RC1/docs/api cd $HOME rm -r $HOME/apache-jmeter-2.8
send round [VOTE] e-mail to dev
- Wait for any feedback (at least 72 hours); address any issues raised, if necessary by creating another release tag
- If at least 3 PMC votes, then continue
After VOTE success
send round [VOTE] [RESULT] e-mail to same mailing lists
- Copy the RC tag to the release tag
svn copy https://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1 https://svn.apache.org/repos/asf/jmeter/tags/v2_8 -m "Vote succeeded, create the 2.8 tag"
Move RC dist files to release
This is done using svnmnucc. It moves the files from the staging director https://dist.apache.org/repos/dist/dev/jmeter/ to the live are at https://dist.apache.org/repos/dist/release/jmeter/
ant RC_publish -DRC=RCn -DrepoType=live [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ]
Update main distribution files
- Checkout the top-level of the live dist project on your computer:
svn co --depth files https://dist.apache.org/repos/dist/release/jmeter/ dist-jmeter
- Edit HEADER.html to modifiy with new version number
- If necessary, add your GPG public key to KEYS
- Commit with svn
svn commit -m "JMeter 2.8 release - Prepare update site" dist-jmeter
- wait a day or so for mirrors to catch up
Update JMeter site
This is now done using svnmucc. Create a script - for example "updatesite.txt" - containing the following:
rm https://svn.apache.org/repos/asf/jmeter/site cp HEAD https://svn.apache.org/repos/asf/jmeter/branches/docs-2.8/docs https://svn.apache.org/repos/asf/jmeter/site
Change the /docs-2.8/ path segment above as appropriate!
Now use svnmucc to update the live site:
svnmucc -m "Create branch docs 2.8" -X updatesite.txt
The SvnPubSub system will update the live site within a few seconds.
Maven Release
- Go to Apache Repository
- Section Staging Repositories
- Check the RC box, add click on Release button (see: Release a staging repository)
- Comment: "JMeter 2.8 release"
- You will receive a email with JMeter Maven Repo URLs
- The main URL can be added to email announce
- The main URL can be added to email announce
Announce
Make sure: JMeter website is update AND download mirrors too.
- update Wiki version details
- update doap_JMeter.rdf details in trunk and commit
svn commit -m "JMeter 2.8 release"
send [ANNOUNCE] e-mail to user@jmeter.a.o, dev@jmeter.a.o
- Double check all URL in email announce!
- also copy to announce AT ao (has to be sent from an ao e-mail address)
- N.B. to track bounces and unsubscribes, it may be a good idea to use a separate mail to Announce
Tidy up
- a few days after the release has been announced, remove any superseded releases from the ninaries and source directories under https://dist.apache.org/repos/dist/release/jmeter/ using the following command:
ant release_delete -Djmeter.old.version=2.7 -DrepoType=live [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ]