Instructions for mod_perl 1.x 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 perl.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 dist' - to make sure nothing is missing from the manifest,
   etc. Now test this generated package mod_perl-1.31-dev.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

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

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

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

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

  c. commit Changes README Makefile.PL
     % svn ci Changes README Makefile.PL

  d. tag
     % make tag

  e. create the final package
     % make dist

  f. test the final package again at least once

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

  a. upload to perl.apache.org:/www/perl.apache.org/dist/

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

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

    % ssh perl.apache.org
    % cd /www/perl.apache.org/dist/
    % ln -sf mod_perl-1.31.tar.gz mod_perl-1.1-current.tar.gz
    % tar -xzvf mod_perl-1.31.tar.gz
    % rm /www/perl.apache.org/dist/mod_perl-1.1-current
    % ln -sf  mod_perl-1.31 mod_perl-1.1-current

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

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

  d. update the version and release date
     modperl-docs/src/download/index_top.html and commit. It'll be
     automatically updated within 6 hours. Alternatively you can do a
     manual update by logging into perl.apache.org and running:

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

  e. update our projects.apache.org doap file with the new release
     version and date

    % vi modperl-docs/doap_Perl.rdf

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-1.31.tar.gz

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

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

    % scp mod_perl-1.31.tar.gz.asc perl.apache.org:/www/perl.apache.org/dist/
    % ssh perl.apache.org
    % cd /www/perl.apache.org/dist/
    % chmod 0664 mod_perl-1.31.tar.gz.asc
    % ln -sf mod_perl-1.31.tar.gz.asc mod_perl-1.1-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-1.31.tar.gz.asc
    http://perl.apache.org/dist/mod_perl-1.31.tar.gz

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

    % pgpv mod_perl-1.31.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 -exec chmod 0664 {} \; 
    % find /www/perl.apache.org/dist/ -user $USER -type d -exec chmod 0775 {} \; 

7. Distribute to perl.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-1.31.tar.gz* .
   % tar -xzvf mod_perl-1.31.tar.gz
   % mv mod_perl-1.29.tar.gz* /www/archive.apache.org/dist/perl/
   % rm -rf mod_perl-1.29

  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/ -user $USER -type f -exec chmod 0664 {} \; 
    % find /www/www.apache.org/dist/ -user $USER -type d -exec 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 1.31 
     include 
  - link at perl.apache.org:
    http://apache.org/dist/perl/mod_perl-1.31.tar.gz
    http://apache.org/dist/perl/mod_perl-1.31.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_perl.pm

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

  =item 1.32-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/1\.(\d+)/join(".", 1, $1+1)/eg' RELEASE

  e. commit the changed files

     % svn ci -m "start 1.32-dev cycle" Changes lib/mod_perl.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. 
