#!/usr/bin/env bash

DOCKER_NAME=velocity-site-builder

# exit on failures and undeclared variables, echo commands
set -o errexit
set -o nounset
set -o pipefail

# debugging
#set -o xtrace

# Determine the real location of the script, past symlinks.
# (source: https://stackoverflow.com/a/246128/710286 )
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  TARGET="$(readlink "$SOURCE")"
  if [[ $TARGET == /* ]]; then
    SOURCE="$TARGET"
  else
    DIR="$( dirname "$SOURCE" )"
    SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
  fi
done

# get repository root
cd $( dirname "$SOURCE" )/../..
if test ! -f .asf.yaml
then
    echo Could not find root of velocity-site git repository
    exit 1
fi
ROOT=$( pwd )
rm -rf target/*
mkdir -p target

# check docker is installed
if [ ! -x "$(command -v docker)" ]; then
    echo "Install docker on your system and try again..."
    exit 1
fi

# check that velocity-site-prod (velocity-site on the asf-site branch) is cloned in a sibling directory
cd "$ROOT/.."
BASE=$( pwd )
if test ! -d velocity-site-prod
then
    echo the site builder needs a clone of velocity-site under the asf-site branch in the velocity-site-prod directory in the same parent directory than velocity-site.
    read -n1 -p "Shall I create it for you?" answer
    echo
    if [[ "$answer" =~ ^[Yy]$ ]]
    then
        git clone --single-branch --branch asf-site https://github.com/apache/velocity-site.git velocity-site-prod
    fi
fi
if test ! -d velocity-site-prod
then
   echo velocity-site-prod repository not present, exiting
   exit 1
fi
cd velocity-site-prod

# The philosophy here is to cache the image but not the container.

# stop previous container if present
if [ "$(docker ps -q -f name=$DOCKER_NAME)" ]
then
    docker stop $DOCKER_NAME
fi

# remove previous container if present
if [ "$(docker ps -aq -f status=exited -f name=$DOCKER_NAME)" ]
then
    docker rm -v $DOCKER_NAME
fi

# build the image if necessary
if [[ "$(docker images -q $DOCKER_NAME 2> /dev/null)" == "" ]]; then
    docker build --file="$ROOT/builder/src/docker/Dockerfile" -t $DOCKER_NAME "$ROOT/builder/src/docker"
fi

# do the voodoo
docker run --rm --name $DOCKER_NAME -u "$(id -u):$(id -g)" --volume="$BASE:/home/velocity" $DOCKER_NAME

# alternatively, if you need to debug the container (as root), comment the previous command and run instead:
# docker run -it --name $DOCKER_NAME --volume="$BASE:/home/velocity" --entrypoint=/bin/bash velocity-site-builder
