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 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 dist' - to make sure nothing is missing from the manifest,
   etc. Now test this generated package mod_perl-1.32-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.32 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.32.tar.gz)

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

    %  scp mod_perl-1.32.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-1.32.tar.gz mod_perl-1.2-current.tar.gz
    % tar -xzvf mod_perl-1.32.tar.gz
    % rm /www/perl.apache.org/dist/mod_perl-1.2-current
    % ln -sf  mod_perl-1.32 mod_perl-1.2-current

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

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

  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 people.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.32.tar.gz

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

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

    % scp mod_perl-1.32.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-1.32.tar.gz.asc
    % ln -sf mod_perl-1.32.tar.gz.asc mod_perl-1.2-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.32.tar.gz.asc
    http://perl.apache.org/dist/mod_perl-1.32.tar.gz

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

    % pgpv mod_perl-1.32.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.32.tar.gz* .
   % tar -xzvf mod_perl-1.32.tar.gz
   % mv mod_perl-1.30.tar.gz* /www/archive.apache.org/dist/perl/
   % rm -rf mod_perl-1.30

  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.32 
     include 
  - link at perl.apache.org:
    http://apache.org/dist/perl/mod_perl-1.32.tar.gz
    http://apache.org/dist/perl/mod_perl-1.32.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.33-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.33-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. 
