...
- a Java JDK in according with target JDK (Java 5 8 for JMeter 25.80+)
- a recent Ant binary (1.8+Gradle release (but if you use gradlew utility, the good gradle version will be installed during the build)
- subversion (svn) client installed (version 1.9+); the command-line utility svnmucc is needed (it should be included in the svn client installation (svn-tools dir), but please check)
- a git client installed (2.+)
- a text editor
- hostname must resolve to ip address (not loopback)
- Internet access
Preparation
For GPG signing, the Release Manager need to have his GPG key on his machine.
To check the key (for example):
No Format |
---|
$ gpg --list-secret-keys --keyid-format LONG
[...]
sec rsa4096/AC214CAA0612B399 2010-08-14 [SC]
C4923F9ABFB2F1A06F08E88BAC214CAA0612B399
uid [ultimate] Milamber (ASF) <milamber@a.o>
uid [ultimate] Milamber (Milamberspace) <milamberspace@xxxxx.com>
ssb# rsa4096/88A342BB4B10546A 2010-08-14 [E]
Optionally, you can add the user signing key in Git configuration for the JMeter repository, this allow to sign each commit.
Go to the Git clone directory of JMeter project:
$ cd ~/GitRepos/JMeter/jmeter
Execute this git command to configure the user signing key, please change the key ID with your own key id:
$ git config user.signingkey AC214CAA0612B399 |
- 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 master branch should remain a SNAPSHOT
- check out SVN trunk Git master branch into a clean workspace , for example (assuming current trunk is 2.8-SNAPSHOT in preparation for releasing 2.8):
No Format |
---|
svn co https://svn.apache.org/repos/asf/jmeter/trunk jmeter_v2_8_RC1
|
- Move to the new workspace:
- (or run a git clone if jmeter git tree is not on your machine)
No Format |
---|
$ cd ~/GitRepos/JMeter/jmeter
$ git pull
Already up to date. |
- Update version to targeted version in gradle.properties
No Format |
---|
vi gradle.properties |
No Format |
---|
cd jmeter_v2_8_RC1
|
- update the version / year in the new workspace: JMeterVersion.java (version and year) and for 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 2019 The Apache Software Foundation
- update xdocs/download_jmeter.xml to the new version
- section: <!ENTITY release '25.80'>
- Download external jars
No Format |
---|
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?
No Format |
---|
ant clean-docs
ant docs-site
ant docs-api -Djmeter.version=2.8
|
- Add modifications, commit and push to remote location
No Format |
---|
git add NOTICE xdocs/download_jmeter.xml
git |
No Format |
---|
svn commit -m "Prepareprepare nextnew releaseversion 2.8: update docs tree and overview (RC1)"
|
- make a last SVN update to update revision number for your workspace
- edit now the version for build.xml (remove -SNAPSHOT)
- ./build.xml:
- section: <property name="jmeter.version" value="2.8"/>
- create the new RC tag, e.g. v2_8_RC1 from the workspace
No Format |
---|
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.
No Format |
---|
svn switch https://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1
|
- build code to make a testing binary with this ant task:
No Format |
---|
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:
No Format |
---|
ant _dist_maven -Djmeter.version=2.8
ant sign_dist -Dgpg.keyname=0612B399 -Dgpg.secretKeyring=~/.gnupg/secring.gpg
|
- Upload Maven files to Maven repository:
No Format |
---|
ant maven_upload -Djmeter.version=2.8 -DrepoType=releases
|
- Go to Apache Repository
- Section Staging Repositories
- You will receive a email with JMeter Maven Repo URLs
- The main URL must be added to email vote.
- Generate RAT report (example on Linux with Java)
No Format |
---|
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
|
Generate Release
- Clean the working space before
No Format |
---|
$ ./gradlew :src:dist:clean |
- To do a new release candidate, run theses commands:
No Format |
---|
$ ./gradlew prepareVote -Prc=1 -Pasf -PuseGpgCmd --info --stacktrace |
- Change -Prc=X with according the RC number
- Use -Pasf to use the ASF GitBox repository (indeed of GitHub)
- use -PuseGpgCmd to allow the signing of archives
- (if you work on a Linux machine, during the build, the GPG agent will ask your passphras for you GPG key.)
On success, a template for VOTE email are display with relevant informations
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.
No Format |
---|
cd /tmp
svn export http://svn.apache.org/repos/asf/jmeter/tags/v2_8_RC1 jmeter_v2_8_RC1
|
Initialize a GIT local repository
No Format |
---|
cd jmeter_v2_8_RC1/
git init
|
Add and commit all files from the svn export
No Format |
---|
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.
No Format |
---|
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:
No Format |
---|
cd /tmp/jmeter_v2_8_RC1/
git diff
|
Samples Results:
No Format |
---|
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
...
- See ReleaseChecking for information on what to check
- Test ALL links in the vote message (use browser in incognito mode)
Vote on release
send round [VOTE] e-mail to dev
Subject: [VOTE] Release JMeter X.X.X RCx
- Wait for any feedback (at least 72 hours); address any issues raised, if necessary by creating another release tag (rc)
- If at least 3 PMC votes, then continue
After VOTE success
send round [VOTE] [RESULT] e-mail to same mailing lists
- Publish the RC tag to the release tag
No Format |
---|
$ ./gradlew publishDist -Prc=1 -Pasf -PuseGpgCmd |
Update main distribution files
- Checkout the top-level of the live dist project on your computer:
No Format |
---|
mkdir ~/JMETER_releases/jmeter_5_4_2
cd ~JMETER_releases/jmeter_5_4_2
svn co --depth files https://dist.apache.org/repos/dist/ |
...
release/jmeter/ dist-jmeter
|
...
- Edit HEADER.html to modify with new version number
- If necessary, add your GPG public key to KEYS
- If necessary, update the META file with your GPG key id (if you act as the release manager for the first time. Please visit https://
...
...
- doc/README.html )
- The META file needs to be signed by the PMC Chair of project with this command:
No Format |
---|
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 ***
gpg -u emailOfPmcChairJMeter@apache.org --armor --output META.asc --detach-sig META
|
- To verify the good signature, use this commandInstall the site docs:
No Format |
---|
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
No Format |
---|
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
|
Wiki Markup |
---|
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
Wiki Markup |
---|
send round \[VOTE\] \[RESULT\] e-mail to same mailing lists |
- Copy the RC tag to the release tag
No Format |
---|
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/
No Format |
---|
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:
No Format |
---|
svn co --depth files https://dist.apache.org/repos/dist/release/jmeter/ dist-jmeter
|
$ gpg --verify META.asc META
gpg: Signature made mar. 12 sept. 2017 18:05:19 WEST
gpg: using RSA key C4923F9ABFB2F1A06F08E88BAC214CAA0612B399
gpg: issuer "milamber@apache.org"
gpg: Good signature from "Milamber (ASF) <milamber@apache.org>" [ultimate]
gpg: aka "Milamber (Milamberspace) <milamberspace@gmail.com>" [ultimate]
|
- Edit HEADER.html to modifiy with new version number
- If necessary, add your GPG public key to KEYS
- Commit with svn
No Format |
---|
svn commit -m "JMeter 5.4.2.8 release - Prepare update site" dist-jmeter
|
Maven Release
- Go to Apache Repository
- Section Staging Repositories
- Maven Central will catch up the new release in next sync (check: ga)
Wait for the update of central maven
- 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:
Update Doap file
- Get latest Doap file from Git master branch
No Format |
---|
$ cd ~/GitRepos/JMeter/jmeter
$ git pull
$ vi doap_JMeter.rdf |
- update doap_JMeter.rdf to add the new release
- and commit
No Format |
---|
$ git add doap_JMeter.rdf
$ git commit -m "Add the 5.4.2 release" |
Update the JMeter web site
Clone (or pull) the git repo for JMeter web site:
No Format |
---|
Optionally:
cd ~/GitRepos/JMeter
$ git clone https://gitbox |
No Format |
---|
rm
https://svn.apache.org/repos/asf/jmeter/-site.git
cp
HEAD
https://svn.apache.org/repos/asf/jmeter/branches/docs-2.8/docs
https://svnOr
$ cd ~/GitRepos/JMeter/jmeter-site/
$ git pull |
Copy new web site files from jmeter git source directory to the site directory
Change the path segment above as appropriate!
No Format |
---|
$ cp -a site/* ~/GitRepos/JMeter/jmeter-site/ |
Add changes in stage git
Get lastest version Doap file and add to git too:
No Format |
---|
$ wget "https://gitbox.apache.org/repos/asf/jmeter/site
|
Change the /docs-2.8/ path segment above as appropriate!
Now use svnmucc to update the live site:
No Format |
---|
svnmucc -m "Create branch docs 2.8" -X updatesite.txt
|
?p=jmeter.git;a=blob_plain;f=doap_JMeter.rdf;hb=HEAD" -O doap_JMeter.rdf
$ git add doap_JMeter.rdf |
Commit and push:
No Format |
---|
$ git commit -m "Update website for the new release Apache JMeter 5.4.2"
$ git push |
The !GitPubSub The SvnPubSub system will update the live site within a few seconds.
Maven Release
...
.
...
...
Announce
Make sure: JMeter website is update AND download mirrors too.
- update Wiki version details
- update doap_JMeter.rdf details in trunk and commit
No Format |
---|
svn commit -m "JMeter 2.8 release"
|
Wiki Markup |
---|
send \[ANNOUNCE\] e-mail to user@jmeter.a.o, dev@jmeter.a.o |
- 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
Update reporter.apache.org
Add release data (version and date) to reporter.apache.org - https://reporter.apache.org/addrelease.html?jmeter
Tidy up
- a few days after the release has been announced, remove any superseded releases from the ninaries binaries and source directories under https://dist.apache.org/repos/dist/release/jmeter/ using the following command:
No Format |
---|
ant release_delete -Djmeter.old.version=24.70 -DrepoType=live [-Dasf.ldap.password=secret [-Dasf.ldap.usermame=user] ]
|
...