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