ReleaseChecklist
================

== Advance preparation for release ==

* Update `doc/changelog`.
** Write entries for missing notable commits.
** Write summary of changes from previous release.
** Update with estimated release date.
* Update `doc/README`.
** Check features and description.
* Update `man/{mlton,mlprof}.1`.
** Check compile-time and run-time options in `man/mlton.1`.
** Check options in `man/mlprof.1`.
** Update with estimated release date.
* Update `doc/guide`.
// ** Check <:OrphanedPages:> and <:WantedPages:>.
** Synchronize <:Features:> page with `doc/README`.
** Update <:Credits:> page with acknowledgements.
** Create *ReleaseYYYYMM??* page (i.e., forthcoming release) based on *ReleaseXXXXLLCC* (i.e., previous release).
*** Update summary from `doc/changelog`.
*** Update links to estimated release date.
** Create *BugsYYYYMM??* page based on *BugsXXXXLLCC*.
*** Update links to estimated release date.
** Spell check pages.
* Ensure that all updates are pushed to `master` branch of <!ViewGitProj(mlton)>.

== Prepare sources for tagging ==

* Update `doc/changelog`.
** Update with proper release date.
* Update `man/{mlton,mlprof}.1`.
** Update with proper release date.
* Update `doc/guide`.
** Rename *ReleaseYYYYMM??* to *ReleaseYYYYMMDD* with proper release date.
*** Update links with proper release date.
** Rename *BugsYYYYMM??* to *BugsYYYYMMDD* with proper release date.
*** Update links with proper release date.
** Update *ReleaseXXXXLLCC*.
*** Change intro to "`This is an archived public release of MLton, version XXXXLLCC.`"
** Update <:Home:> with note of new release.
*** Change `What's new?` text to `Please try out our new release, <:ReleaseYYYYMMDD:MLton YYYYMMDD>`.
** Update <:Releases:> with new release.
** Clear <:Experimental:>.
* Ensure that all updates are pushed to `master` branch of <!ViewGitProj(mlton)>.

== Tag sources ==

* Shell commands:
+
----
git clone http://github.com/MLton/mlton mlton.git
cd mlton.git
git checkout master
git tag -a -m "Tagging YYYYMMDD release" on-YYYYMMDD-release master
git push origin on-YYYYMMDD-release
----

== Packaging ==

=== SourceForge FRS ===

* Create *YYYYMMDD* directory:
+
-----
sftp user@frs.sourceforge.net:/home/frs/project/mlton/mlton
sftp> mkdir YYYYMMDD
sftp> quit
-----

=== Source release ===

* Create `mlton-YYYYMMDD.src.tgz`:
+
----
git clone http://github.com/MLton/mlton mlton
cd mlton
git checkout on-YYYYMMDD-release
make version VERSION=YYYYMMDD
( cd mllex ; latexmk -pdf lexgen ; latexmk -c lexgen ; make mllex.pdf )
( cd mlyacc ; ( cd doc; latexmk -pdf mlyaccc ; latexmk -c mlyacc ); make mlyacc.pdf )
make -C doc/guide
make release VERSION=YYYYMMDD
cd ..
----
+
or
+
----
wget https://github.com/MLton/mlton/archive/on-YYYYMMDD-release.tar.gz
tar xzvf on-YYYYMMDD-release.tar.gz
cd mlton-on-YYYYMMDD-release
make version VERSION=YYYYMMDD
( cd mllex ; latexmk -pdf lexgen ; latexmk -c lexgen ; make mllex.pdf )
( cd mlyacc ; ( cd doc; latexmk -pdf mlyaccc ; latexmk -c mlyacc ); make mlyacc.pdf )
make -C doc/guide
make release VERSION=YYYYMMDD
cd ..
----

* Upload `mlton-YYYYMMDD.src.tgz`:
+
-----
scp mlton-YYYYMMDD.src.tgz user@frs.sourceforge.net:/home/frs/project/mlton/mlton/YYYYMMDD/
-----

* Update *ReleaseYYYYMMDD* with `mlton-YYYYMMDD.src.tgz` link.

=== Binary releases ===

* Build and create `mlton-YYYYMMDD-1.ARCH-OS.tgz`:
+
----
wget http://sourceforge.net/projects/mlton/files/mlton/YYYYMMDD/mlton-YYYYMMDD.src.tgz
tar xzvf mlton-YYYYMMDD.src.tgz
cd mlton-YYYYMMDD
make all
make install
cd install
tar czvf ../mlton-YYYYMMDD-1.ARCH-OS.tgz *
cd ../..
----

* Upload `mlton-YYYYMMDD-1.ARCH-OS.tgz`:
+
-----
scp mlton-YYYYMMDD-1.ARCH-OS.tgz user@frs.sourceforge.net:/home/frs/project/mlton/mlton/YYYYMMDD/
-----

* Update *ReleaseYYYYMMDD* with `mlton-YYYYMMDD-1.ARCH-OS.tgz` link.

== Website ==

* `guide/YYYYMMDD` gets a copy of `doc/guide/localhost`.
* Shell commands:
+
----
wget http://sourceforge.net/projects/mlton/files/mlton/YYYYMMDD/mlton-YYYYMMDD.src.tgz
tar xzvf mlton-YYYYMMDD.src.tgz
cd mlton-YYYYMMDD
cd doc/guide
cp -prf localhost YYYYMMDD
tar czvf guide-YYYYMMDD.tgz YYYYMMDD
rsync -avzP --delete -e ssh YYYYMMDD user@web.sourceforge.net:/home/project-web/mlton/htdocs/guide/
rsync -avzP --delete -e ssh guide-YYYYMMDD.tgz user@web.sourceforge.net:/home/project-web/mlton/htdocs/guide/
----

== Announce release ==

* Mail announcement to:
** mailto:MLton-devel@mlton.org[`MLton-devel@mlton.org`]
** mailto:MLton-user@mlton.org[`MLton-user@mlton.org`]

* Update <:OtherSites:> that have MLton pages.

== Misc. ==

* `dupload` Debian package.

* Generate new <:Performance:> numbers.
