blob: c66ba2f7d5f4b62a5cd03fef83278ff2902280d6 [file] [log] [blame]
= Creating an official Apache James release
Read details about http://www.apache.org/dev/publishing-maven-artifacts.html[Publishing Maven releases to Maven Central Repository]
In short, just follow the 'standard' process:
* prepare pom for release
* publish snapshot
* prepare release
* stage the release for a vote (don't forget to close the staging repository)
* vote
* release
Don't forget to add your key to https://downloads.apache.org/james/KEYS
$ ssh people.apache.org
$ cd /www/www.apache.org/dist/james
== Release cheat sheet
First, discuss your intention to perform a release on server-dev mailing list, to ensure a consensus would be reached
before starting this time-consuming process.
Then you can prepare the release materials:
* Ensure the `CHANGELOG.md` and `upgrade-instructions.md` files are up to date.
* Freeze your version in it and initiate a new iteration.
* Write a blog post within `/src/homepage/_post` about your release.
* Update the documentation website `/docs`, `src/site`, and `README.md` to point to your new release.
* Update the `/dockerfiles`
Open a pull request to validate the changes.
=== Running a maven release
Once merged, it is time for the maven release.
Set up your maven configuration in `~/.m2/settings.xml` :
[source,bash]
----
<settings>
<servers>
<server>
<id>apache.snapshots.https</id>
<username>apacheId</username>
<password>xxxxxx</password>
</server>
<!-- To stage a release of some part of Maven -->
<server>
<id>apache.releases.https</id>
<username>apacheId</username>
<password>xxxxxxxx</password>
</server>
<server>
<id>svn.apache.org</id>
<username>apacheId</username>
<password>xxxxxx</password>
</server>
</servers>
</settings>
----
Ensure that released branch HEAD have a clean green build on the CI.
Run these commands to perform a release, from the master branch:
[source,bash]
----
mvn clean install -DskipTests -Djib.skip -Dmaven.javadoc.skip=true -T 4
mvn deploy -DskipTests -Dskip.jib -Dmaven.javadoc.skip=true -T 8
mvn release:clean
mvn release:prepare -Darguments="-Dmaven.javadoc.skip=true -DskipTests -Dskip.jib" -DautoVersionSubmodules=true
mvn release:perform -Darguments="-Dmaven.javadoc.skip=true -DskipTests -Dskip.jib" -DautoVersionSubmodules=true
----
Failure to react when being prompted for git or GPG credentials might abort the release. GPG agent with a reasonable session time can be used to unlock the key before hand and reduce this risk.
Then visit https://repository.apache.org/#stagingRepositories[Apache maven repository], go in staging repository, close
the corresponding artifact before performing the vote.
=== Voting procedure
Send the following voting template on the server-dev mailing list to call the vote:
[source]
----
Subject: Call for vote: Apache James x.x.x
Hi,
I would like to propose a new vote for x.x.x release of the Apache James server.
You can find:
- The maven release staged in repository.apache.org as the
artifact #xxx:
https://repository.apache.org/content/repositories/orgapachejames-xxx/
- The changelog for
x.x.x:
https://github.com/apache/james-project/blob/master/CHANGELOG.md
- The compatibility instructions/upgrade
recommendation:
https://github.com/apache/james-project/blob/master/upgrade-instructions.md#360-version
[You can comment on major changes ]
Voting rules:
- This is a majority approval: this release may not be vetoed.
- A quorum of 3 binding votes is required
- The vote starts at XXXXXX xxxth of xxxxx xxxx, xxxx UTC+x
- The vote ends at XXXXXX xxxth of xxxxx xxxx, xxxx UTC+x
You can answer to it just with +1 and -1. Down-votes may be motivated.
3 binding votes are expected move forward on this release.
Cheers,
PMC member name
----
After the voting period, do the voting aftermaths. Reply in the voting thread:
[source]
----
Hi all,
I am happy to announce you the vote for the x.x.x release did succeed.
The release received X positive votes, X of them being binding.
Thanks to all contributors, developers and committers who made this
possible!
In the coming hours, I will finalize the release process, namely:
- Publish the maven artifacts
- Upgrade the download page and the (old) website
- Announce the release
Cheers,
PMC member name
----
=== Convenience downloads for your release
Clone this SVN repository: `https://dist.apache.org/repos/dist/release/james`
Create a folder for your release:
[source]
----
mkdir server/3.x.x
cd server/3.x.x
svn add .
----
Move the release zipped data in this folder:
- The convenience ZIPs needs to be downloaded from there staged repository. This includes server/app.
- sources can be obtained from GitHub tag
I use the following script to set up the uploads:
[source]
----
% cat /usr/local/bin/auto_sig
#/bin/bash
# This quick bash scipt intend to help commiters
# preparing artifacts for SVN upload.
#
# Performs:
# - Hashing (sha1 + sha512)
# - Signing (main)
# - Position SVN properties
#
# $1: file to prepare
# $2: Key footprint to use for signing
sha512sum $1 > $1.sha512
gpg -u $2 --output $1.asc --detach-sig $1
svn add $1
svn propset svn:mime-type application/octet-stream $1
svn add $1.sha512
svn add $1.asc
svn propset svn:mime-type application/octet-stream $1.asc
----
Once done it is time to commit! `svn commit -m "Upload convenience artifacts for James release 3.x.x"`
The convenience binaries will then be available. Check that the links of the download page works.
Cleanup: Only supported release lines should be maintained. Archive the previous release by deleting them from `repos/dist/release` - the INFRA will automatically move them to archive:
[source]
----
svn rm 3.5.0
svn commit -m "Archive James release 3.5.0"
----
=== Push docker containers
WARNING: Docker images are not considered as an official Apache release materials yet the Apache JAMES PMC members decided
to offer their community with a set of maintained docker images, for convenience.
Docker images includes:
- apache/james:memory-3.x.x built from https://github.com/apache/james-project/tree/master/server/apps/memory-app
- apache/james:jpa-3.x.x built from https://github.com/apache/james-project/tree/master/server/apps/jpa-app
- apache/james:demo-3.x.x built from https://github.com/apache/james-project/tree/master/server/apps/provisioned-app
- apache/james:cassandra-3.x.x build from https://github.com/apache/james-project/tree/master/server/apps/cassandra-app
- apache/james:distributed-3.x.x built from https://github.com/apache/james-project/tree/master/dockerfiles/server/apps/distributed-app
As a committer contact the INFRA and hand them your docker-hub account to get the permission.
=== Other steps
Once done:
* Deploy website changes
* Send an announce on server-user
* Send an Apache foundation wide announce