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 libapreq-1.X.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 1.X - <Today's Date>

   libapreq-1.X released.

6.  Tag the tree, s/./_/g in the version number, and roll the release.

    % cvs tag v1_X
    % make dist

7. Test the release package, repeating step 2.  If all tests pass,
   sign it via gpg:

     % gpg --detach-sign --armor libapreq-1.X.tar.gz

   or pgp:

     % pgp -sba libapreq-1.X.tar.gz

8. Upload (scp) the package and signature to www.apache.org
   for distribution:

    % scp libapreq-1.X.tar.gz* \
      <username>@www.apache.org:/www/www.apache.org/dist/httpd/libapreq/

   Ask another developer to confirm the uploaded signature is ok.

    % gpg --verify libapreq-1.X.tar.gz.asc
    % pgp libapreq-1.X.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] libapreq 1.X release

    Include the md5 signature in the announcement, as well as
    a list of the latest Changes (since the previous release).
