blob: 664cc098215e66b3c2d403ae956f259fe9516791 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<script type="text/javascript">var xookiConfig = {level: 1};</script>
<script type="text/javascript" src="../xooki/xooki.js"></script>
</head>
<body>
<textarea id="xooki-source">
<h1>Making a release</h1>
<h2>Requirements</h2>
Requirements for making a release are similar to the requirements for building from source, except that JDK 1.6+ and Apache Ant 1.9+ are required.
<h2>Procedure</h2>
<h3>1. Check the files which needs to be updated for the release.</h3>
On the master, check that files which require update for the release are up to date.
This includes particularly:
doc/release-notes.html
<h3>2. Check out a clean copy of the branch</h3>
Run the following git command to checkout the branch, revert any change and remove untracked and ignored files:
<code>
git checkout 2.0.x
git reset --hard
git clean -d -x -f
</code>
<h3>3. Add Ivy xsd file.</h3>
You need to store the current ivy xml schema in the documentation, so that it will later be accessible on public web site. To do so, run the following command in the directory in which you checked out the release branch:
<code>
ant -f build-release.xml release-xsd
</code>
And commit your changes in the branch:
<code>
git add doc/ivy.xsd
git commit -m "release the ivy.xsd"
</code>
<h3>4. Launch the release script</h3>
<code>
ant -f build-release.xml release
</code>
The status should be release only for final releases, and milestone for any other intermediate release.
If the release script is successful, release artifacts will be waiting for you in the build/distrib directory.
<h3>5. Verify the release</h3>
Check that all zips can be opened correctly, and that running 'ant' after unzipping the source distribution works properly.
You can also do a smoke test with the generated ivy.jar, to see if it is able to resolve properly a basic module (for instance you can run some tutorials provided in the src/example directory in all distributions).
<h3>6. Sign the artifacts</h3>
It's now time to sign the release artifacts and upload them to a location accessible by other Apache commiters.
Here is a simple way to sign the files using gnupg:
<code>
gpg --armor --output file.zip.asc --detach-sig file.zip
</code>
Here is a ruby script you can use to sign the files:
<code>
require 'find'
Find.find('build/distrib') do |f|
`gpg --armor --output #{f}.asc --detach-sig #{f}` if File.file?(f) && ['.zip', '.gz', '.jar', '.pom'].include?(File.extname(f))
end
</code>
Be prepared to enter your passphrase several times if you use this script, gpg will ask for your passphrase for each file to sign.
<h3>7. Prepare the Eclipse update site</h3>
To be able to test the release within IvyDE, it can be deployed in the IvyDE update site. See <a href="http://ant.apache.org/ivy/ivyde/history/trunk/dev/updatesite.html">that page</a> to know how to process.
<h3>8. Publish the release candidate</h3>
All artifacts in <tt>build/distrib/dist</tt> needs to be published on the 'dist' svn of the ASF, in the <b>dev</b> part.
The following command lines should do the job:
<code>
svn checkout -N https://dist.apache.org/repos/dist/dev/ant/ivy build/distrib/dist
svn add build/distrib/dist/*
svn commit build/distrib/dist -m 'Ivy 2.4.0 distribution'
</code>
<h3>9. Publish the Maven artifact to Nexus</h3>
Having your GPG key ID, its password, your apache ID and the associated password, just launch ant and enter the information as required:
<code>
ant -f build-release.xml upload-nexus
</code>
Once uploaded, log in https://repository.apache.org/ with your prefered web browser (use your Apache ID).
You should find there an <i>open</i> repository with the name of the form <tt>orgapacheant-XXXX</tt>. It should contain the Maven artifacts: the pom, the jar, the sources, the javadocs and the md5 and asc files.
Now <i>close</i> the staging repository, with the description "Ivy 2.0.0-beta1". Closing means you finished the upload and some automatic checks will run. You can see them in the <i>Activity</i> tab of the repository.
Once the checks passed, you can find in the <i>Summary</i> the URL of the staging repository. It will something like: https://repository.apache.org/content/repositories/orgapacheant-XXXX/
<h3>10. Create a signed tag</h3>
As soon as you are happy with the artifacts to be released, it is time to tag the release
<code>
git tag -s 2.0.0-beta1 -m 'Release Ivy 2.0.0-beta1'
</code>
And push the changes to the ASF repo
<code>
git push --tags
</code>
<h3>11. Call for a vote to approve the release</h3>
Cast a vote to approve the release on the dev@ant.apache.org mailing list.
Here is an example:
<code>
Subject: [VOTE] Ivy ${version} Release
I have built a release candidate for Ivy ${version}
The svn tag of this release is: https://git-wip-us.apache.org/repos/asf?p=ant-ivy.git;a=tag;h=refs/tags/2.0.0-beta1
The artifacts has been published to: https://dist.apache.org/repos/dist/dev/ant/ivy/$VERSION at revision ${svn-rev-of-the-check-in}
The staging maven repository is availble there: https://repository.apache.org/content/repositories/orgapacheant-XXXX
The Eclipse updatesite has been build there: https://dist.apache.org/repos/dist/dev/ant/ivyde/updatesite/ivy-2.0.0.beta1_20141213170938/
Do you vote for the release of these binaries?
[ ] Yes
[ ] No
Regards,
${me}, Ivy ${version} release manager
</code>
<h3>12. Publish the release</h3>
If the release is approved, it's now time to make it public. The artifacts in the <i>dev</i> part needs to be moved into the <i>release</i> one:
<code>
$ svn mv https://dist.apache.org/repos/dist/dev/ant/ivy/$VERSION https://dist.apache.org/repos/dist/release/ant/ivy/$VERSION
</code>
In order to keep the main dist area of a reasonable size, old releases should be removed. They will disapear from the main dist but will still be available via the <a href="http://archive.apache.org/dist/ant/ivy/">archive</a>. To do so, just use the <tt>svn rm</tt> command against the artifacts or folders to remove.
<h3>13. Promote the Maven staging repository</h3>
Go log in https://repository.apache.org/ with your prefered web browser (use your Apache ID).
Select the appropriate <tt>orgapacheant-XXXX</tt> repository and select the <i>Release</i> action.
<h3>14. Update the web site</h3>
It's time to update the download image used on the home page and the download page. Use site/images/ivy-dl.xcf as a basis if you have <a href="http://www.gimp.org/">gimp</a> installed. Then you can update the home page to refer to this image, and add a news item announcing the new version. Update also the download page with the new image and update the links to the download location (using a search/replace on the html source is recommended for this).
The just release documentation should be added to the site. To do so, you need to:
<ol>
<li>edit the toc.json file in the site component of Ivy</li>
and add a piece of json with a title and an url; note that the version in the url must be the same as the tag in the git repo.
<code>
{
"title":"2.0.0-beta1",
"url":"http://ant.apache.org/ivy/history/2.0.0-beta1/index.html"
}
</code>
<li>generate the part of the site for the new version:</li>
<code>
ant checkout-history -Dhistory.version=2.0.0-beta1
ant generate-history -Dhistory.version=2.0.0-beta1
</code>
<li>if the 'latest-milestone' needs to be update too, run:</li>
<code>
ant checkout-history -Dhistory.version=2.0.0-beta1 -Dtarget.history.folder=latest-milestone
</code>
</ol>
Now let's generate the website with the new toc:
<code>
ant /all generate-site
</code>
You should verify that the site generated in the production directory is OK. You can open the files with your prefered web browser like it was deployed.
And once your happy with it, commit the changes in the source directory, and in the production directoy to get it actually deployed via svnpubsub.
Tip: lot's of files might need to be 'added' to svn. An handy command to <tt>add</tt> any file which is not yet under version control is the following one:
<code>svn add --force sources</code>
<h3>15. Deploy the Eclipse updatesite</h3>
If the Eclipse update site has already been prepared to include that new Ivy release, it is now needed to be deployed. Then follow the deployment instruction on <a href="http://ant.apache.org/ivy/ivyde/history/trunk/dev/updatesite.html">that page</a>.
<h3>16. Announce</h3>
Announce the release on the dev@ant.a.o, ivy-user@ant.a.o, user@ant.apache.org and announce@apache.org mailing lists.
You can also announce the release on popular web sites, like freshmeat.net (xavier is the owner of the Ivy project on freshmeat), javalobby.org, theserverside.com, dzone.com, ...
<h3>17. Update this doc</h3>
If you feel like anything is missing or misleading in this release doc, update it as soon as you encounter the problem.
<h3>18. Merge your modifications back to the master if necessary.</h3>
Modifications on the template files do not need to be merged, but if you had troubles during your release you may want to merge your fixes back to the trunk.
<h3>19. Prepare next release</h3>
In the master branch, update the file version.properties with the version of the next release so that anyone building from the trunk will obtain jar with the correct version number.
If the version just release is a final one (not an alpha, beta or rc), the list of changes should be emptied in doc/release-notes.html, and update there the next expected version. The announcement in the file should also be changed accordingly to the next expected version.
Release the version in <a href="https://issues.apache.org/jira/browse/IVY">jira</a>, and create a new unreleased version for the next planned version.</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>