#
# $XORP: xorp/devnotes/release_process.txt,v 1.75 2009/01/08 03:21:35 pavlin Exp $
#

This file contains information related to the XORP software release process.

This information is of primary interest for the release manager.
However, every developer should read it to become familiar with the release
process, so the developer can schedule properly his work within the
release schedule.

Note that this information is a subject to change.

Steps to perform before and after a software release (note that
some of the commands like "setenv" and "unsetenv" assume that
the login shell is csh or tcsh):

========================================================================
0100.	TASK: Decide the next release date, and the wish-list of the set
	      of features it should have.
	WHO:  Everyone
	WHEN: Approximately one week after the previous release
	MISC: - Write the wish-list to xorp/devnotes/WORKPLAN
	        (under section "Next Release")

========================================================================
0200.	TASK: Status check. If necessary, revise the set of features to
	      be included in the next release.
	WHO:  Everyone
	WHEN: 2-3 weeks before the release date

========================================================================
0300.	TASK: Stop adding new features.
	WHO:  Everyone
	WHEN: 1 week before the release date

========================================================================
0325.	TASK: Decide the next version number
	WHO:  All
	WHEN: 1 week before the release date
	MISC: - Typically, the numbering increment is like 1.3 -> 1.4,
		unless there is major change in XORP (e.g., 1.8 -> 2.0)
              - If this is a release candidate, then the version number
		has the -RC suffix. E.g., the 1.4 release candidate
		version number is 1.4-RC

========================================================================
0350.	TASK: Send email to xorp-mirrors@xorp.org to tell all mirror
	      administrators to prepare for the forthcoming release
	      and the result increase in disk space and bandwidth usage.
	WHO:  Release manager
	WHEN: 1 week before the release date

========================================================================
0400.	TASK: Testing (including memory leak checks), final polishing
	      of the code. 
	WHO:  Everyone
	WHEN: 7 days - 1 day before the release date

