From Fri Jun 28 07:55:06 2013 Return-Path: X-Original-To: Delivered-To: Received: from ( []) by (Postfix) with SMTP id 69539C52D for ; Fri, 28 Jun 2013 07:55:06 +0000 (UTC) Received: (qmail 10923 invoked by uid 500); 28 Jun 2013 07:55:06 -0000 Delivered-To: Received: (qmail 10853 invoked by uid 500); 28 Jun 2013 07:55:03 -0000 Mailing-List: contact; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: Delivered-To: mailing list Received: (qmail 10843 invoked by uid 99); 28 Jun 2013 07:55:01 -0000 Received: from (HELO cwiki-vm) ( by (qpsmtpd/0.29) with ESMTP; Fri, 28 Jun 2013 07:55:01 +0000 Received: from cwiki-vm (localhost []) by cwiki-vm (Postfix) with ESMTP id 9D8AAA2618 for ; Fri, 28 Jun 2013 07:55:00 +0000 (UTC) Date: Fri, 28 Jun 2013 07:55:00 +0000 (UTC) From: =?UTF-8?Q?Emmanuel_L=C3=A9charny_=28Confluence=29?= To: Message-ID: <1617402918.1282.1372406100010.JavaMail.confluence@cwiki-vm> Subject: [CONF] Apache Directory Development > Releasing ApacheDS MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Auto-Submitted: auto-generated

Releasing ApacheDS

Page edited by Emmanuel L=C3=A9charny

Changes (3)

=20 =20
=20 <= /tr> =20
$ cd ~/apacheds/production/co= ntent/apacheds/gen-docs
$ mkdir <version>
$ svn add <version>


$ cp -r ~/apacheds/trunks/apacheds/target/checkout/target/site/apach= edsdocs ~/apacheds/trunks/apacheds/target/checkout/target/site/apidocs= ~/apacheds/production/content/apacheds/gen-docs/<version>
$ cp -r ~/apacheds/trunks/apa= cheds/target/checkout/target/site/xref ~/apacheds/production/content/apache= ds/gen-docs/<version>

$ svn add <version>/*
$ svn ci <version> -m &= quot;Injected <version> javadocs"

Full Content


This will show you how to build and release the ApacheDS subproject. Ke= ep an eye out for warning and note sections that show version specific diff= erences in this process.

Manual Step

Some things have not yet been automated with maven and require users to = manually edit some files. Below are the steps to follow.

Update th= e apacheds/pom.xml

The current apacheds/pom.xml contains references to LDAP API SNAPSHOTs, = which is not good. You have to bump up those references to the latest LDAP-= API version.

Update service/ and service/apacheds.bat

Edit the files in the service project directory to updat= e the revision numbers used in that file to reference non-SNAPSHOT releases= .

Release process

Since we are using Nexus for releases the release process is as follows = (see also http://www.apac=

1. Test the Project<= /h3>
$ mvn release:prepare -DdryRun=3Dtrue

Replace the version by the new version. Be careful, and remove the 'apac= heds-parent-' which is proposed for the new tag. We should just use the ver= sion number.

2. Deploy a Snapsho= t

$ mvn deploy

This is useful to verify your settings in ~/.m2/settings.xml (Nexus pass= word and GPG key)

3. Prepare the Re= lease

$ mvn release:clean
$ mvn release:prepare

This creates a tag here: http://svn.apac=

4. Stage the Releas= e

$ mvn release:perform

This deploys the release to a staging repository. Go to sitories and close the staging repository.

5. Build the Site

In order to generate the site, you have to comment some modules in the a= pacheds pom.xml file :


Then you can start the maven command :

$ cd target/checkout
$ mvn site

This creates the site and the Javadocs.

3D""Now, you have to sign the sources packag= es which are in apacheds/target/checkout/target.

Use your PGP key ID (the pub key, 4096R/[XXXXXXX] where [XXXXXXX] is the= key ID)

You can get the keys by typing :

gpg --list-keys

You can use this small script that does the job (copy-paste this code in= a file named in your path) :


echo "PGP Key ID: "

echo "PGP Key Password: "
stty -echo
stty echo
echo ""

for FILE in $(find . -maxdepth 1 -not '(' -name "" -or -name ".*" -o=
r -name "*.md5" -or -name "*.sha1" -or -name "*.asc" ')' -and -type f) ; do
    if [ -f "$FILE.asc" ]; then
        echo "Skipping: $FILE"

    echo -n "Signing: $FILE ... "

    # MD5
    if [ ! -f "$FILE.md5" ];
        openssl md5 < "$FILE" | cut "-d " -f2 > "$FILE.md5"
        echo "  - Generated '$FILE.md5'"
        echo "  - Skipped '$FILE.md5' (file already existing)"

    # SHA1
    if [ ! -f "$FILE.sha1" ];
        gpg -v --default-key "$DEFAULT_KEY" --print-md SHA1 "$FILE" > "$=
        echo "  - Generated '$FILE.sha1'"
        echo "  - Skipped '$FILE.sha1' (file already existing)"
    # ASC
    if [ ! -f "$FILE.asc" ];
        echo "$PASSWORD" | gpg --default-key "$DEFAULT_KEY" --detach-sign -=
-armor --no-tty --yes --passphrase-fd 0 "$FILE"
        echo "  - Generated '$FILE.asc'"
        echo "  - Skipped '$FILE.asc' (file already existing)"

Then to sign the packages :

PGP Key ID:=20
<your PGP key>
PGP Key Password:=20
<Your password>

-n Signing: ./apacheds-parent-<version> ...=20
  - Generated './apacheds-parent-<version>'
  - Generated './apacheds-parent-<version>'
  - Generated './apacheds-parent-<version>'

6.= Publish Source Distribution Package

$ cd target/checkout/target
$ scp apacheds-parent-<version>*

7. Test the new v= ersion

The best way to do that is to download the sources, extract them, build = the server and the installers, and check if the installers are correctly wo= rking. Then check that the server is correctly running.

8. Create the i= nstallers

We now have to create the installers. Go into the target/checkout direct= ory and run :

$ cd apacheds/target/checkout/
$ mvn clean install -Pinstallers

This will create the installers in the target/checkout/installers/target= /installers directory

Sign those installers using the script, and copy them in people.=<version>

$ cd apacheds/target/checkout/target/installers/target/installers
$ scp apacheds-<version>*<=

Note : you will need a Debian, a Fedora and a Windows server to generate= dedicated binaries for those platforms, or you can use rpmbuild, dpkg or n= sis if you don't want to use many different servers.

Update your index.html file on to make the= packages visible. Here is an example of possible content :

<h2>Last Directory Server <version> sources tarballs</h=
  <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"apac=
  <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"apac=
  <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"apac=
  <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"apac=
<h2>Last Directory Server <version> installers</h2>
  <h3>Plain 32 bits binary installers</h3>
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
  <h3>Plain 64 bits installers</h3>
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=
    <img src=3D"/icons/compressed.gif" alt=3D"[   ]"><a href=3D"ap=

9. Vote

Start a 72h vote at the dev mailing list.

10. Release

If the vote succeeds Apacheds project can be released.

Go to https://repository.apache.o= rg/index.html#stagingRepositories and release the staging repository so= all artifacts are published to Maven central.

Move the distribution packages (sources and binaries) to the dist SVN re= pository: https://di=$(version)

The best solution would be to checkout the directory in people.apache.or= g, to copy the packages in the right place, and to check in the changes :

$ ssh
# svn co
/ apacheds-dist
# cd apacheds-dist
# mkdir <version>
# cp ../public_html/apacheds-<version>/* <version>
# svn ci <version>
# exit

The packages should now be available on http= ://<version>

11. Deplo= y the Javadocs and XRef

We now can deploy the generated Javadoc and cross-reference pages. They = are generated in the following directory :


We will copy two directories :


*Staging or Production?*

Those files will be stored on the production server only !!! And some ex= tra caution ust be taken not to delete them when we will publish the stagin= g site too...

First of all, you must checkout the two CMS store for the site : staging= and revision.

$ cd ~/apacheds
$ svn co
runk staging
$ svn co p=

Now, you will first add the directory for the newly generated version :<= /p>

$ cd ~/apacheds/production/content/apacheds/gen-docs
$ mkdir <version>

Then copy the generated docs :

$ cp -r ~/apacheds/trunks/apacheds/target/checkout/target/site/apidocs=
$ cp -r ~/apacheds/trunks/apacheds/target/checkout/target/site/xref ~/apach=

You have to check in those directories :

$ svn add <version>
$ svn ci <version> -m "Injected <version> javadocs"

Now, you have to update the staging site :


This file list the file on the production site that will not be override= n by the publication of the staging site. It has to be updated

$ cd ~/apacheds/staging/content/
$ vi extpaths.txt

Add the following line :

# Apacheds

then save and check in the file .htaccess

We also have to update this file :

$ cd ~/apacheds/staging/content/apacheds/gen-docs
$ vi .htaccess

And update the two last lines to refer to the version you've just releas= ed :

RewriteRule ^latest$ <version>/
RewriteRule ^latest/(.*)$ <version>/$1

Save and commit the file.

12. Update the we= b site

You can now update the site, add a news on the front page, and publish t= he site.

13. Inform the w= orld !

After 24h, you can now inform the world about the release.

Send a mail to the users and dev mailing list, and one to the announce@a=

You are done !