Fixing formatting of a code sample
|Deletions are marked like this.||Additions are marked like this.|
|Line 162:||Line 162:|
|The Apache jclouds (incubating) team is pleased to announce the release of jclouds 1.6.3.||The Apache jclouds team is pleased to announce the release of jclouds 1.6.3.|
How to release (and test RCs) for Apache jclouds
Checklist Summary of Steps Involved in Releasing
- Email the dev list to let them know the release process is beginning and ask all to clean up any JIRA issues they are familiar with.
- Have a GPG signing key configured.
- Clone all repos to be released, if you haven't already.
- Check out the branch to be released in each repo.
- Update any POM properties in the repos pointing at the SNAPSHOT version and change those to the release version.
- Run mvn release commands for each repo, in order, as described below. If building a 1.6.x release, use a Java 6 JDK
- Push the release commits and RC tags to the remote repos.
- Close the Nexus staging repository.
- Copy the source release tarballs, signatures and hashes to a new release candidate directory.
- Email the dev list, opening the 72 hour vote window on the RC.
- If the vote fails or there are issues that need to be addressed, rinse and repeat.
- Once the PMC vote passes, release the Nexus staging repo.
- Send a RESULT email in reply to the PMC vote thread with the result.
- Copy the RC tarballs etc to the release area.
- Push non-RC tags to the remote repos.
- Update the version on the branch in the repos to the next SNAPSHOT and push.
- Update the jclouds.apache.org site with the release notes and noting the new version.
- Publish the API docs for the release.
- Mark the release as, well, released in JIRA and create the next release in JIRA, if it's not already there.
- Send out an ANNOUNCE email to the appropriate lists (see below) to announce the release!
Prerequisites for doing a release
Apache Nexus Account and Local Configuration
See http://www.apache.org/dev/publishing-maven-artifacts.html for the details. You should already have a Nexus account created for you automatically. If you aren't able to log in to https://repository.apache.org, and you're a jclouds committer, you should probably open a JIRA with INFRA.
GPG Signing Key
Make sure you've got a GPG signing key set up. See http://www.apache.org/dev/release-signing.html for details.
Associate your key with your ASF account by adding the fingerprint at https://id.apache.org/.
- At least for now, also make sure your key is in people.apache.org:/www/www.apache.org/dist/incubator/jclouds/KEYS.
If/when you can, get linked into the Apache Web of Trust.
- Optionally, you can also add your GPG passphrase to your ~/.m2/settings.xml, or enable gpg-agent for the maven-gpg-plugin, by doing something like this:
<profile> <id>apache-release</id> <properties> <gpg.useagent>true</gpg.useagent> <gpg.passphrase>[GPG_PASSWORD]</gpg.passphrase> </properties> </profile>
- But remember that this is not particularly secure, so you probably should just suck it up and enter your passphrase when you kick off the build, though you can leave gpg.useagent set to true to avoid having to re-enter it for each repo.
You will need to be subscribed to all mailing lists to which announcements need to be sent. firstname.lastname@example.org and email@example.com are probably already taken care of, but you may still need to take care of firstname.lastname@example.org.
Cutting an RC
Running the RC build
- The repo order to run the RC build is:
- For each of those repos, in that order, do the following:
- Check out the branch you're going to be releasing from - e.g., 1.6.x
Check the <repo>/pom.xml and/or <repo>/project/pom.xml for any properties (typically <jclouds.version>) referencing the SNAPSHOT version we're leaving, and replace those with the release version. Commit the changes, as otherwise the following step will complain about uncommitted local modifications
For jclouds-labs-openstack.git, first run mvn versions:update-parent -DparentVersion="[1.6.3]" (or whatever the release version is). Commit and push.
Run mvn --version and verify that you are using a Java 6 JDK for 1.6.x releases
- Prepare the release. e.g.:
mvn release:clean release:prepare -DreleaseVersion=1.6.3 -Dtag=jclouds-1.6.3-rcX -DdevelopmentVersion=1.6.4-SNAPSHOT -DpushChanges=false
- Remember to replace "jclouds-1.6.3-rcX" and the versions with the correct tag/version for the repo/release/RC you're building.
Some repositories (most notably labs and karaf) may have "missing dependency" build problems with the new version when you run release:prepare. If that happens, run mvn clean install -DskipTests with the POMs set to the release version, and then try running the prepare command again.
- Note that this will explicitly and specifically *not* push the tag or branch to the remote incubator-(whatever).git. That is by design, to make it easier to recover from errors and to speed up the release build. You will need to push the tag and branch upon completion of the build.
- Perform the release build. e.g.,:
mvn clean release:perform -DconnectionUrl=scm:git:file://`pwd`/.git -Dtag=jclouds-1.6.3-rcX -Darguments="-DskipTests"
- We deliberately do not run the tests in the release build, since we already just ran them for the prepare build, and that just seems redundant.
- JARs will be deployed to repository.apache.org, in a new staging repo (if this is the first of the repos you're building) or the existing one used for the previous repos (if you've already built jclouds.git). Remember that you need to have an account on repository.apache.org and your GPG key set up (as described above) or the build will fail.
For those repos where we added a commit to update <jclouds.version> and similar properties, bump the properties to the next development SNAPSHOT version and commit the change
- Push the tag and the release commit to the remote repos
We don't push the second commit the release plugin applies, changing the version to 1.6.4-SNAPSHOT, or the commits that change <jclouds.version> and similar properties, yet. If we need to spin a second release candidate, we'll do by creating a new 1.6.4 (or whatever) branch from the last commit before the version changed to the release version, and re-run subsequent RCs there.
Go to https://git-wip-us.apache.org/repos/asf?p=jclouds.git (or equivalent) and find the link to the tag you just pushed - copy that aside, since you'll need it for the vote email.
Once you've finished building all of the repos, go to https://repository.apache.org, log in, and go to Staging Repositories. Find the open org.apache.jclouds repository, which your builds have been uploading to. Select it and close it. That'll take a little while. Then copy the URL for the repo - you'll need that shortly.
Starting the Vote
Checkout https://dist.apache.org/repos/dist/dev/jclouds. Create a new directory for the RC, i.e., 1.6.3-rc0.
- Go to the candidate directory and run the following, substituting the correct version and the now-closed staging repository accordingly. This will copy down all the source tarballs, their signatures and their checksums.
/home/abayer/bin/fetch_jclouds_rc.sh 1.6.3 https://repository.apache.org/content/repositories/orgapachejclouds-016
It's not a bad idea to try taking each of the tarballs, blowing them up and then building, with a standard mvn clean install. Remember that RAT checks are done as part of the Maven build, so you don't need to run those separately.
svn add the new directory, as well as svn rm'ing any old RCs in the same line (i.e., any older 1.6.x RC). svn ci, and use that link under https://dist.apache.org/repos/dist/dev/jclouds/ for the release vote email.
Get the JIRA release notes for the release by going to https://issues.apache.org/jira/secure/ConfigureReleaseNote.jspa?projectId=12314430 and choosing HTML and the version you're releasing. Save that link for inclusion in the vote/discuss emails.
Send two emails to email@example.com, a [VOTE] thread and a [DISCUSS] thread. Set an end time for the vote, generally 72 hours from when you're sending it (but it's generally considerate to round up, and not a bad idea to give an extra day if the release vote window goes over the weekend). Example templates for the emails are below. Replace links, versions, RC numbers, release note link, etc.
- [VOTE] email:
Subject: [VOTE] Release Apache jclouds-1.6.3 RC3 Body: Hello, This is the third release candidate for Apache jclouds 1.6.3. Please use the separate [DISCUSS] thread for anything but votes. It fixes the following issues: https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12324412&styleName=Html&projectId=12314430 *** Please download, test and vote by Saturday, June 15th, 09:00 PDT / 12:00 EDT / 18:00 CET. Note that we are voting upon the source (tag), binaries are provided for convenience. Source and binary files: https://dist.apache.org/repos/dist/dev/jclouds/jclouds-1.6.3-candidate-3 Maven staging repo: https://repository.apache.org/content/repositories/orgapachejclouds-016 The tags to be voted upon: - jclouds - https://git-wip-us.apache.org/repos/asf?p=jclouds.git;a=tag;h=8ed5571b0ecf7d79c64bc16642264684882f0311 - jclouds-labs - https://git-wip-us.apache.org/repos/asf?p=jclouds-labs.git;a=tag;h=54b084e474e0c22b539ed7cce0b0ebbc82b310cb - jclouds-chef - https://git-wip-us.apache.org/repos/asf?p=jclouds-chef.git;a=tag;h=4adced11f4e74513c06023d6b3cde0642fd4017f - jclouds-karaf - https://git-wip-us.apache.org/repos/asf?p=jclouds-karaf.git;a=tag;h=9e1f0d14285c8edeb35499f313aa7dbfab4a86f6 - jclouds-cli - https://git-wip-us.apache.org/repos/asf?p=jclouds-cli.git;a=tag;h=2e3575f56de2bf67469782d94d72ce8e621ddda5 jclouds KEYS file containing PGP keys we use to sign the release: http://www.apache.org/dist/jclouds/KEYS [ ] +1 [ ] 0 [ ] -1 (explain why)
- [DISCUSS] email
Subject: [DISCUSS] Release Apache jclouds-1.6.3 RC3 Body: This thread is for discussion of the third release candidate for Apache jclouds-1.6.3. Please use this thread for discussion of issues uncovered in the RC, questions you may have about the RC, etc. Thank you.
Finishing the PMC Vote
- If, after the voting window is closed, there are at least three binding +1s and no binding -1s, the PMC has signed off on the release and it can, well, be released.
Reply to the [VOTE] thread on firstname.lastname@example.org announcing the closure of the vote, regardless of its outcome, and give the vote counts. Modify the template as appropriate.
Subject: [RESULT][VOTE] Release Apache jclouds-1.6.3 RC3 Body: The vote is now closed, and with X binding +1s, we're ready to release/this vote has not passed.
- Assuming the vote has passed, it's time to release!
- First, in each of the repos, create and push a new tag, like jclouds-1.6.3, pointing at the same commit as the RC tag we included in the vote emails. Push those tags to the remote.
Push the second commit made by the release plugin (which updates the POM versions to the next SNAPSHOT), and commits made to update <jclouds.version> and similar properties
For jclouds-labs-openstack, also run mvn versions:update-parent -DparentVersion="[1.6.4-SNAPSHOT]" or whatever the new version is, commit, push.
Checkout https://dist.apache.org/repos/dist/release/jclouds. Create a new directory for the release, i.e., 1.6.3. Copy the release artifacts from the RC into that directory. Point the stable symlink to that new directory. svn add the new directory and the stable symlink, as well as svn rm'ing any old releases in the same line (i.e., any older 1.6.x releases) - these are archived on archive.apache.org, but shouldn't be in the primary dist area. svn ci - your added files should show up on http://www.apache.org/dist/jclouds shortly, but will take a while to propagate to the various mirrors.
While waiting, go to https://repository.apache.org, log in, and go to Staging Repositories. Select the staging repo for the RC, and click Release - this will move the artifacts into the releases repo, and from there they'll be synced to Maven Central as well.
- If you've got admin access to JIRA, mark the version you just released as, well, released, and if the next version in the train doesn't already exist, create it. If you're not in the JIRA admins for jclouds, drop an email to the dev list asking for someone to do this.
Subject: [ANNOUNCE] Apache jclouds 1.6.3 released Body: The Apache jclouds team is pleased to announce the release of jclouds 1.6.3. This is the (Xth) Apache release of jclouds. Apache jclouds is a cloud agnostic library that enables developers to access a variety of supported cloud providers using one API. The source archives for the release are available here: http://www.apache.org/dyn/closer.cgi/jclouds The Maven artifacts for the release are available in Maven Central, under the new org.apache.jclouds groupId. The full change log is available here: https://issues.apache.org/jira/browse/JCLOUDS/fixforversion/12324412 We welcome your help and feedback. For more information on how to report problems, and to get involved, visit the project website at http://jclouds.apache.org/ The Apache jclouds Team
- And you're done!