========================================================================
0500.	TASK: Update the documentation in xorp/docs
	WHO:  Everyone
	WHEN: 7 days - 1 day before the release date
	MISC: - After a document is reviewed, update the Version in the
	        front page to correspond to the new release version.
              - Can be omitted for a release candidate.
	COMMANDS:
 # Commands to verify the Version.
 cd xorp/docs
 egrep "Version .\..}" */*.tex

========================================================================
0700.	TASK: Send email to xorp-dev@xorp.org to remain everyone about
	      TODO items before the release
	WHO:  Release manager
	WHEN: 1 day before the release date
	MISC: - Include the list below about tasks for everyone
	      - Include info about when everyone should stop committing
		code

========================================================================
0720.	TASK: Update XORP_MODULE_VERSION in all foo_module.h files
	WHO:  Release manager
	WHEN: 1 day before the release date
        MISC: - For the time being, do not do this, until we have a
		better idea about the particular purpose, if any, of
		XORP_MODULE_VERSION.

========================================================================
0730.	TASK: Add a new year to the copyright license (only if
	      necessary)
	WHO:  Release manager
	WHEN: 1 day before the release date
	MISC: - This affects all files in the following top-level
                directories: xorp, www, other, data.
	COMMANDS:
 # Check-out a new copy of all files
 mkdir xorp.tmp
 cd xorp.tmp
 cvs -d cvs.xorp.org:/cvsroot co data
 cvs -d cvs.xorp.org:/cvsroot co other
 cvs -d cvs.xorp.org:/cvsroot co www
 cvs -d cvs.xorp.org:/cvsroot co xorp

 # Run the xorp/devnotes/update_copyright.sh script using the old year
 # as an argument. It should be run inside each of the checked-out
 # directories. After that check the modifications and then commit them.
 # The CVS commit message should be something like:
 #   "Update the XORP copyright year to 2009."
 cd data
 ../xorp/devnotes/update_copyright.sh 2008
 cvs diff -u -p | less
 cvs commit
 cd ../other
 ../xorp/devnotes/update_copyright.sh 2008
 cvs diff -u -p | less
 cvs commit
 cd ../www
 # Test whether any auto-generated files might be re-generated
 gmake
 # If any auto-generated files are re-generated, delete them
 # and check-out another copy from CVS.
 ../xorp/devnotes/update_copyright.sh 2008
 cvs diff -u -p | less
 cvs commit
 cd ../xorp
 ../xorp/devnotes/update_copyright.sh 2008
 cvs diff -u -p | less
 cvs commit

========================================================================
0740.	TASK: Update xorp/docs/kdoc/gen-kdoc.sh
	WHO:  Release manager
	WHEN: 1 day before the release date
	MISC: - If necessary, edit xorp/docs/kdoc/gen-kdoc.sh and add
		new subdirectories.
	      - Fix all kdoc-related compilation issues that may be
		discovered by running the xorp/docs/kdoc/gen-kdoc.sh
		script.
	COMMANDS:
 cd xorp/docs/kdoc
 ./gen-kdoc.sh

========================================================================
0750.	TASK: Update the release version number
	WHO:  Release manager
	WHEN: 1 day before the release date
	COMMANDS:
 # Edit xorp/README
 # Edit xorp/RELEASE_NOTES
 # Edit xorp/VERSION
 # Edit all relevant configure.in (the second argument to AC_INIT())
        xorp/configure.in
        xorp/mibs/configure.in
 # Edit xorp/contrib/win32/installer/xorp.nsi and update PRODUCT_VERSION
 # Edit xorp/etc/templates/xorpsh.cmds and update "show version" output.

 cd xorp
 ./bootstrap
 cvs commit -m "Prepare XORP for release: update the version number"

========================================================================
0800.	TASK: Prune old entries in xorp/foo/TODO files
	WHO:  Everyone
	WHEN: 1 day before the release date

========================================================================
0900.	TASK: Update xorp/foo/README files
	WHO:  Everyone
	WHEN: 1 day before the release date

========================================================================
1000.	TASK: Update the status Web page in www/html_src/status.html
	WHO:  Everyone
	WHEN: 1 day before the release date
	MISC: Can be omitted for a release candidate.

========================================================================
1100.	TASK: Edit the Web pages in www/html_src/
	WHO:  Release manager
	WHEN: 1 day before the release date
	MISC: - Update the documentation index Web page in
		www/html_src/design_docs.html
		by modifying the documents version, date and URLs.
                This can be omitted for a release candidate.
	      - Add an entry for the new release to
                www/html_src/downloads.html
		(set the definition for Release tag to $ReleaseTag as
		defined later in this document).
		Move the previous release to the list of earlier releases,
		and in the process delete its "Overview" URL in the
		Documentation column.
		Also, update the status on that page.
                However, if the new entry is a release candidate, then only
                uncomment and update the "Release Candidate" section, but
                keep the original "Latest Release" section.
                If a real release, then comment-out the "Release Candidate"
                section.
	      - Update www/html_src/getting_started.html with information
		about supported operating systems, compilers,
		cross-compilation, and XORP configuration.
                This can be omitted for a release candidate.
	      - Update www/html_src/index.html
		Modify all references to the most recent version and
		its release date, etc.
                However, if the new entry is a release candidate,
                uncomment and update the "Release Candidate" section, but
                keep the original "Latest Release" section.
	      - If necessary, update www/html_src/license.html with a new
		copyright year.
	      - Update www/html_src/livecd.html with information about the
                XORP Version used in the LiveCD.
                However, if the new entry is a release candidate,
                uncomment and update the "Release Candidate" section, but
                keep the original "Latest Release" section.
	      - Add a news item to news.html
	      - If necessary, update www/html_src/porting.html
                This can be omitted for a release candidate.
	      - If necessary, update www/html_src/snmp.html
                This can be omitted for a release candidate.
	      - Update the date and release version in
		www/html_src/status.html
                This can be omitted for a release candidate.
	      - Edit the following files and remove all temporary notes
	        about platforms that are supported only in XORP-WIP:
	        www/html_src/dowloads.html, html_src/getting_started.html
		and html_src/status.html
	      - If necessary, update www/html_src/roadmap.html

========================================================================
1150.	TASK: Regenerate the Web pages in www
	WHO:  Release manager
	WHEN: 1 day before the release date
	COMMANDS:
 cd www
 gmake
 gmake check
	NOTE: the last command may fail with huge number of errors.
	This is probably because of some configuration requirement
	to run the "nsgmls" verification program. In the near future
	the problem will be identified and fixed.

========================================================================
1170.	TASK: Update the Web pages in the XORP test Web server
	http://test.xorp.org/
	WHO:  Release manager
	WHEN: 1 day before the release date
	COMMANDS:
 ssh test.xorp.org
 cd /var/www/xorp.org/test.orp.org
 cvs update -d -P

========================================================================
1180.	TASK: Verify that the Web pages on the test Web server
	http://test.xorp.org/ are OK.
	WHO:  Everyone
	WHEN: 1 day before the release date

========================================================================
1200.	TASK: Update xorp/RELEASE_NOTES
	WHO:  Everyone
	WHEN: 1 day before the release date
	MISC: - Update the release date
	      - If there are no changes to a module, then just add
	        "No changes." or "No significant changes."

========================================================================
1250.	TASK: Update xorp/BUILD_NOTES
	WHO:  Everyone
	WHEN: 1 day before the release date
	MISC: Add/update the information about building XORP on
              various platforms.

========================================================================
1270.	TASK: Update xorp/ERRATA
	WHO:  Everyone
	WHEN: 1 day before the release date
	MISC: If there are no known issues for a module, then just add
	      "No known issues."

========================================================================
1300.	TASK: Modify the date on the front page on all documents in
	      xorp/docs to be set to the release date
	WHO:  Release manager
	WHEN: 1 day before the release date
	MISC: Can be omitted for a release candidate.
 # Commands to verify the date.
 cd xorp/docs
 egrep '\\date' */*.tex

