 -----
 Archiva release process
 -----
 -----
 2012-01-19
 -----

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Archiva release process

 [[1]] Post to the dev list a few days before you plan to do an Archiva release

 [[2]] Recreate the staging repository on archiva-repository.apache.org - make sure that it is not scanned (so that .index* is not created).
       Your maven setting must contains the entry to be able to deploy.

+-------------
   <server>
     <id>archiva-repository.releases</id>
     <username></username>
     <password></password>
   </server>
+-------------

 [[3]] If there are changes in the parent pom, release parent pom – {{https://gitbox.apache.org/repos/asf/archiva-parent.git}}

   * mvn release:prepare (verify that it has been properly tagged)

   * mvn release:perform (verify that it has been deployed correctly in the staging repo)

 [[4]] Update the parent pom version of archiva – {{https://gitbox.apache.org/repos/asf/archiva.git}}

   * change the parent pom version to the archiva-parent version that has just been released

   * commit the changes made

 [[5]] Update the release notes and the site.xml for version changes in archiva-docs

 [[6]] Verify that the webapp-tests are building successfully. \
     Since it is in a separate profile but inside the Archiva source tree, it will not be released but will still be included in the release tag. If some tests are failing, comment it out first so that only the passing tests are executed when the webapp-tests module are built from the tag.

 [[7]] Release archiva.\
    You should have a GPG agent running (preferred), and confirm it works by running "gpg -ab" (type some text and press Ctrl-D).
    If you do not have a GPG agent running, make sure that you have the "apache-release" profile set in your settings.xml as shown below.

+-------------
<profile>
  <id>apache-release</id>
  <properties>
    <gpg.passphrase>[GPG_PASSWORD]</gpg.passphrase>
  </properties>
</profile>
+-------------

    Set your user credentials for the stage repo in the <servers> section of
    your settings.xml for {{archiva-repository.releases}}.

    Prepare your environment:
    For Archiva 2.x you have to use two different JDKs for the process. JDK 7 is used for the prepare release (compile) 
    and JDK 8 for uploading (supported SSL versions)

+-------------
export JAVA_HOME=<PATH_TO_JDK7>
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_OPTS="-Xmx6144m -XX:MaxPermSize=512m" # It may work with less heap, but this is a safe value
export JAVA_OPT="-Xmx6144m -XX:MaxPermSize=512m" 
+-------------

    Execute 

+-------------
mvn release:prepare
+-------------
    Check that it has been properly tagged. The tag name must be.. archiva-[VERSION].

    You can rollback with `mvn release:rollback`.

    If all works fine, set JDK 8 and execute the release:perform task

+-------------
export JAVA_HOME=<PATH_TO_JDK8>
export PATH=$JAVA_HOME/bin:$PATH
+-------------
+-------------
mvn release:perform
+-------------

    The perform task will push to the repository, if it was successful. After successfully running this task,
    it's not possible to roll back.

    Download the uploaded files via wget:

+-------------
ARCHV="2.2.4" # Enter the new archiva version
RELEASE_URL="http://archiva-repository.apache.org/archiva/repository/archiva-releases-stage"
wget ${RELEASE_URL}/org/apache/archiva/archiva-jetty/${ARCHV}/archiva-jetty-${ARCHV}-bin.tar.gz
wget ${RELEASE_URL}/org/apache/archiva/archiva-jetty/${ARCHV}/archiva-jetty-${ARCHV}-bin.tar.gz.asc
wget ${RELEASE_URL}/org/apache/archiva/archiva-jetty/${ARCHV}/archiva-jetty-${ARCHV}-bin.zip
wget ${RELEASE_URL}/org/apache/archiva/archiva-jetty/${ARCHV}/archiva-jetty-${ARCHV}-bin.zip.asc
# Verify the signatures:
gpg -v archiva-jetty-${ARCHV}-bin.zip.asc
gpg -v archiva-jetty-${ARCHV}-bin.tar.gz.asc
+-------------

    The documentation is deployed as part of the process to the final location for review in the vote:

+-------------
git checkout archiva-${ARCHV} # Checkout the release version of archiva
cd archiva-doc
mvn site:site
mvn site:stage  # Check the content in target/staging
cp -r target/staging/* <web-content-git>/docs/${ARCHV}/ # Copy to the git web content repository
+-------------

    If the vote doesn't pass, the documentation will need to be removed from the server for redeployment.

    Commit the sources and binaries from <<<org/apache/archiva/archiva-jetty>>> and <<<org/apache/archiva/archiva>>> to the svn distribution tree.
    First in dev tree: <<<https://dist.apache.org/repos/dist/dev/archiva/>>>

+-------------
svn co https://dist.apache.org/repos/dist/dev/archiva/ archiva-dev-release
cd archiva-dev-release
sh ./release-script-svn.sh $ARCHV ${RELEASE_URL}/

# For parent pom or redback:
POMV=18  # New Parent POM version
sh ./release-script-parent-pom.sh $POMV ${RELEASE_URL}/
REDBV=2.6 # New redback version
sh ./release-script-redback-svn.sh $REDBV ${RELEASE_URL}/
+-------------

  If the vote pass they will be copied to release tree: <<<https://dist.apache.org/repos/dist/release/archiva>>>


  Call for a vote in the dev list and wait for 72 hrs. for the vote results. 3 binding votes are necessary for the release to be finalized.
  If the vote fails or needs to be canceled, the version number should not be re-used if the version was made available for public download.
  After the vote has passed, move the files from dist dev to dist release:

+-------------
svn mv https://dist.apache.org/repos/dist/dev/archiva/${ARCHV} https://dist.apache.org/repos/dist/release/archiva/

# Move also the POM and Redback and Redback Component releases, if there are new ones.
+-------------

  Merge the archiva-releases-stage to archiva-releases on archiva-repository.apache.org

  To sync the jars to Maven Central, you need to merge the repository archiva-releases-stage to "Central Rsync Repository"

  Mark the appropriate release version in JIRA as complete.

  Update the archiva site ({{https://gitbox.apache.org/repos/asf/archiva-site.git}}) for the versions and release notes URL:

  Mostly these properties of the pom.xml should be edited:

+-------------
  <archivaReleaseVersion>2.2.4</archivaReleaseVersion>
  <archivaReleaseDate>16th May 2019</archivaReleaseDate>
  <archivaCurrentDevVersion>3.0.0-SNAPSHOT</archivaCurrentDevVersion>
+-------------

  Run <<deploySite.sh>>. The script will prepare the site locally and provide information how to check the content before pushing to the remote repository.

  Once mirroring done (can be 24H): remove previous versions from {{https://dist.apache.org/repos/dist/release/archiva/}}

  Publish the reference docs (sh ./deploySite.sh in the archiva-modules directory) from the release tag.
  You may have to exclude the archiva-webapp module to do this.

  Send out an announcement of the release to:

  * users@archiva.apache.org

  * users@maven.apache.org

  * announce@apache.org

  [] 

  If there are security incidents that should be published after release, please check the Apache information {{http://www.apache.org/security/committers.html}}
  for further actions.


