--- title: Release Guide --- pipeline:conf How to create and announce a ServiceMix release. h2. 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|http://www.apache.org/dev/release-signing.html] * 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|http://maven.apache.org/developers/committer-settings.html] * use Maven 3.0.5 or higher Your settings.xml should look like: {code:xml} ... release ... apache.snapshots.https apache.releases.https ... {code} h2. Prepare for release Before you can start the release process... # Reach out to the community to ensure everyone is aware of the upcoming release and people have the time to commit their final changes # Check JIRA to ensure all issues scheduled to be resolved have been fixed. # In JIRA, generate text-based release notes (link available on version page or click [here|https://issues.apache.org/jira/secure/ConfigureReleaseNote.jspa?projectId=12311206]) and update the {{RELEASE-NOTES}} file with the new release information. # Make sure the project builds correctly and all tests are passing using a {{mvn clean install}} h2. Perform the release To cut the actual release... # 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. # 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. # 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 # If the prepare build succeeded, run {{mvn release:perform}} to #* Check out the tag #* Build the project and upload all the artifacts to a staging repository on [https://repository.apache.org] # 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. h2. Vote For more background on the Apache voting process, check out [http://www.apache.org/foundation/voting.html] # Start a vote by sending a mail to the dev@ list: {noformat} This is a vote to release Apache ServiceMix . The staging area is available at An overview of issues fixed in this release can be found in JIRA at The scm tag is available on 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. {noformat} # 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. h3. If the vote fails If the vote fails or if you decide to redo the release: # Send a mail to cancel the vote - add the {{\[CANCEL\]}} subject prefix when sending this mail # On [https://repository.apache.org], go back to the {{Staging repositories}}, select your staging repository and click the {{Drop}} button # Remove the tag from your local git repository ({{git tag -D }}) as well as from the remote git repository ({{git push origin :}}) # 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 h3. If the vote passes If the vote passes # Post the result to the dev@ mailing list, adding the {{[RESULT]}} subject prefix {noformat} To: "ServiceMix Developers List" Subject: [RESULT] [VOTE] Release Apache ServiceMix X.Y.Z Hi, The vote has passed with the following result : +1 (binding): <> +1 (non binding): <> I will copy this release to the ServiceMix dist directory and promote the artifacts to the central Maven repository. {noformat} h2. Promoting the release and publish distributions After the vote has passed successfully... # 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. # 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: {noformat} $ cd servicemix-5 $ /copy-release-distro.sh {noformat} #* Afterwards, do {{svn add }} 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. h2. 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 # 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}} # Send out the release annoucement mail to the dev@ and users@ mailing lists h2. Wrapping up You're nearly there now - just a few loose ends to tie up: # 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. # 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. # 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 ;)