========================================================================
1600.	TASK: Update xorp/README
	WHO:  Release manager
	WHEN: 1 day before the release date

========================================================================
1900.	TASK: Stop the XORP tinderbox crontab job (OPTIONAL)
	WHO:  XORP tinderbox manager
	WHEN: 4 hours before intended release time

========================================================================
2000.	TASK: Send email to xorp-dev@xorp.org that the release process
	      has started. 
	WHO:  Release manager
	WHEN: 2 hours before intended release time

========================================================================
2200.	TASK: Verify that the code compiles and passes all tests.
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # On each supported platform:
 cvs -d cvs.xorp.org:/cvsroot co xorp
 cvs -d cvs.xorp.org:/cvsroot co data
 cd xorp
 script
 ./configure
 gmake
 gmake check
 # Check the documentation building only on the primary development platform: 
 cd docs
 gmake
 # Note: the source-code compilation and running the tests can be skipped if
 # the XORP tinderbox  has been running for a reasonable amount of time
 # without errors.

========================================================================
2300.	TASK: Add CVS tag to the source code
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # - In the command below, if the new release is, say, 1.4,
 #   then $ReleaseTag must be RELEASE_1_4
 #   However, if this is a release candidate, say, 1.4-RC,
 #   then $ReleaseTag must be RELEASE_1_4_RC
 # - The release tag is defined in the third command below.
 # - If you make a mistake and you need to re-tag, then use flag -F
 #   after "rtag" to move the tag.
 # - If you make a mistake and you need to delete the tag, then use flag -d
 #   after "rtag".
 mkdir xorp_release.tmp
 cd xorp_release.tmp
 cvs -d cvs.xorp.org:/cvsroot co xorp/VERSION
 setenv ReleaseTag RELEASE_`cat xorp/VERSION | sed 'y/./_/' | sed 'y/-/_/'`
 echo $ReleaseTag
 cvs -d cvs.xorp.org:/cvsroot rtag $ReleaseTag xorp
 cvs -d cvs.xorp.org:/cvsroot rtag $ReleaseTag other
 cvs -d cvs.xorp.org:/cvsroot rtag $ReleaseTag www
 cvs -d cvs.xorp.org:/cvsroot rtag $ReleaseTag data

