Instructions for the httpd-apreq Release Manager (RM)

1. Prep the package for CPAN by running:

        % sh BUILD.sh
        % perl Makefile.PL
        % make dist

   This will generate a libapreq2-2.xx.tar.gz candidate in the 
   current directory.   You should keep this source tree
   intact to generate the final release.

2. Test the generated file's './configure ...' build and
   'perl Makefile.PL ...' build. Make sure all perl tests pass.

3. Upload a release candidate to httpd.apache.org/~username
   and post a candidate announcement to apreq-dev@.  The RM
   or any other apreq committer may call for a formal vote on the 
   candidate, but a formal vote is not a requirement for the release. 
   Also, it is strongly recommended that the RM crosspost the 
   candidate announcement to the modperl@ list, to solicit feedback
   from a much larger audience.

4. Give the mailing list participants 48-72 hours to comment or
   call-for-vote on the candidate.  Unless there is a formal vote,
   the RM may apply any suggested patches to this candidate and 
   proceed with its release.  However if there is a call-for-vote, 
   then tally the results after 72 hours of the call.  If there is
   a "majority consensus" (three +1 and more +1s than -1s) among the 
   committers, the RM may proceed with the release. Otherwise the 
   RM must abandon this candidate and start fresh.

5. The candidate is ok. Now return to the original source tree
   and edit ./Changes:

   =item 2.09 - <Today's Date>

   libapreq2-2.09 released.

6.  Tag the tree, s/./_/g in the version number, and roll the release.

    % svn copy . https://svn.apache.org/repos/asf/httpd/apreq/tags/v2_09
    % make dist

7. Test the release package, repeating step 2.  If all tests pass,
   sign it via gpg:

     % gpg --detach-sign --armor libapreq2-2.09.tar.gz

   or pgp:

    unix50i1b: % pgps -b --armor libapreq2-2.09.tar.gz
    other:     % pgp -sba libapreq2-2.09.tar.gz

8. Upload (scp) the package and signature to www.apache.org
   for distribution:

    % scp libapreq2-2.09.tar.gz* \
      <username>@www.apache.org:/www/www.apache.org/dist/httpd/libapreq/

   Ask another developer to confirm the uploaded signature is ok 

    ---------------------------------------------------
    Subject: please verify sig of libapreq2-2.09.tar.gz
    [Name], could you please verify the sig:

    http://www.apache.org/dist/httpd/libapreq/libapreq2-2.09.tar.gz
    http://www.apache.org/dist/httpd/libapreq/libapreq2-2.09.tar.gz.asc

    Thanks. 

    via gpg:

    % gpg --verify libapreq2-2.09.tar.gz.asc

    or pgp:

    unix50i1b: % pgpv libapreq2-2.09.tar.gz.asc
    other:     % pgp libapreq2-2.09.tar.gz.asc

    Check that your public key is among those listed in the
   /www/www.apache.org/dist/httpd/KEYS file.
    ---------------------------------------------------

9. Upload the package to CPAN. Doublecheck that the md5 checksum
   received from PAUSE is correct.

10. Update the httpd-areq homepage to list the new release in
    the News section. For instructions on updating the httpd website, 
    see httpd-apreq-2/build/WEBSITE.

11. Post a final announcement to the modperl@ and apreq-dev@ lists:

        Subject: [ANNOUNCE] libapreq2 2.09 release

    Include the md5 signature in the announcement, as well as
    a list of the latest Changes (since the previous release).

12. Prepare for the next cycle

  a. increment version in Request/Request.pm

  b. edit ./Changes:
     - start a new item with incremented version + '-dev'

  =item 2.10-dev

  c. add a release entry in STATUS

  d. update this file versions to make it easy to copy-n-paste things
    on the next release:

   perl -pi -e 's/\_10/\_11/g' RELEASE
   perl -pi -e 's/\.10/\.11/g' RELEASE
   perl -pi -e 's/_09/_10/g'   RELEASE
   perl -pi -e 's/\.09/\.10/g' RELEASE

    now reload this file and bump up the last number of the first
    two commands.

  e. commit the changed files

     % svn ci Changes Request/Request.pm STATUS RELEASE
