@@ -26,7 +26,7 @@ if [ -d "$ENV_DIR" ]; then
28WORK_DIR=/app
28WORK_DIR=/app
29−mkdir -p "$WORK_DIR/vendor"
29+cp -Rp "$BUILD_DIR/." "$WORK_DIR"
30mkdir -p "$WORK_DIR/vendor/bin"
30mkdir -p "$WORK_DIR/vendor/bin"
31mkdir -p "$WORK_DIR/vendor/ghc-libs"
31mkdir -p "$WORK_DIR/vendor/ghc-libs"
@@ -45,7 +45,7 @@ function set-default-env (){
47export LANG=en_US.UTF-8
47export LANG=en_US.UTF-8
48−export LIBRARY_PATH=$WORK_DIR/vendor/ghc-libs:/usr/lib:$LIBRARY_PATH
48+export LIBRARY_PATH=$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib:$LIBRARY_PATH
49export LD_LIBRARY_PATH=$LIBRARY_PATH
49export LD_LIBRARY_PATH=$LIBRARY_PATH
50export PATH=$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:$PATH
50export PATH=$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:$PATH
51export STACK_ROOT=$CACHE_DIR/.stack
51export STACK_ROOT=$CACHE_DIR/.stack
@@ -60,10 +60,10 @@ if [ ! -e "$LIBGMP_DIR" ]; then
60 curl -# -L "$LIBGMP_URL" | tar xz -C "$LIBGMP_DIR"
60 curl -# -L "$LIBGMP_URL" | tar xz -C "$LIBGMP_DIR"
62speak "Restoring $LIBGMP_VER files from cache"
62speak "Restoring $LIBGMP_VER files from cache"
63−rsync -avq "$LIBGMP_DIR/ghc-libs/" "$WORK_DIR/vendor/ghc-libs"
63+cp -Rp "$LIBGMP_DIR/ghc-libs/." "$WORK_DIR/vendor/ghc-libs"
65########## stack exe ###############################################
65########## stack exe ###############################################
66−STACK_VER=${STACK_VER:-1.0.4}
66+STACK_VER=${STACK_VER:-2.1.3}
67STACK_URL=${STACK_URL:-https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VER"/stack-"$STACK_VER"-linux-x86_64.tar.gz}
67STACK_URL=${STACK_URL:-https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VER"/stack-"$STACK_VER"-linux-x86_64.tar.gz}
68STACK_DIR="$CACHE_DIR/stack-$STACK_VER"
68STACK_DIR="$CACHE_DIR/stack-$STACK_VER"
69STACK_EXE="$STACK_DIR/stack"
69STACK_EXE="$STACK_DIR/stack"
@@ -73,19 +73,41 @@ if [ ! -e "$STACK_EXE" ]; then
73 curl -# -L "$STACK_URL" | tar xz -C "$STACK_DIR" --strip-components=1
73 curl -# -L "$STACK_URL" | tar xz -C "$STACK_DIR" --strip-components=1
75speak "Restoring stack-$STACK_VER"
75speak "Restoring stack-$STACK_VER"
76−rsync -avq "$STACK_EXE" "$WORK_DIR/vendor/bin/stack"
76+cp "$STACK_EXE" "$WORK_DIR/vendor/bin/stack"
77chmod a+x "$WORK_DIR/vendor/bin/stack"
77chmod a+x "$WORK_DIR/vendor/bin/stack"
79+########## stack vars ##############################################
80+if [ -d "$ENV_DIR" ]; then
81+ speak "Substituting stack vars"
82+ perl -p -i -e 's/\{\{([^}]+)\}\}/defined$ENV{$1}?$ENV{$1}:$&/eg' "$BUILD_DIR/stack.yaml"
79########## project build ###########################################
85########## project build ###########################################
86+SANDBOX_DIR="$CACHE_DIR/.stack-work"
87+if [ -e "$SANDBOX_DIR" ]; then
88+ speak "Restoring .stack-work"
89+ cp -Rp "$SANDBOX_DIR" "$WORK_DIR"
91+ mkdir -p "$SANDBOX_DIR"
80speak "Running stack"
94speak "Running stack"
96+# Makefile support (if you need other build tools than Stack that you need to use in conjunction)
81−cd "$BUILD_DIR"
97+if [ -f "$BUILD_DIR/Makefile" ]; then
98+ speak "Makefile detected"
82−stack setup
102+ stack setup
83−stack build --copy-bins
104+ stack build --ghc-options='-O2' --copy-bins
85# Set context environment variables.
107# Set context environment variables.
86−set-env PATH "$WORK_DIR/.local/bin:$PATH"
108+set-env PATH "$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:\$PATH"
87−set-default-env LIBRARY_PATH /app/vendor/ghc-libs:/usr/lib
109+set-default-env LIBRARY_PATH "$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib"
88−set-default-env LD_LIBRARY_PATH /app/vendor/ghc-libs:/usr/lib
110+set-default-env LD_LIBRARY_PATH "$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib"
90speak "Making stack binaries available"
112speak "Making stack binaries available"
91mkdir -p "$BUILD_DIR/vendor"
113mkdir -p "$BUILD_DIR/vendor"
@@ -93,6 +115,8 @@ mkdir -p "$BUILD_DIR/.local"
93mv "$WORK_DIR/vendor/ghc-libs" "$BUILD_DIR/vendor"
115mv "$WORK_DIR/vendor/ghc-libs" "$BUILD_DIR/vendor"
94mv "$WORK_DIR/.local/bin" "$BUILD_DIR/.local"
116mv "$WORK_DIR/.local/bin" "$BUILD_DIR/.local"
96−stack exec quillio
118+speak "Caching .stack-work"
119+rsync -avq "$WORK_DIR/.stack-work/" "$SANDBOX_DIR"
120+cp -Rp "$WORK_DIR/.stack-work" "$BUILD_DIR"
98speak "Finished!"
122speak "Finished!"