========================================================================
2400.	TASK: Prepare sofware and documentation tarballs for distribution
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # - In the command below, if the new release is, say, 1.4,
 #   then $ReleaseVersion must be 1.4
 #   However, if this is a release candidate, say, 1.4-RC,
 #   then $ReleaseVersion must be 1.4-RC
 # - The release version defined in the first line below
 # - Commands continue from the previous task
 setenv ReleaseVersion `cat xorp/VERSION`
 echo $ReleaseVersion
 mkdir tmp
 cd tmp
 cvs -d cvs.xorp.org:/cvsroot export -r $ReleaseTag xorp
 mv xorp xorp-$ReleaseVersion
 tar zcvf xorp-$ReleaseVersion.tar.gz xorp-$ReleaseVersion
 mv xorp-$ReleaseVersion xorp
 cd xorp/docs/kdoc
 ./gen-kdoc.sh
 tar zcvf html.tar.gz html
 cd ../..
 ./configure
 cd docs
 cp -p ../RELEASE_NOTES .
 cp -p ../BUILD_NOTES .
 cp -p ../LICENSE.other .
 cp -pr ../rtrmgr/config .
 gmake
 gmake
 rm */*.aux */*.bbl */*.blg */*.dvi */*.lof */*.log */*.lot */*.toc
 cd ..
 mv docs docs-$ReleaseVersion
 tar zcvf docs-$ReleaseVersion.tar.gz docs-$ReleaseVersion
 mv docs-$ReleaseVersion docs
 mv docs-$ReleaseVersion.tar.gz ..
 cd ..

========================================================================
2450.	TASK: Prepare the Live CD ISO image
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # See other/LiveCD/README for instructions.
 # Note that the LiveCD preparation process creates a file named LiveCD.iso,
 # and that file needs to be explicitly compressed by hand:
 #   gzip LiveCD.iso

========================================================================
2470.	TASK: Prepare the XORP Installer for Windows
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # - See xorp/devnotes/windows-release-process.txt and
 #   xorp/contrib/win32/installer/README for instructions.
 # - If necessary, list any new files (e.g., new binary files)
 #    that need to be installed.

========================================================================
2500.	TASK: Copy the tarballs to the Web server
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # Commands continue from TASK 2400: "Prepare sofware and documentation
 # tarballs for distribution".
 scp -p xorp-$ReleaseVersion.tar.gz www.xorp.org:~/
 scp -p docs-$ReleaseVersion.tar.gz www.xorp.org:~/
 ssh www.xorp.org "(echo $ReleaseVersion > _XORP_VERSION)";
 unsetenv ReleaseTag
 unsetenv ReleaseVersion
 # Wait for the previous command to return
 ssh www.xorp.org
 setenv ReleaseVersion `cat _XORP_VERSION`
 echo $ReleaseVersion
 rm _XORP_VERSION
 cd /var/www/xorp.org/xorp-releases
 mkdir $ReleaseVersion
 cd $ReleaseVersion
 mv ~/xorp-$ReleaseVersion.tar.gz .
 mv ~/docs-$ReleaseVersion.tar.gz .
 tar zxvf docs-$ReleaseVersion.tar.gz
 mv docs-$ReleaseVersion docs

========================================================================
2550.	TASK: Copy the LiveCD ISO image and the Windows binary to the Web
              server
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # Commands continue from the previous task
 scp -p foo:~/live/cd/location/LiveCD.iso.gz .
 scp -p bar:~/windows/binary/location/xorp-$ReleaseVersion-setup.exe .

