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

      https://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.
Use Maven 3.8.7 onwards

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

Update the project.build.outputTimestamp property in pom.xml


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. See src/native/windows/README.txt
Place the signed Windows binaries in:
target/prunsrv.exe
target/prunmgr.exe
target/amd64/prunsrv.exe
target/arm64/prunsrv.exe
target/arm64/prunmgr.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
- remove hashes for the tests.jar and test-sources.jar
- 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
