Instructions for mod_perl 2.0 Release Manager

0.  make sure your public key is in the KEYS file in the mod_perl docs.
    you should only need to do this if this is your first time playing
    Release Manager

     $ cd mod_perl-docs
     $ grep $USER src/dist/KEYS

    note that the KEYS file itself contains all the instructions you
    need on how to add your key.  if you need further help on gpg
    (like how to create a key in the first place) you can look here

      http://people.apache.org/~geoff/gpghowto.html

    Copy the KEYS file into place:
    % scp KEYS people.apache.org:/www/www.apache.org/dist/perl/KEYS

    If this is your first release, ask someone with APML karma on PAUSE 
    to verify you have the appropriate permissions.  Likely someone on 
    the PMC can do this.

    a. login into https://pause.perl.org
    b. menu click: Select Mailinglist/Action
    c. choose APML and share_perms and click go
    d. click 3.1 Make somebody else co-maintainer
    e. choose the modules to give the perms to
       type the username of the new co-maintainer
    f. if you happen to know that packages were added this release,
       make sure you give the correct permissions to them.

1. 'make mydist' - to make sure nothing is missing from the manifest,
   etc. Now test this generated package mod_perl-2.0.9.tar.gz (not
   the current build) with as many
   configurations as possible on as many platforms as possible,
   unpacking the package each time afresh.  

  a. edit ./Changes 
     - change -dev to -rc\d+  starting with -rc1
     - edit META.yml to the rc\d version above in the version key

  b. nuke any preinstalled mod_perl libs and run 'make test'

  c. test that you can 'make install' and then run 'make test' again

  d. test whether we still 100% OK on systems with no LWP:

     % APACHE_TEST_PRETEND_NO_LWP=1 make test

  e. build and test as root. double check that you have started from a
     fresh source, without having any stale dirs from the previous
     build laying around.

2. once confident that the package is good, upload a release candidate
   to people.apache.org/~username and post 24 hour-ish candidate alert
   to the modperl/dev list (may be longer to give most people a chance
   to catch up). no need to tag this package

   Subject: [RELEASE CANDIDATE]: mod_perl-2.0.9 RC\d+

2a. if problems are detected during stage 2, repeat stages 1 and 2.