========================================================================
2600.	TASK: Calculate the MD5 checksums and the LiveCD size
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 # Commands continue from the previous task
 md5sum LiveCD.iso.gz
 md5sum xorp-$ReleaseVersion.tar.gz
 md5sum xorp-$ReleaseVersion-setup.exe
 ls -lAFgh LiveCD.iso.gz

========================================================================
2625.	TASK: Update the links in the Web server to the current release
	WHO:  Release manager
	WHEN: Release time
	MISC: Should be omitted for a release candidate.
	COMMANDS:
 # Commands continue from the previous task
 cd ..
 rm current; ln -s $ReleaseVersion current

========================================================================
2650.	TASK: Update the Web pages with the MD5 checksums calculated earlier
	WHO:  Release manager
	WHEN: Release time
	MISC: - Update www/html_src/livecd.html with the LiveCD MD5
		checksum, and the LiveCD size.
	      - Update www/html_src/download.html with the MD5 checksum
		of the XORP source code tarball.
	      - Update www/html_src/download.html with the MD5 checksum
		of the Windows binary.

========================================================================
2675.	TASK: Regenerate the Web pages in the www directory
	WHO:  Release manager
	WHEN: Release time
	COMMANDS:
 cd www
 gmake
 gmake check
	NOTE: the last command may fail with huge number of errors.
	This is probably because of some configuration requirement
	to run the "nsgmls" verification program. In the near future
	the problem will be identified and fixed.

========================================================================
2700.	TASK: Update the XORP Web page on the main Web server www.xorp.org
	      from the CVS repository
	WHO:  Release manager
	WHEN: Right after the release
	COMMANDS:
 ssh www.xorp.org
 cd /var/www/xorp.org/www.xorp.org
 cvs update -d -P

========================================================================
2725.	TASK: Verify that all the links on XORP main Web server www.xorp.org
	      are valid.
	WHO:  Release manager
	WHEN: Right after the release
	COMMANDS:
	 # You can use the WDG Link Valet tool for link validation:
	 # http://www.htmlhelp.com/tools/valet/

========================================================================
2750.	TASK: Verify that all the HTML on XORP main Web server www.xorp.org
	      is valid.
	WHO:  Release manager
	WHEN: Right after the release
	COMMANDS:
	 # You can use the WDG HTML Validator tool:
	 # http://www.htmlhelp.com/tools/validator/

========================================================================
2770.	TASK: Add a Bugzilla "Version" entry for the new version.
	WHO:  Release manager
	WHEN: Right after the release
	MISC: - Login to the XORP Bugzilla site, and then click on
	        "Edit products" (at the bottom of the page)
	        "Edit product: XORP"
	        "Edit versions:" (at the bottom of the page)
	        "Edit version ...: Add a new version"
	      - Should be omitted for a release candidate.

========================================================================
2800.	TASK: Send email to xorp-dev@xorp.org that the release process has
	      completed.
	WHO:  Release manager
	WHEN: Right after the release

========================================================================
2900.	TASK: Send an anouncement email to xorp-announce@xorp.org
	      (CC to xorp-hackers@xorp.org and xorp-users@xorp.org)
              about the new release.
	WHO:  XORP project leader
	WHEN: Right after the release
	MISC: If this is a release candidate, then send the email
              only to xorp-hackers@xorp.org and xorp-users@xorp.org

========================================================================
2950.	TASK: Update the FreshMeat XORP entry:
	      http://freshmeat.net/projects/xorp/
	WHO:  Release manager
	WHEN: Right after the release
	MISC: - Should be omitted for a release candidate.
              - Requires login and a password.

========================================================================
2955.	TASK: Contact the FreeBSD maintainer of net/xorp to update the
	      entry:
	        http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/xorp/
	      The maintainer's email address is available from the Makefile:
	        http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/xorp/Makefile
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Note that currently there is no XORP port entry for FreeBSD,
	      hence this task applies once the entry has been created.
	MISC: Should be omitted for a release candidate.

