How to create and announce a ServiceMix release.

Before you start

To prepare and perform a release you must be at least at Apache ServiceMix Committer.

A few other prerequisites:

  • each and every release must be SIGNED

  • your public key should also be cross-signed by other Apache committers (not required, but suggested)

  • make sure you have all Apache servers defined in your settings.xml

  • use Maven 3.0.5 or higher

Your settings.xml should look like:

<settings>
  ...
  <profiles>
    <profile>
      <id>release</id>
      <properties>
        <gpg.passphrase> <!-- YOUR KEY PASSPHRASE --> </gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  ...
  <servers>
    <!-- To publish a snapshot of some part of Maven -->
    <server>
      <id>apache.snapshots.https</id>
      <username> <!-- YOUR APACHE SVN USERNAME --> </username>
      <password> <!-- YOUR APACHE SVN PASSWORD --> </password>
    </server>
    <!-- To stage a release of some part of Maven -->
    <server>
      <id>apache.releases.https</id>
      <username> <!-- YOUR APACHE SVN USERNAME --> </username>
      <password> <!-- YOUR APACHE SVN PASSWORD --> </password>
    </server>
    ...
  </servers>
</settings>

Prepare for release

Before you can start the release process...

  1. Reach out to the community to ensure everyone is aware of the upcoming release and people have the time to commit their final changes

  2. Check JIRA to ensure all issues scheduled to be resolved have been fixed.

  3. In JIRA, generate text-based release notes (link available on version page or click here) and update the RELEASE-NOTES file with the new release information.

  4. Make sure the project builds correctly and all tests are passing using a mvn clean install

Perform the release

To cut the actual release...

  1. To ensure that all dependencies are available online and/or the necessary Maven repositories have been defined, it's highly recommended to move your local Maven repository aside (mv ~/.m2/repository ~/repository.old) or delete it.

  2. Do a git pull --rebase and git status first to make sure your local checkout is completely up-to-date. If there are any untracked files around, do a git clean -df to remove those.

  3. Now, run mvn release:prepare. It will:

    • Ask you for the release version, tag name and next release version - usually, the default values will be OK

    • Update the POMs with the release versions

    • Build the project and run all the test

    • Check in the release POMs, create the tag and then update to next release version

  4. If the prepare build succeeded, run mvn release:perform to

  5. Once the build has finished, close the staging repository:

    • Log onto https://repository.apache.org with your Apache user id and password

    • In the left hand navigation panel, select Staging repositories

    • Find the staging repository containing the release and close the repository. After the repository has been closed, make a note of the repository URL because you'll need it for the vote mail.

Vote

For more background on the Apache voting process, check out http://www.apache.org/foundation/voting.html

  1. Start a vote by sending a mail to the dev@ list:

    This is a vote to release Apache ServiceMix <version>.
    
    The staging area is available at
      <link to staging repository>
    
    An overview of issues fixed in this release can be found in JIRA at
      <link to version in JIRA>
    
    The scm tag is available on
      <link to tag on git-wip-us.apache.org>
    
    Please vote to approve this release:
    
    [ ] +1 Approve the release
    [ ] -1 Do not approve the release (please provide specific comments)
    
    This vote will be open for 72 hours.
    
  2. For the next few days, just monitor the vote thread. If a blocking issue arises, it may be necessary to cancel the vote earlier, but otherwise you'll need to wait for at least 72 hours and at least 3 binding +1 votes.

If the vote fails

If the vote fails or if you decide to redo the release:

  1. Send a mail to cancel the vote - add the [CANCEL] subject prefix when sending this mail

  2. On https://repository.apache.org, go back to the Staging repositories, select your staging repository and click the Drop button

  3. Remove the tag from your local git repository (git tag -D <tag>) as well as from the remote git repository (git push origin :<tag>)

  4. After all the reported issues have been fixed, you can circle back to the Prepare for release section of this page and give things another go

If the vote passes

If the vote passes

  1. Post the result to the dev@ mailing list, adding the RESULT subject prefix

    To: "ServiceMix Developers List" <dev@servicemix.apache.org>
    Subject: [RESULT] [VOTE] Release Apache ServiceMix X.Y.Z
    
    Hi,
    
    The vote has passed with the following result :
    
      +1 (binding): <<list of names>>
      +1 (non binding): <<list of names>>
    
    I will copy this release to the ServiceMix dist directory and
    promote the artifacts to the central Maven repository.
    

Promoting the release and publish distributions

After the vote has passed successfully...

  1. On https://repository.apache.org, go back to the Staging repositories, select your staging repository and click the Promote button. This will publish the artifacts into the https://repository.apache.org/content/repositories/releases repository, from where they will be synced into central repo.

  2. To publish the distribution for download:

    • Check out the distribution repository using Subversion from https://dist.apache.org/repos/dist/release/servicemix/

    • You will need to copy the (source) distribution and the corresponding hash/signature files into the correct directory. There's a script called copy-release-distro.sh available in http://svn.apache.org/repos/asf/servicemix/scripts/ to ease that task. Example:

      $ cd servicemix-5
      $ <path-to-script>/copy-release-distro.sh <release-version>
      
    • Afterwards, do svn add <directory> and commit the new files. For now, just leave the previous version there as well. It will take about 24 hours for the distribution to reach most of the Apache download mirrors.

Updating the website and announcing the release

About a day after you upload the distribution to dist.apache.org, you can update the website and send the release announcement

  1. Edit the website (cfr. website-source for more information):

    • Add a new download page for the release - just copy an existing page and update it accordingly. There's another helper script available (called release-note-to-wiki.rb) to convert release notes from text to wiki format. Don't forget to add link on the main downloads.page

    • On the previous release page, add the "archive" -> true bit to indicate that that release will only be available from the archive

    • Add an announcement news item and update the news/recent.page to show the item - move the oldest item to the website's news.page

    • If this is the most recent release, also update the download link on the index.page

  2. Send out the release annoucement mail to the dev@ and users@ mailing lists

Wrapping up

You're nearly there now - just a few loose ends to tie up:

  1. In JIRA, mark the version released. If the next two versions have not yet been created, this would be a good time to do that as well.

  2. Go back to your checkout directory for https://dist.apache.org/repos/dist/release/servicemix/ and remove the previous two version - after the update to the website in the previous step, people will now be downloading those from the archives instead.

  3. If you haven't done so a few times along the way, now would be an excellent time to get yourself a drink to celebrate the new release ;)