================================================================================
  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.
Do not use Apache Maven 3.8.2 onwards due to
    https://issues.apache.org/jira/browse/MNG-7316

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_VERSION 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
