@hackage hkgr0.2.5

Simple Hackage release workflow for package maintainers

Hkgr

Hackage GPL-3 license Build status

hkgr (pronounced "hackager") is a tool for making releases of Haskell packages on Hackage.

Usage

$ hkgr
Hackage Release tool

Usage: hkgr [--version] COMMAND
  'Hackager' is a tool for easy Hackage package release workflow

Available options:
  -h,--help                Show this help text
  --version                Show version

Available commands:
  tagdist                  'git tag' version and 'cabal sdist' tarball
  upload                   'cabal upload' candidate tarball to Hackage
  publish                  Publish to Hackage ('cabal upload --publish')
  upload-haddock           Upload candidate documentation to Hackage
  publish-haddock          Publish documentation to Hackage
  version                  Show the package version from .cabal file

Explanation

You are preparing for a release...

So you commit changes to your package and push them to check CI results:

$ git commit -m "new release"
$ git push

tagdist

Now you want to make a dist tarball, which is done from a git tag:

$ hkgr tagdist

The tagdist command first reads the current package version (from the .cabal file in the current directory), and uses that to git tag. It then runs cabal sdist from a temporary pristine checkout of the tag to generate the dist tarball.

If the tag already exists (eg if you already ran tagdist earlier), and you need to add commits to the release you can use --force to move the tag to the latest commit and generate a new tarball off that, otherwise tagdist refuses to run again to prevent accidently overwriting the tag and dist tarball.

One should not be able to tagdist on an already published (ie released) version.

(If sdist fails for some reason then hkgr tries to reset the tag.)

upload

If all is good, it's time for a candidate release:

$ hkgr upload

This uploads a candidate dist tarball to Hackage: this can be repeated.

Haddock draft documentation can also be uploaded if desired:

$ hkgr upload-haddock

publish

Once you are happy, you can release to Hackage:

$ hkgr publish

If it succeeds then hkgr creates a "published lockfile" in dist/, and the git tag is pushed to origin.

(Then hkgr will refuse to do further commands on the released version.)

Optionally one can publish haddock docs:

$ hkgr publish-haddock

Requirements

hkgr uses cabal-install, git, and also hlint if available.