= ReleaseChecklist

== Advance preparation for release

* Update `./CHANGELOG.adoc`.
** Write entries for missing notable commits.
** Write summary of changes from previous release.
** Update with estimated release date.
* Update `./README.adoc`.
** 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 `./README.adoc`.
** Update <<Credits#>> page with acknowledgements.
** Create *ReleaseYYYYMM??* page (i.e., forthcoming release) based on *ReleaseXXXXLLCC* (i.e., previous release).
*** Update summary from `./CHANGELOG.adoc`.
*** 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 https://github.com/MLton/mlton[`mlton`].

== Prepare sources for tagging

* Update `./CHANGELOG.adoc`.
** 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 `Download` link with proper release date.
** Update <<Releases#>> with new release.
* Ensure that all updates are pushed to `master` branch of https://github.com/MLton/mlton[`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 MLTON_VERSION=${YYYYMMDD} source-release
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 MLTON_VERSION=${YYYYMMDD} source-release
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 binary-release
----

* 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`]

== Misc.

* Generate new <<Performance#>> numbers.
