blob: 3e06700e37365da900ff8f6b8138fb2c897e5cba [file] [log] [blame]
<!--
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.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
<title>JDO Release Process</title>
</head>
<body lang="en-US">
<ul>
<li><a href="#procoverview">Overview of the process</a></li>
<li><a href="#procdetail">Detailed process steps</a></li>
<li><a href="#site">Site updates</a></li>
<li><a href="#postrelease">Post release modifications and
documentation</a></li>
</ul>
<h1>How to Release an Apache JDO Distribution</h1>
<p> A distribution of JDO is built from a branch of svn. It is
copied into a release directory, from which it is staged and
tested prior to release. Once released, it is propagated to mirror
servers around the world. </p>
<p> The process is performed by a release manager with cooperation
from testers in the community. </p>
<a name="procoverview"></a>
<h2>Overview of the process</h2>
<p> The community first decides on the name of the release. The
format of the name is <i>spec-number</i>.<i>major</i>.<i>minor</i>.
A trailing <i>minor</i> number with a zero value is right
trimmed, so there might be a 2.0.1 but not a 2.0.0. </p>
<p> Interim releases prior to final release are identified by a
suffix on the release number. Common suffixes include: -alpha,
-beta, -beta2, -rc1, -rc2. Generally, the suffixes are part of the
release plan, and the contents of each suffix release are agreed
by the community. There might be significant changes in
functionality between the suffix releases. Each suffix release
goes through the process documented here. </p>
<p> The release manager makes a branch from the trunk (for a major
release) or from another branch (for a minor release) to create a
branch with the source of the distribution. </p>
<p> The release manager follows the Apache process detailed below
to build and deploy a release. </p>
<p> The release manager calls for the community to test the release.
<p> The community tests the release. If necessary, cycle until all
issues are resolved. </p>
<p> The release manager closes the staged repository</p>
<p> The release manager calls for a vote to release by sending a
message to the community and forwarding the message to the pmc. </p>
<p> The community votes on the release. If necessary, cycle until
issues are resolved. </p>
<p> The release manager notifies the pmc of the successful vote
outcome. Note that a successful vote includes three +1 votes from
PMC members. </p>
<p> The release manager notifies the worldwide community of the
availability of the release. </p>
<p> The release manager updates the JDO web sites
(http://db.apache.org/jdo/index.html, http://java.sun.com/jdo/). </p>
<p> If bugs are found or test challenges are sustained after the
release is approved and distributed, the release manager creates a
new branch to address the bugs found. </p>
<a name="procdetail"></a>
<h2>Detailed process steps</h2>
<p> </p>
<ol>
<li>You might want to run <a href="http://creadur.apache.org/rat">Apache Rat</a>
to check the sources for any lisence issues.
<pre>mvn apache-rat:check</pre>
<li>Create a branch from the trunk and increment the spec or major
number. For example, create a 3.1 branch from the trunk.
<pre>cd jdo
svn copy https://svn.apache.org/repos/asf/db/jdo/trunk \
https://svn.apache.org/repos/asf/db/jdo/branches/3.1
</pre>
</li>
<li>In trunk, update version numbers in the following files in
preparation for the next release:
<dl>
<dt>trunk/README.html </dt>
<dd>File names and version references in the Overview section
</dd>
<dt>trunk/tck/RunRules.html </dt>
<dd>Update version number and date</dd>
</dl>
Use the maven version plug-in to update version numbers in the
pom.xml files at the root and subproject levels.
</li>
<li>If needed, update the dependency to the RI, DataNucleus, in
the tck pom.xml.</li>
<li>If needed, apply patches from the trunk or branches to the new
branch.</li>
<li>Update version numbers where necessary in projects to be
released, if these changes haven't been made previously. Check
the following files:
<dl>
<dt>branches/<i>version</i>/README.html </dt>
<dd>File names and version references in the Overview section
(for a major release only.)
</dd>
<dt>branches/<i>version</i>/tck/RunRules.html </dt>
<dd>Update version number</dd>
</dl>
</li>
<li>Check the scm settings in the pom.xml files in the new branch and
make sure they refer the new branch (instead of the trunk).
</li>
<li>Follow the instructions at <a href="http://www.apache.org/dev/publishing-maven-artifacts.html">
Publishing Maven Artifacts</a> to set up your development environment.
</li>
<li>Copy the JNDI implementation jars (providerutil.jar and
fscontext.jar) to the branch lib/ext directory. This is needed
to test the tck before distributing it.<b><br>
Do not check these in to SVN</b> </li>
<li>Build the distribution with the following command:
<pre>
mvn clean install -Papache-release
</pre>
This creates the .jar and .pom files
in the target directory of each subproject.
Be prepared to enter your key passcode when prompted. This happens multiple times.
</li>
<li>Run <a href="http://creadur.apache.org/rat">Apache Rat</a> on the release. </li>
</li>
<li>
Do a dry run prepare and deployment of a snapshot release.
You might want to do this in a fresh workspace, since you cannot have local modifications
when preparing a release. The files in lib/ext and lib/jdori count as local modifications.
Be prepared to enter your key passcode when prompted. This happens multiple times.
<pre>
mvn release:prepare -Papache-release -DautoVersionSubmodules=true -DdryRun=true -Dresume=false
mvn deploy -Papache-release
</pre>
Check the artifacts at <a href="https://repository.apache.org/content/repositories/snapshots/">
the Maven release repository</a>
</li>
<li>
Prepare and release the artifacts. There are interoperability issues with the maven release plugin and cygwin, so if on Windows, use a Windows command window for this step and the following one.
<pre>
mvn release:clean -Papache-release
mvn release:prepare -Papache-release
</pre>
Note: If you're located in Europe then release:prepare may fail with 'Unable to tag SCM' and ' svn: No such revision X '. Wait 10 seconds and run mvn release:prepare again.
</li>
<li>
Stage the release for a vote.
<pre>
mvn release:perform -Papache-release
</pre>
</li>
<li>Go to <a href="https://repository.apache.org/index.html">the Nexus repository</a>,
login with your apache account, click on Staging Repositories in the menu on the left
and close the staged repository. Press the refresh button to see the new status 'closed'.
See <a href="http://books.sonatype.com/nexus-book/reference/staging-repositories.html">
11.4.1. Closing an Open Repository</a> for details.
</li>
<li>Send an announcement to test the release to the
jdo-dev@db.apache.org alias. If problems are found, fix and
repeat.</li>
<li>Send an announcement to vote on the release to the
jdo-dev@db.apache.org alias. The message subject line contains
[VOTE]. Forward the [VOTE] message to private@db.apache.org.
Iterate until you get a successful vote. Mail the results of the
vote to jdo-dev@db.apache.org, cc: general@db.apache.org, and
include [VOTE] [RESULTS] in the subject line.</li>
<li>After testing and voting is complete,
follow the instructions at
<a href="http://books.sonatype.com/nexus-book/reference/staging-repositories.html">
11.4.3. Releasing a Staging Repository</a>
to release the artifacts.
</li>
<li>Update the distribution repository at http://apache.org/dist/db/jdo/
by adding the new release directory to the svnpubsub directory.
Check out the repository at
https://dist.apache.org/repos/dist/release/db/jdo and add the
new release with all artifacts under the new directory. Make sure
that the key used to sign the artifacts is included in the KEYS file.
Committing the new directory will trigger an update to the mirrors.
</li>
<li>If the release is a bug fix release to a maintenance release,
update README.txt in the parent branch, adding the following
line: "This release has been deprecated. Please use version
2.x.y.", with a link to the svn web interface for that version.</li>
<li>After updating the site (below), announce the release to the
Apache community via email to announce@apache.org This must be
sent from an @apache.org email address. *** Be aware that by
sending to this address you will be bombarded with piles of
emails from people with "I'm out of the Office" as if you really
cared ***</li>
</ol>
<a name="site"></a>
<h2>Site updates</h2>
<ol>
<li>Update the Apache JDO web site to point the downloads page to
the release.
<ol>
<li>In site/src/site/xdoc/releases create release-<i>N.n</i>.xml. Edit the
release numbers and the link to the release notes. You will
need to change the '&amp;'s in the URL to "&amp;amp;"</li>
<li>In site/src/site/resources/releases create release-<i>N.n</i>.cgi. The .cgi
file contents are identical to the other .cgi files in the
release directory; only the file name differs.</li>
<li>Edit site/src/site/xdoc/downloads.xml to link to the new release
page .cgi document.</li>
<li>Build and test as described in the site/HOWTO document.
Note that the cgi page will not be active until it is on the
server, so can't really be tested.</li>
<li>Add the new files to the subversion repository.
<pre>svn add site/src/site/xdoc/releases/release-<i>N.n</i>.xml
svn add site/docs/releases/release-<i>N.n</i>.html
svn add site/src/site/resources/releases/release-<i>N.n</i>.cgi
svn add site/docs/releases/release-<i>N.n</i>.cgi
</pre>
</li>
<li>Set the svn properties svn:eol-style to native and
svn:executable to true for the .cgi files.</li>
</ol>
</li>
<li>Change the link to RunRules on the <a href="http://db.apache.org/jdo/tck.html">TCK</a>
page to link to the RunRules.html file of the latest release.</li>
<li>Update the news list on the site home page to announce the new
release.</li>
<li>Update the specification page to link to the new specification
pdf document. If the release has been approved by the JCP, link
to the documentation page of the JCP web site.
If the release has not been approved by the JCP,
link to the .pdf in the JDO source repository.</li>
<li>Add the javadoc for the release to the site.
<ol>
<li>Make a new directory under site/docs for the release, e.g.
api2.1. We'll call it <i>docsdir</i>.</li>
<li>Download the javadoc artifact from the repository and copy it to <i>docsdir</i>.</li>
<li>Unzip it in <i>docsdir</i>.</li>
<li>Do svn add on <i>docsdir</i>.</li>
<li>Edit xdocs/javadoc.xml and add links to the new javadoc.</li>
</ol>
</li>
<li> Build and test. Follow the instructions in site/HOWTO to push
the site changes to the Apache web site.</li>
</ol>
<a name="postrelease"></a>
<h2>Post release modifications and documentation</h2>
Follow this procedure if a significant bug is found or if the TCK
must be modified because a test challenge is found to be valid.
<ol>
<li>Create a new branch from the release branch, incrementing the
minor number. For example, create a branch named 2.1.1, from the
2.1 branch. </li>
<li>Merge bug fixes or other modifications into the new branch. </li>
<li> In the new branch, modify trunk/README.txt to include a
section on bug fixes since the 2.1 release, and to suggest
checking out the source from a bug-fix branch to get the fixes
listed. </li>
<li> Link to this README in the web interface to svn from the .cgi
download page and from http://db.apache.org/jdo/tck.html. </li>
</ol>
</body>
</html>