From 821293f629ec18faf48743b32e2183cf42fc4846 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Sat, 21 Oct 2017 01:13:57 +0100 Subject: [PATCH] Add a Jenkinsfile to build&deploy docs https://docs.barrucadu.co.uk/$pkg/$branch --- Jenkinsfile | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..bacdccb --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,99 @@ +pipeline { + agent any + stages { + stage('build') { + steps { + sh 'stack --nix build' + } + } + stage('docs') { + steps { + sh '''WEB_DIR=/srv/http/docs + +function hsdoc { + srcdir=$(cabal-info hs-source-dirs) + hsfiles=$(cabal-info exposed-modules | sed -e "s:\\.:/:g" -e "s:$:.hs:") + otherfiles=$(cabal-info other-modules | sed -e "s:\\.:/:g" -e "s:$:.hs:") + + name=$(cabal-info name) + version=$(cabal-info version) + synopsis=$(cabal-info synopsis) + + dir=$1 + url=$2 + + tmpdir=`mktemp -d` + + # Highlight source + + mkdir -p $dir/source + + wget "https://raw.githubusercontent.com/houshuang/hackage-css/master/generated_css/tango.css" -O "$dir/source/hscolour.css" + + for file in $hsfiles; do + HsColour "$srcdir/$file" -css -anchor \\ + -o"$dir/source/`echo $file | sed "s:^\\(.*\\)\\.hs$:\\1:" | sed "s:/:-:g"`.html" + done + + # Generate documentation + + cabal-info description > "$tmpdir/description" + + macros=$(find . -type f -wholename "./.stack-work/dist/*/autogen/cabal_macros.h") + + find . -type f -wholename "./.stack-work/dist/*/autogen/*.hs" -exec cp "{}" . \\; + + for file in $hsfiles; do + mkdir -p "$tmpdir/`dirname $file`" + efile="$tmpdir/`dirname $file`/`basename $file`" + cpphs "$srcdir/$file" -O"$efile" \\ + --include="$macros" \\ + --strip --strip-eol + done + + for file in $otherfiles; do + mkdir -p "$tmpdir/`dirname $file`" + efile="$tmpdir/`dirname $file`/`basename $file`" + cpphs "$srcdir/$file" -O"$efile" \\ + --include="$macros" \\ + --strip --strip-eol + done + + processedfiles=$(find "$tmpdir" -type f -name "*.hs") + hidefiles=$(cabal-info other-modules | sed "s:^:--hide=:" | tr "\\n" " ") + + stack --nix exec -- \\ + haddock $processedfiles -o "$dir" \\ + --title="$name-$version: $synopsis" \\ + --prologue="$tmpdir/description" \\ + --html --built-in-themes \\ + --source-module="$url/source/%{MODULE/./-}.html" \\ + --source-entity="$url/source/%{MODULE/./-}.html#%N" \\ + --source-entity-line="$url/source/%{MODULE/./-}.html#line-%L" \\ + $hidefiles + + # Clean up + rm -rf $tmpdir +} + +for project in concurrency dejafu hunit-dejafu tasty-dejafu; do + pushd $project + + docdir="$WEB_DIR/$project" + docweb="https://docs.barrucadu.co.uk/$project" + + if [[ $BRANCH_NAME == "master" ]]; then + hsdoc $docdir $docweb + ln -sf $docdir "$docdir/master" + else + hsdoc "$docdir/$BRANCH_NAME" "$docweb/$BRANCH_NAME" + fi + + popd +done + +chmod -R 755 $WEB_DIR''' + } + } + } +}