Skip to content

Instantly share code, notes, and snippets.

@jprupp
Created May 19, 2024 22:20
Show Gist options
  • Save jprupp/4ea7cf8138bbf40581a93be23469dcc7 to your computer and use it in GitHub Desktop.
Save jprupp/4ea7cf8138bbf40581a93be23469dcc7 to your computer and use it in GitHub Desktop.
Release a Haskell package to Hackage along with its Haddock documentation
#!/bin/sh
set -xe
yaml_value() {
local thing="$1"
perl -lnE "say if s/^\\s*$thing:\\s*([^\\s]+)\\s*\$/\\1/" package.yaml
}
if [[ ! -f package.yaml ]]
then
echo "No package.yaml present" >&2
exit 1
fi
package=$(yaml_value name)
ver=$(yaml_value version)
dist=$(stack path --dist-dir 2>/dev/null)
if [[ -z $package || -z $ver ]]
then
echo "No package or version found"
exit 1
fi
echo "package: $package"
echo "ver: $ver"
git_tag() {
git tag -m "Version $ver" "v$ver" || true
git push origin master || true
git push origin "v$ver" || true
}
stack_haddock() {
stack haddock --force-dirty
docdir="$dist/doc/html"
cd "$docdir"
doc="$package-$ver-docs"
rm -rvf "$doc" "$doc.tar.gz"
cp -r "$package" "$doc"
find "$doc" -name '*.html' -print0 | xargs -0 perl -i -pe 's|"\.\./([^.][^/]+)|"../../$1/docs|g'
tar -cvz --format=ustar -f "$doc.tar.gz" "$doc"
cabal upload -d --publish "$doc.tar.gz"
}
cabal_haddock() {
cabal v2-update
cabal v2-haddock --allow-newer --haddock-for-hackage
cabal upload -d --publish "dist-newstyle/$package-$ver-docs.tar.gz"
}
git_tag
stack upload . || true
stack_haddock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment