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


How to do a Apache Commons Daemon release
=========================================

Review open issues in Jira.
Review open PRs on GitHub.
Update to latest commons-parent and fix any issues.

Use Java 8.

If you haven't already, add your public PGP key to KEYS.


Update version numbers as needed
--------------------------------

Set the RC property (before tagging):
 - /pom.xml                                     (commons.rc.version)

Update the old version property (before tagging):
 - /pom.xml                                     (commons.bc.version)

Do a find for all the files which include the previous version string
and replace it with the new version.

These include:
Before tagging:
 - /RELEASE-NOTES.txt                           (version)
 - /pom.xml                                     (version & commons.release.version)
 - /src/changes/changes.xml                     (Set date)
 - /src/native/unix/man/jsvc1.xml               (Set date & version)
 - /src/native/unix/native/version.h            (version)
 - /src/native/windows/apps/prunmgr/prunmgr.h   (version)
 - /src/native/windows/apps/prunmgr/prunmgr.rc  (version x3)
 - /src/native/windows/apps/prunsrv/prunsrv.h   (version)
 - /src/native/windows/apps/prunsrv/prunsrv.rc  (version x2)
 - /src/samples/SimpleApplication.sh            (version)
 - /src/site/xdoc/binaries.xml                  (version)
Only in tag:
 - /pom.xml                                     (remove -SNAPSHOT)
 - /src/native/unix/native/version.h            (JSVC_IS_DEV_VERION 0)

Search for the text "THIS FILE IS GENERATED BY" and regenerate the generated
files.


Checkout
--------

Check out a clean copy of commons daemon from git to make sure you don't have
any lingering configure or build files. This will make sure that the source
distribution created is clean.

We assume, that you checked out
https://gitbox.apache.org/repos/asf/commons-daemon.git
to a directory named daemon. All further path names will be relative to this
directory.

If building from an existing checkout, clean the build directories:
mvn clean


Create native build scripts
---------------------------

cd src/native/unix
sh support/buildconf.sh


Native build
------------

Build and sign the Windows binaries.
Place the signed Windows binaries in:
target/prunsrv.exe
target/prunmgr.exe
target/amd64/prunsrv.exe

Note: `nmake -f Makefile install` will place these files in the correct
      locations but they will be unsigned


Maven tasks
-----------

To deploy the Java jars to the Nexus staging repo:

mvn deploy -Dcommons.release.isDistModule=true -Prelease [-Ptest-deploy]

The test-deploy profile will deploy to target/deploy; omit for the live deploy

Note: do not use clean in the same invocation.
Remove the following artifacts and associated hashes/sigs from the Nexus staging
repository before closing the repository:
- tests.jar         (there are no tests, just a simple sample)
- test-sources.jar  (there are no tests, just a simple sample)
Do not remove the binary distributions since some users depend on Maven Central
to obtain these.

Note the Nexus repository ID (the number at the end of the repository name).

Generate the release vote text with:

mvn commons-release:vote-txt -Dcommons.nexus.repo.id=<repository-id>

The following manual changes will be required to the generated VOTE.txt:
- remove ALv2 header
- transfer email headers to "To" and "Subject"
- edit the first line to reflect what has actually changed
- Correct the link to the Maven artifacts ".../org/apache/commons/..." ->
  ".../commons-daemon/..."
  https://repository.apache.org/content/repositories/orgapachecommons-1538/org/apache/commons/commons-daemon/1.2.4
- remove comments above the hashes, hashes for .asc files, hashes for the
  tests.jar and test-sources.jar and the comment that .asc hashes aren't
  required
- if the site hasn't been added to dist, remove the sections on changes, site,
  CLIRR, JApiCmp and RAT


Updating the site
-----------------

See https://commons.apache.org/site-publish.html
