Maintainer guide

Next release:

  • Check that GPG signature for Releases uses SHA512, and close #1943
  • Integrate FreeBSD binaries and packages #1253

Pre-release checks

The following should be tested minimally before a release is considered good to go:

  • Ensure release and stable branches merged to master
  • 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 haddock works (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 build a second time on either stack or wai is a no-op
  • Build something that depends on happy (suggestion: hlint), since happy has special logic for moving around the dist directory
  • 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 rc/vX.Y.Z 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, and check whether extra-deps still needed
  • In RC branch:
    • Update the ChangeLog (this comparison is handy):
      • 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.hs and etc/scripts/
    • Check that no new entries need to be added to releases.yaml,, and
    • Remove unsupported/obsolete distribution versions from, and perhaps from the release process.

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 and name vX.Y.Z (where X.Y.Z is the stack package's version), targetting the RC branch

  • 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.

    Note: since one of the tools (rpm-s3 on CentOS) doesn't support AWS temporary credentials, you can't use MFA with the AWS credentials (AWS_SECURITY_TOKEN is ignored).

  • On a machine with Vagrant installed:

    • Run etc/scripts/
  • On Mac OS X:

    • Run etc/scripts/
  • 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
  • Push signed Git tag, matching Github release tag name, e.g.: git tag -u 0x575159689BEFB442 vX.Y.Z && git push origin vX.Y.Z

  • Reset the release branch to the released commit, e.g.: git checkout release && git merge --ff-only vX.Y.Z && git push origin release

  • Update the stable branch similarly

  • Delete the RC branch (locally and on origin)

  • Publish Github release

  • Edit stack-setup-2.yaml, and add the new linux64 stack bindist

  • Activate version for new release tag on, 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/
  • 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>
  • Flag the Arch Linux package as out-of-date

  • Upload haddocks to Hackage: etc/scripts/

  • Merge any changes made in the RC/release/stable branches to master.

  • Announce to mailing lists

  • Keep an eye on the Hackage matrix builder