aboutsummaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
Diffstat (limited to 'script')
-rwxr-xr-xscript/build.sh33
-rwxr-xr-xscript/docker-build.sh40
-rw-r--r--script/post-receive12
3 files changed, 75 insertions, 10 deletions
diff --git a/script/build.sh b/script/build.sh
index 006a4b4..f4d190e 100755
--- a/script/build.sh
+++ b/script/build.sh
@@ -14,25 +14,35 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
+# You may want to set the following environment variables for this script:
+#
+# - BUILD_SOURCE: the directory where the source code is located.
+# - BUILD_DEST: the directory where the built files should go.
+# - USER: the user who should own the files.
+# - GROUP: the group who should own the files.
+
set -ex
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
pushd $DIR
+# Set UTF-8 for the build (Jekyll needs this).
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US:en
+export LC_ALL=en_US.UTF-8
+
# The build source and destination directories. This is done this way so we
# can re-use this script when deploying.
: ${BUILD_SOURCE:=.}
: ${BUILD_DEST:=./_site}
-# Clean up previous build.
-rm -rf $BUILD_DEST
-
# JS dependencies.
-yarn
+yarn --force
yarn run webpack-single-shot
# Build && test.
bundle
+rm -rf $BUILD_DEST/*
bundle exec jekyll build -s $BUILD_SOURCE -d $BUILD_DEST
mkdir $BUILD_DEST/about $BUILD_DEST/en/about
@@ -43,5 +53,20 @@ cp $BUILD_DEST/en/about.html $BUILD_DEST/en/about/index.html
bundle exec rubocop
bundle exec rake
+# Fix ownership of files if a given user was provided.
+if [ ! -z "$USER" ]; then
+ chown -R $USER:$GROUP $BUILD_DEST
+fi
+
+# Nuke the source if specified (useful when the source was a temporary one).
+if [ "$NUKE" = "true" ]; then
+ pushd $BUILD_SOURCE
+ # See: https://unix.stackexchange.com/a/77313. We cannot remove the
+ # directory directly, because then Docker might scream "Device busy", since
+ # it's a shared volume.
+ rm -Rf ..?* .[!.]* *
+ popd
+fi
+
set +x
echo "Jekyll has built your application in '$BUILD_DEST'"
diff --git a/script/docker-build.sh b/script/docker-build.sh
new file mode 100755
index 0000000..8aa1590
--- /dev/null
+++ b/script/docker-build.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+# Copyright (C) 2019 Miquel Sabaté Solà <mikisabate@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -ex
+
+# If the image does not exist, build it.
+IMGTAG=mssola/jo:latest
+[ ! -z $(docker images -q $IMGTAG) ] || docker build -t $IMGTAG .
+
+# The user which should own the produced files.
+user=$(id -u `whoami`)
+group=$(id -g `whoami`)
+
+# The -it flag should not be set on the post-receive hook because there's no TTY
+# there.
+IT="-it"
+if [ "$POST_RECEIVE" = "true" ]; then
+ IT=
+fi
+
+# And now the call...
+docker run --rm $IT \
+ -e BUILD_SOURCE=/src -e BUILD_DEST=/dest \
+ -e BUNDLE_GEMFILE=/src/Gemfile -e USER=$user -e GROUP=$group \
+ -e NODE_ENV=development -e NUKE=$NUKE \
+ -v $BUILD_SOURCE:/src -v $BUILD_DEST:/dest \
+ $IMGTAG /src/script/build.sh
diff --git a/script/post-receive b/script/post-receive
index 3f4f8ee..debe3dd 100644
--- a/script/post-receive
+++ b/script/post-receive
@@ -22,7 +22,7 @@ NAME=jo
GIT_REPO=$HOME/$NAME.git
TARGET_BRANCH=master
-# Exported so it's picked by the `script/build.sh` script.
+# Exported so it's picked by the `script/docker-build.sh` script.
export BUILD_SOURCE=$HOME/tmp/$NAME
export BUILD_DEST=/srv/$NAME/www
@@ -30,14 +30,14 @@ while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ -n "$branch" ] && [ "$TARGET_BRANCH" == "$branch" ]; then
+ set -x
+
# Re-generate git repository in a temporary directory.
- rm -Rf $TMP_GIT_CLONE
+ rm -Rf $BUILD_SOURCE
git clone $GIT_REPO $BUILD_SOURCE
# Build site
- chmod +x $BUILD_SOURCE/script/build.sh
- BUNDLE_GEMFILE=$BUILD_SOURCE/Gemfile bundle install
- BUNDLE_GEMFILE=$BUILD_SOURCE/Gemfile $BUILD_SOURCE/script/build.sh
- rm -Rf $BUILD_SOURCE
+ chmod +x $BUILD_SOURCE/script/docker-build.sh
+ POST_RECEIVE=true NUKE=true $BUILD_SOURCE/script/docker-build.sh
fi
done