--- title: dirty-haskell.org´s git-based publication system published: 2016-12-08 tags: Blog Software --- Initially I set up dirty-haskell.org (which is currently powered by [hakyll]) to [rsync] the results of compiling up onto my server whenever I intone `dirty-haskell deploy`{.sh}. In my ever continuing quest to have my life consist mostly of an array of git repositories however this didn't seem satisfactory. Therefore I configured my [gitolite] instance to automatically compile und publish the current git version whenever I push to `master`. Gitolite provides us with facilities to install [githooks]. Publishing will be handled by `post-update`: ~~~{.sh} #!/usr/bin/env zsh touchedMaster=false for ref ($@); do [[ ${ref} =~ .*/master$ ]] || continue touchedMaster=true break done $touchedMaster || exit 0 { tmpDir=$(mktemp -d) delTmpDir() { cd / rm -rf ${tmpDir} } trap delTmpDir EXIT git clone --branch master --depth 1 --single-branch file://$(pwd) ${tmpDir} cd ${tmpDir} umask 0022 nix-shell --run "dirty-haskell build && dirty-haskell deploy" } 2>&1 | stdbuf -o 0 tr '\r' '\n' | logger --id=$$ -p daemon.info -t dirty-haskell ~~~ The script checks if the master branch was moved to a new commit or otherwise touched and, if so, clones a copy of the repo to a temporary directory and runs hakyll´s deploy command in it, which is set to rsync the compiled version to a folder where it´ll be picked up by nginx. ## Update ## It works. [hakyll]: https://jaspervdj.be/hakyll/ [rsync]: https://git.samba.org/rsync.git [gitolite]: http://gitolite.com [githooks]: http://githooks.com