========================================================================
2960.	TASK: Contact the NetBSD maintainer of net/xorp to update the
	      entry:
	        http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/xorp/
	      The maintainer's email address is available from the Makefile:
	        http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/xorp/Makefile
	      If the maintainer's email address is generic, then the following
	      form can be used to submit the request:
	        http://www.netbsd.org/cgi-bin/sendpr.cgi?gndb=netbsd
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.

========================================================================
2965.	TASK: Contact the OpenBSD maintainer of net/xorp to update the
	      entry:
	        http://www.openbsd.org/cgi-bin/cvsweb/ports/net/xorp/
	      The maintainer's email address is available from the Makefile:
	        http://www.openbsd.org/cgi-bin/cvsweb/ports/net/xorp/Makefile
	      If the maintainer does not reply, then send an email to
	        ports@openbsd.org
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.

========================================================================
2970.	TASK: Update the LinuxLinks XORP entry (if necessary):
	       http://www.linuxlinks.com/
	       http://www.linuxlinks.com/portal/cgi-bin/modify.cgi
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.

========================================================================
2975.	TASK: Update the Wikipedia XORP entry:
	      http://en.wikipedia.org/wiki/XORP
	WHO:  Release manager or any core developer
	WHEN: Right after the release
	MISC: - Should be omitted for a release candidate.
              - Requires login and a password.

========================================================================
2980.	TASK: Update the heise.de XORP entry:
	      http://www.heise.de/software/default.shtml?prg=42502
	WHO:  Release manager
	WHEN: Right after the release
	MISC: - Should be omitted for a release candidate.
              - Requires access URL.

========================================================================
3000.	TASK: Start the XORP tinderbox crontab job (only if it was
	      stopped earlier)
	WHO:  XORP tinderbox manager
	WHEN: Right after the release

========================================================================
3100.	TASK: Prepare the release notes inside xorp/RELEASE_NOTES for
	      the next release.
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.
	COMMANDS:
 # Edit xorp/RELEASE_NOTES:
 # - Copy the release notes from the last release to the top of the file,
 #   update the version and the date (if known).
 # - Delete all particular items for each section, but keep the section
 #   entries.
 # - The new version should have "-WIP" (Work-In-Progress) as a suffix.
 #   If the exact release date is not known, then use "?" or "??" for the
 #   unknown parts of the date.
 # - For example, if the next release would be 1.5, then the release and
 #   the date might look like:
 #      Release 1.5-WIP (2007/??/??)

========================================================================
3200.	TASK: Update the "Work-In-Progress" version number
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.
	MISC: The version name should have "-WIP" (Work-In-Progress)
	      as a suffix. For example, if the next release would be 1.5,
	      then the version would be "1.5-WIP".
	COMMANDS:
 # Edit xorp/README
 # Edit xorp/RELEASE_NOTES (or verify that it contains the right version)
 # Edit xorp/VERSION
 # Edit all relevant configure.in (the second argument to AC_INIT())
        xorp/configure.in
        xorp/mibs/configure.in
 # Edit xorp/contrib/win32/installer/xorp.nsi and update PRODUCT_VERSION
 # Edit xorp/etc/templates/xorpsh.cmds and update "show version" output.

 cd xorp
 ./bootstrap
 cvs commit -m "Updated the Work-In-Progress version number"

========================================================================
3300.	TASK: Remove the Release Candidate directory from the Web server
	WHO:  Release manager
	WHEN: Right after the release
	MISC: Should be omitted for a release candidate.
	COMMANDS:
 ssh www.xorp.org
 cd /var/www/xorp.org/xorp-releases
 # Remove the Release Candidate directory (e.g., 1.4-RC)

========================================================================
3400.	TASK: Jupiter
	WHO:  Everyone
	WHEN: Right after the release

========================================================================
