---+ Apache Tashi release policy

This document is based on the draft incubator release management 
document available at 
http://incubator.apache.org/guides/releasemanagement.html

---++ Apache RAT testing

You could use Apache RAT to examine for any problems like required files 
which are missing, or which ones don't include an Apache header.

To run RAT, obtain the binary release of Apache RAT, untar it and run 
java -jar apache-rat-0.8/apache-rat-0.8.jar <top directory>

---++ Uploading artifacts

---+++ Distribution

The destination for an artifact is www.apache.org/dist/incubator/tashi . 
This location is accessible at /www/www.apache.org/dist/incubator/tashi 
on people.apache.org.

---+++ Mirroring

Releases must be mirrored. Checksums, KEYS, signatures are mirrored too. 
Per the release signing guide, the mirrored copies of these files are 
non-authoritative. In-site links must point to the originals on 
www.apache.org.

---+++ Archiving

All releases must be archived for future reference. Archives are stored 
under http://archive.apache.org/dist/incubator/tashi. This archiving 
happens automatially for all artifacts in 
www.apache.org/dist/incubator/tashi.

Old releases should be removed from www.apache.org/dist/incubator/tashi. 
The release will then only remain on the archive server.

---+++ Permissions

All files should be owned by the "incubator" group. Permissions should 
be <user>:incubator 664, or <user>:incubator 775 respectively for 
directories.

---+++ Checksums and signatures

The KEYS file should contain the public keys for code signers. The 
private key needs to be kept safe. Code-signing keys should be linked to 
the Apache web of trust.

---+++ Modifications

Uploaded artifacts must never be modified. Excluded from this policy are 
README's, NOTES, KEYS and the like.

---++ Distribution checklist

   * Destination: www.apache.org/dist/incubator/tashi
   * umask 022
   * group owner is "incubator"
   * Checksums and signatures match to artifact
   * Old release archived
   * Links to KEYS, signatures and checksums point to www.apache.org
   * Package into .tar.gz

---++ Dealing with defects

Uploaded artifacts must never be modified (repeat). A new numbered 
release should be generated. (Assume this will require a vote)

Serious defects may call for a release withdrawal by archiving, 
announcement on the mailing lists and adding a notice to the download 
page.

---++ Release checklist

   * Packages:
      * Artifacts unpack correctly?
      * Documentation is readable?
      * For distributed libraries:
         * Licenses are included, along with NOTICEs?
         * Licenses comply with incubator policy?
         * LICENSE and NOTICE contain required sections?
         * Crypto code satisfies export regulations?
      * Copyright notices:
         * Source files include license boilerplate?
         * Source files with licenses not in LICENSE?
         * Check policy on header file compliance?
      * Incubator requirements:
         * DISCLAIMER included?
         * Check legal STATUS document?
      * Source package:
         * Build instructions exist and work?
         * License headers applied correctly?
         * Version control cruft cleaned?
      * Keys:
         * KEYS file contains proper signing keys?
         * Signing key is available on public keyservers?
      * Version control:
         * Release was built from specific tag?
         * Tag named "APACHE_TASHI_<version>"?
      * Miscellaneous:
         * Deprecations, incompatibilities documented in RELEASE_NOTES?

---++ Naming

The release should be named apache-tashi-<version>-incubating. <version> 
should be a six-digit year-and-month, optionally followed by a period 
and number in case of bug fixes applied to the base version.

---++ Guidelines

In case of need for additional guidance, the following mailing lists are 
helpful:

   * legal-discuss: for licensing issues
   * infrastructure-issues: for issues pertaining to release infrastructure

---++ Announcements

Announce releases via apache.org address. Announcements should be plain
text signed.

---++ Release procedure

Releases must be approved by Incubator PMC.

A release should first be proposed to the PPMC. The proposal should include:-
   * Link to release candidate artifact (in apache home directory)
   * Link to tag from which the release was built

Should the PPMC vote pass, call for a vote on incubator.apache.org. 
Additionally to the above provide a link to the PPMC voting thread.

Remove release candidate artifacts on conclusion of voting.

---++ Invocation

Oh god...
