-
-
Save Fuuzetsu/8276421 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
cabal configure && cabal build && cabal haddock --hyperlink-source \ | |
--html-location='/package/$pkg-$version/docs' \ | |
--contents-location='/package/$pkg' | |
S=$? | |
if [ "${S}" -eq "0" ]; then | |
cd "dist/doc/html" | |
DDIR="${1}-${2}-docs" | |
cp -r "${1}" "${DDIR}" && tar -c -v -z --format=ustar -f "${DDIR}.tar.gz" "${DDIR}" | |
CS=$? | |
if [ "${CS}" -eq "0" ]; then | |
echo "Uploading to Hackage…" | |
curl -X PUT -H 'Content-Type: application/x-tar' -H 'Content-Encoding: gzip' --data-binary "@${DDIR}.tar.gz" "https://${3}:${4}@hackage.haskell.org/package/${1}-${2}/docs" | |
exit $? | |
else | |
echo "Error when packaging the documentation" | |
exit $CS | |
fi | |
else | |
echo "Error when trying to build the package." | |
exit $S | |
fi |
What does the -Hustar
in the tar
command do? On OS X it was not recognized and I had to remove it.
Also note that you have to have documentation for all the linked packages on your local system, even though it's totally ignored. If you don't, then haddock
won't create links for those packages.
/package/$pkg-version/docs
should be /package/$pkg-$version/docs
($
in front of version
).
@mtolly updated
@Fuuzetsu Can you switch the curl to https?
curl -u ${3}:${4}
worked better for me than inlining the user and password into the URL. I have a several URL metacharacters in my password.
I recommend also adding the --hoogle
option to cabal haddock
, so we get a Hoogle database as well.
@lfairy, the --hoogle Haddock flag is almost useless, the backend needs fixing severly
@cheecheeo can you post the whole curl incantation you would like?
@Fuuzetsu Have you tried to parse package name/version from cabal info .
, so that $1/$2 can be omitted?
Is the password sent over the wire as cleartext?
(I'm using a modified version of this in hope that it rectifies this: https://gist.github.com/soenkehahn/038701a58cfc0cacca57)
@sol it could do that, sure, I just never bothered, this was a quick few minute hack that I think got a bit too popular
@soenkehahn I would be glad to incorporate any changes needed, just send me a diff
Everyone: please note that GitHub does not notify me on comments on gists, if you want me to make changes to this script, I'll happily do so (or link to a better one) but you'll have to contact me somehow, IRC, e-mail, whatever. It might take weeks/months for me to see things here.
This ugly mess will get you namever=my-package-1.0.0
and name=my-package
:
namever=`cabal info . 2>/dev/null | sed -n 1p | awk '{ print $2; }'`
name=`printf "%s" "$namever" | sed 's/\(.\)-[0-9.]\{1,\}$/\1/'`
BTW adding -f
to curl
is useful for making sure HTTP errors reported by the server cause the command to return a nonzero exit code.
Also, it would be nice if the control flow of the script was restructured to be like this:
do_something
if failed; then
print_error_and_exit
fi
do_more_things
if failed; then
print_error_and_exit
fi
…
I would rather use relative urls, e.g.
--html-location='/package/$pkg/docs'