mirror of
https://github.com/barrucadu/dejafu.git
synced 2024-11-04 22:13:26 +03:00
Add a Jenkinsfile to build&deploy docs
https://docs.barrucadu.co.uk/$pkg/$branch
This commit is contained in:
parent
6c31a3c929
commit
821293f629
99
Jenkinsfile
vendored
Normal file
99
Jenkinsfile
vendored
Normal file
@ -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'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user