3. when the package has been reported to be good, prepare a new
   package to be released

  a. edit ./Changes:
     - remove -rc\d+
     - add release date
     - edit META.yml to remove the -rc\d+ from the version key

  b. check ./README and ./Makefile.PL
     - make sure supported httpd versions (dso & static) are current

  c. rerun:
     % perl Makefile.PL
     make sure tag looks right
     % make -n tag

  d. commit Changes README Makefile.PL
     % svn ci -m "Releasing 2.0.9" Changes README Makefile.PL

  e. tag
     % make tag

  XXXX: See BRANCHING for the steps to include the proper tagged externals
  XXXX: This needs to be fixed, and updated, developer beware its outdated and possibly wrong
  f. Update the svn:externals in the new tag
     (you can't propedit remotely yet in svn)
     % svn co https://svn.apache.org/repos/asf/perl/modperl/tags/2_0_9
     % svn propedit svn:externals 2_0_9
     Update the Apache-Test line to current revision
     % svn info https://svn.apache.org/repos/asf/perl/Apache-Test/trunk | grep "Last Changed Rev"
     Update the docs line to the current tag.
     It should look like:
     % svn propget svn:externals 2_0_9
       Apache-Test -r 608229 https://svn.apache.org/repos/asf/perl/Apache-Test/trunk
       docs https://svn.apache.org/repos/asf/perl/modperl/docs/tags/2_0_9/src/docs/2.0

     % svn ci -m "Releasing 2.0.9"

  g. create the final package
     % make dist

  h. test the final package again at least once

4. Release the package and update links (e.g. mod_perl-2.0.9.tar.gz)

  a. upload to people.apache.org:/www/perl.apache.org/dist/ - ask the PMC
     chair to give you the needed permissions if you do not have them.

    %  scp mod_perl-2.0.9.tar.gz people.apache.org:/www/perl.apache.org/dist/

  b. ssh to people.apache.org, unpack the package, update symlinks to the
     tar ball and unpacked distro:

    % ssh people.apache.org
    % cd /www/perl.apache.org/dist/
    % ln -sf mod_perl-2.0.9.tar.gz mod_perl-2.0-current.tar.gz
    % tar -xzvf mod_perl-2.0.9.tar.gz
    % rm /www/perl.apache.org/dist/mod_perl-2.0-current
    % ln -sf  mod_perl-2.0.9 mod_perl-2.0-current

  c. archive older releases (keep current + one prior release)

    % mv /www/perl.apache.org/dist/mod_perl-2.0.7.tar.gz \
         /www/perl.apache.org/dist/old
    % mv /www/perl.apache.org/dist/mod_perl-2.0.7.tar.gz.asc \
         /www/perl.apache.org/dist/old
    % rm -rf /www/perl.apache.org/dist/mod_perl-2.0.7

  d. update the version and release date in the docs:
    % vi modperl-docs/src/download/index_top.html 
    % vi modperl-docs/doap_Perl.rdf

     and commit.
    % svn ci -m "Releasing 2.0.9" \
          modperl-docs/src/download/index_top.html \
          modperl-docs/doap_Perl.rdf
     
     It'll be automatically updated within 6 hours. Alternatively
     you can do a manual update by logging into www.apache.org and
     running:

    % /home/perlwww/apache.org/modperl-docs/bin/site_build

     You may need to sudo -H -u perlwww to cleanup any svn locks.

5. Upload the package to CPAN

6. Tarball signing

  (depending on whether you use GPG or PGP, pick the first or the
  second set of the commands):

  a. sign your local copy of the tarball:

    % gpg --detach-sign --armor mod_perl-2.0.9.tar.gz

    % pgps -b --armor mod_perl-2.0.9.tar.gz

  b. upload the generated sig file to people.apache.org:

    % scp mod_perl-2.0.9.tar.gz.asc people.apache.org:/www/perl.apache.org/dist/
    % ssh people.apache.org
    % cd /www/perl.apache.org/dist/
    % chmod 0664 mod_perl-2.0.9.tar.gz.asc
    % ln -sf mod_perl-2.0.9.tar.gz.asc mod_perl-2.0-current.tar.gz.asc

  c. ask one of the other developers to double check the signature file
     and tarball: download both files and verify the signature:

    http://perl.apache.org/dist/mod_perl-2.0.9.tar.gz.asc
    http://perl.apache.org/dist/mod_perl-2.0.9.tar.gz

    % gpg --verify mod_perl-2.0.9.tar.gz.asc

    % pgpv mod_perl-2.0.9.tar.gz.asc

  d. make sure that the files you just created are group rw so
     all the dist admins can make changes:

    % find /www/perl.apache.org/dist/ -user $USER -type f -print0 | xargs -0 chmod 0664 
    % find /www/perl.apache.org/dist/ -user $USER -type d -print0 | xargs -0 chmod 0775 

7. Distribute to www.apache.org/dist/perl 
   and archive the old package under /www/archive.apache.org/dist/perl/

  a. unpack the package, update symlinks to the tarball and unpacked distro:

   % cd /www/www.apache.org/dist/perl/
   % cp /www/perl.apache.org/dist/mod_perl-2.0.9.tar.gz* .
   % tar -xzvf mod_perl-2.0.9.tar.gz
   % mv mod_perl-2.0.7.tar.gz* /www/archive.apache.org/dist/perl/
   % rm -rf mod_perl-2.0.7

  b. make sure that the files you just created are group rw so

     all the dist admins can make changes:

    % find /www/www.apache.org/dist/perl/ -user $USER -type f -print0 | xargs -0 chmod 0664
    % find /www/www.apache.org/dist/perl/ -user $USER -type d -print0 | xargs -0 chmod 0775 

8. Announce the package

  a. post ... to the modperl, announce lists
  Note, to post to announce@, you must be sending from an apache.org address.
  Subject: [ANNOUNCE] mod_perl 2.0.9 
     include 
  - link at perl.apache.org:
    http://apache.org/dist/perl/mod_perl-2.0.9.tar.gz
    http://apache.org/dist/perl/mod_perl-2.0.9.tar.gz.asc (pgp sig)
  - MD5 sig (as it comes from CPAN upload announce).
  - the latest Changes

9. Prepare for the next cycle

  a. increment version in lib/mod_perl2.pm

  b. edit ./Changes:
     - start a new item with incremented version + '-dev'

  =item 2.0.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/(\d+)([._])(\d+)(\2)(\d+)/join($2, $1, $3, $5+1)/eg' RELEASE

  e. commit the changed files

     % svn ci -m "start 2.0.9-dev cycle" Changes lib/mod_perl2.pm \
       STATUS RELEASE

10. Old Versions
 
    Remind other Developers to delete versions older then the prior release
    from CPAN.  Old releases can always be found on BACKPAN. 
