Maintainer guide
Pre-release checks
The following should be tested minimally before a release is considered good to go:
- After GHC 8.0: maybe switch to Debian 8 and CentOS 6.7 Vagrant boxes for building Stack binaries (to match GHC bindists) and drop support for Debian 7.
- Ensure
releaseandstablebranches merged tomaster - Integration tests pass on a representative Windows, Mac OS X, and Linux (Linux
is handled by Jenkins automatically):
stack install --pedantic && stack test --pedantic --flag stack:integration-tests. The actual release script will perform a more thorough test for every platform/variant prior to uploading, so this is just a pre-check - Ensure
stack haddockworks (Travis CI now does this) - Stack builds with
stack-7.8.yaml(Travis CI now does this) - stack can build the wai repo
- Running
stack builda second time on either stack or wai is a no-op - Build something that depends on
happy(suggestion:hlint), sincehappyhas special logic for moving around thedistdirectory - In master branch:
- stack.cabal: bump the version number to release (even third component)
- ChangeLog: rename the "unreleased changes" section to the new version
- Cut a release candidate branch from master
- In master branch:
- stack.cabal: bump version number to unstable (odd third component)
- Changelog: add new "unreleased changes" section
- stack.yaml: bump to use latest LTS version
- In RC branch:
- Update the ChangeLog:
- Check for any important changes that missed getting an entry in Changelog
- Check for any entries that snuck into the previous version's changes due to merges
- Review documentation for any changes that need to be made
- Search for old Stack version, unstable stack version, and the next "obvious" version in sequence (if doing a non-obvious jump) and replace with new version
- Look for any links to "latest" documentation, replace with version tag
- Ensure all documentation pages listed in
mkdocs.yaml
- Check that any new Linux distribution versions added to
etc/scripts/release.hsandetc/scripts/vagrant-releases.sh - Check that no new entries need to be added to releases.yaml, install_and_upgrade.md, and README.md
- Update the ChangeLog:
Release process
See stack-release-script's README for requirements to perform the release, and more details about the tool.
-
Create a new draft Github release with tag
vX.Y.Z(where X.Y.Z is the stack package's version) -
On each machine you'll be releasing from, set environment variables:
GITHUB_AUTHORIZATION_TOKEN,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_DEFAULT_REGION -
On a machine with Vagrant installed:
- Run
etc/scripts/vagrant-releases.sh
- Run
-
On Mac OS X:
- Run
etc/scripts/osx-release.sh
- Run
-
On Windows:
- Ensure your working tree is in
C:\stack(or a similarly short path) - Run
etc\scripts\windows-releases.bat - Release Windows installers. See stack-installer README
- Ensure your working tree is in
-
Push signed Git tag, matching Github release tag name, e.g.:
git tag -u 9BEFB442 vX.Y.Z && git push origin vX.Y.Z -
Reset the
releasebranch to the released commit, e.g.:git checkout release && git merge --ff-only vX.Y.Z && git push origin release -
Update the
stablebranch similarly -
Delete the RC branch
-
Publish Github release
-
Edit stack-setup-2.yaml, and add the new linux64 stack bindist
-
Activate version for new release tag on readthedocs.org, and ensure that stable documentation has updated
-
Upload package to Hackage:
stack upload . --pvp-bounds=both -
On a machine with Vagrant installed:
- Run
etc/scripts/vagrant-distros.sh
- Run
-
Submit a PR for the haskell-stack Homebrew formula
- Be sure to update the SHA sum
- The commit message should just be
haskell-stack <VERSION>
-
Upload haddocks to Hackage:
etc/scripts/upload-haddocks.sh -
Merge any changes made in the RC/release/stable branches to master.
-
Keep an eye on the Hackage matrix builder
-
Announce to haskell-cafe@haskell.org, haskell-stack@googlegroups.com, commercialhaskell@googlegroups.com mailing lists