Steps in doing an ns-3 release

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
   - confirm that the release builds cleanly.
   - cd ns-3-dev
   - ensure that tests pass (./test.py)
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.
3. build an ns-3-allinone distribution
   - you may want to check out a clean ns-3-allinone and ns-3-dev somewhere, 
     otherwise the tarball will be huge
   - change into the allinone directory
   - ./dist.py
   - this will create an ns-allinone-dev.tar.bz2 tarball
4. test dev tarball on release platforms 
   - ./test.py 
   - other scripts you can think of
5. 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.x-RCy
   - else if final release
     -- hg tag "ns-3.x"
     -- hg push ssh://code@code.nsnam.org//home/code/repos/ns-3.x
6. clone 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>
7. If this is a final release (not RC)
   - archive ns-3.x RCs in /home/code/archived-repos
   - delete ns-3.x RCs from /home/code/repos
8. check out a clean version of the new release (ns-3.x) or (ns-3.x-RCy) somewhere 
   - hg clone http://code.nsnam.org/ns-3.x or (-RCy)
9. 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
10. Run the tests on the new release (debug and optimized) like a user would
    You need to use ns-3-allinone since you will use that to make the distro
    It is convenient to let buildbot do much of this work for you, the day of
    the release
   - hg clone http://code.nsnam.org/ns-3-allinone ns-3-allinone-3.x-test
   - cd !$
   - ./download.py -n ns-3.x
   - ./build.py
   - cd ns-3.x
   - ./test.py
   - ./test.py -g
   - ./waf -d optimized --enable-examples --enable-tests configure
   - ./waf
   - ./test.py
   - ./test.py -g
   - There should be no test errors at this time
11. 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 ns-3-allinone-3.x
   - cd !$
   - ./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
   - test this tarball out somewhere just to make sure everything went ok
12. 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 !$
13. 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
14. if this is a final release (not RC)
   - delete RC releases from /var/www/html/releases
15. if final release (not RC) build release documentation
   - sudo bash; su nsnam; cd /home/nsnam/bin 
   - edit ./update-manual-release, ./update-tutorial-release,
     ./update-doxygen-release and make sure RELEASE variable is 
     set correctly
   - run ./update-manual-release, ./update-tutorial-release,
     ./update-doxygen-release
16. update web pages on www.nsnam.org (source is in the www/ module)
   - clone the source repo (hg clone http://code.nsnam.org/www)
   - update references to releases in html_src 
     (consider "grep 'ns-3\.' *.html" for a new release)
     (consider "grep 'RCx' *.html" for a new RC)
     (consider looking at past commits to www for changes)
   - update references to releases in scripts/
   - commit and push changes
   - update roadmap on wiki
17. update the server
   - build and update HTML directory on the server
     -- ssh www.nsnam.org; sudo bash; su nsnam;
     -- run ~/bin/update-html
18. 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.
19. announce to ns-developers, with summary of release notes
