Steps in doing an ns-3 release

ns-3-dev preparation
--------------------

1. check out a clean ns-3-dev somewhere using ns-3-allinone (you will need it)
   - hg clone http://code.nsnam.org/ns-3-allinone
   - ./download.py
   - ./build.py --enable-examples --enable-tests
   - try building static, optimized, and debug versions
   - try Python visualizer (not tested by buildbots)
      -- ./waf --pyrun src/flow-monitor/examples/wifi-olsr-flowmon.py --vis
   - cd ns-3-dev
   - ensure that tests pass (./test.py -g) and make sure that the buildbots
     are reporting greens based on the tip of the repository

2. prepare the source files
   - revise and check in AUTHORS, if needed
   - revise and check in RELEASE_NOTES.  Make sure to edit the Availability 
     section if this is a final release.
   - DO NOT change VERSION at this time
   - confirm that Doxygen builds cleanly (./waf doxygen), 
     and check in any necessary changes. Currently, doxygen does not build
     cleanly, we need to fix this over time.

At this point, the ns-3-dev should be ready, except for changing the
name of this repo from "3-dev" to the numbered release.  That will come
in subsequent steps.

ns-allinone-3.X.tar.bz2 dry run
-------------------------------

This phase is optional to dry-run a tarball before tagging.  You may skip
to the next phase if you are ready to just make the release or release 
candidate.  

1. check out a clean ns-3-allinone again
   - change into the allinone directory
   - ./download.py
   - cd ns-3-dev
   - change VERSION to the appropriate string, either "3.X" (for a release) or
     "3.X.RC1"  Do not commit this VERSION change to ns-3-dev.  It is used
     by dist.py script to name the directory properly.
   - cd into allinone directory and type "./dist.py"; you should see something
     like this:

NS-3 version: '3.12'
Adding ns-3-dev as ns-allinone-3.12/ns-3.12
Adding pybindgen as ns-allinone-3.12/pybindgen-0.15.0.795
Adding nsc as ns-allinone-3.12/nsc-0.5.2
Adding the build script files

This will create an ns-allinone-3.X.tar.bz2 tarball

2. test tarball on release platforms 
   - optimized, debug, and static builds
   - ./test.py -g
   - make latexpdf in the doc/manual, doc/models, and doc/tutorial directories 
   - ./waf --doxygen

At this point, you are ready for final packaging and repository/site work

tagging ns-3-dev and creating ns-3.X repositories
-------------------------------------------------

The steps here involve tagging ns-3-dev, copying over ns-3-dev to ns-3.X 
on code.nsnam.org, cloning it locally, making changes from "3-dev" to "3.X" 
in various places, and checking in those changes to the new ns-3.X repository.

1. once you are happy with the tarball, tag ns-3-dev
   - cd into ns-3-dev
   - if release candidate
     -- hg tag "ns-3.x-RCy"
     -- hg push ssh://code@code.nsnam.org//home/code/repos/ns-3-dev
   - else if final release
     -- hg tag "ns-3.x"
     -- hg push ssh://code@code.nsnam.org//home/code/repos/ns-3-dev

2. copy the tagged ns-3-dev and place it on the repository
   - ssh code.nsnam.org; sudo bash; su code;
   - if release candidate
     -- cp -r /home/code/repos/ns-3-dev /home/code/repos/ns-3.x-RCy
     -- cd /home/code/repos/ns-3.x-RCy/.hg and edit the hgrc appropriately:
       [paths]
       default = /home/code/repos/ns-3.x-RCy
       [web]
       description = ns-3.x-RCy release
       name = ns-3.x-RCy
       contact = <ns-developers@isi.edu>
   - else if final release
     -- cp -r /home/code/repos/ns-3-dev /home/code/repos/ns-3.x
     -- cd /home/code/repos/ns-3.x/.hg and edit the hgrc appropriately:
       [paths]
       default = /home/code/repos/ns-3.x
       [web]
       description = ns-3.x release
       name = ns-3.x
       contact = <ns-developers@isi.edu>

3. If this is a final release (not RC)
   - move (mv) ns-3.x RCs in /home/code/archived-repos

4. check out a clean version of the new release (ns-3.x) or (ns-3.x-RCy) 
   to your local machine 
   - hg clone http://code.nsnam.org/ns-3.x or (-RCy)

5. Update the VERSION for this new release
   - change the string 3-dev in the VERSION file to the real version 
     (e.g. 3.7 or 3.7-RC1)  This must agree with the version name you chose in the clone.
   - change the version and release string for the documentation in 
     doc/manual/source, doc/tutorial/source, and doc/models/source conf.py files
     This should hopefully be updated in the future to simply pull from the
     VERSION file.
   - hg commit -m "update VERSION to ns-3.x" or (-RCy), you get the point
   - hg push ssh://code@code.nsnam.org//home/code/repos/ns-3.x

creating the distribution tarball
---------------------------------

1. Create final tarballs
    You need to work with a clean ns-3-allinone-3.x directory
   - hg clone http://code.nsnam.org/ns-3-allinone
   - cd ns-3-allinone
   - ./download.py -n ns-3.x
   - ./dist.py (notice we did not build here)
   - this will create an ns-allinone-3.x.tar.bz2 tarball
   - sanity check this tarball just to make sure everything went ok

2. upload "ns-allinone-3.x.tar.bz2" to the /var/www/html/releases/ directory on 
   the www.nsnam.org server
   - scp ns-allinone-3.x.tar.bz2 www.nsnam.org:~
   - ssh www.nsnam.org
   - sudo cp ns-allinone-3.x.tar.bz2 /var/www/html/releases
   - cd !$

3. give it 644 file permissions, and user/group = apache if it is not already
   - sudo chown apache:apache ns-allinone-3.x.tar.bz2
   - sudo chmod 644 ns-allinone-3.x.tar.bz2

4. if this is a final release (not RC)
   - delete RC releases from /var/www/html/releases

preparing the documentation
----------------------------

1. If final release, build release documentation
   - sudo bash; su nsnam; cd /home/nsnam/bin 
   ./update-doxygen-release ns-3.x
   ./update-manual-release ns-3.x
   ./update-tutorial-release ns-3.x

2. Check if these new files are available on the website

preparing the Wordpress-based main website
------------------------------------------

1. create a new ns-3.x page which should be visible from
http://www.nsnam.org/ns-3.x
- New Features
- Download
- Bugs Fixed
- Documentation

2. Repoint http://www.nsnam.org/releases/latest to the new page

3. Update the Older Releases page to create an entry for the previous
release (there are two such pages, one under Releases and one under
Documentation)

4. The main page http://www.nsnam.org should point to
ns-3.x in the "Download" and "Documentation" boxes

5. Create blog entry to announce release 

ns-3 wiki edits
---------------

1. Create ns-3.(X+1) wiki page if not done already.

2. edit front page and Roadmap

Bugzilla
--------

1. Add a product version "ns-3.x" to the available versions.

Announcing
----------

1. Final checks
   - check manual, tutorial, model, and doxygen documentation links
   - download tarball from web, build and run tests for as many
     targets as you can
   - download release from mercurial, build and run tests for as
     many targets as you can
   - test and verify until you're confident the release is solid.

2. announce to ns-developers and ns-3-users, with summary of release notes

