#!/usr/bin/env bash
# Configure bash behavior
set -o errexit # exit on failed command
set -o nounset # exit on undeclared variables
set -o pipefail # exit on any failed command in pipes
# set -o xtrace # debug if needed
# Set magic variables for current file & dir
__DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
__FILE="${__DIR}/$(basename "${BASH_SOURCE[0]}")"
__BASE="$(basename ${__FILE} .sh)"
__ROOT="$(cd "$(dirname "${__DIR}")" && pwd)"
__CWD="$(pwd)"
# Explicitely define TMPDIR if required
: ${TMPDIR:='/tmp'}
# Define temp file(s)
TMP_LOG="$(mktemp --tmpdir="${TMPDIR}" "${__BASE}_log.XXXXXXXXXX")"
# Define variables and their default values
: ${USER:=nodejs}
: ${LIB_DIR:=${__CWD}/node_modules}
: ${LOG_DIR:='/var/tmp'}
: ${MODULES_INIT_LOG:="${LOG_DIR}/modules-init.log"}
# Clean exit
on_exit () {
rm -f "${TMP_LOG}"
test ! -L "${LIB_DIR}" || rm -f "${LIB_DIR}"
cd "${__CWD}"
}
trap "on_exit" EXIT
########
# Main #
########
# Synchronize or link node_modules from user home if needed
if [ ! -L "${LIB_DIR}" -a -d "${LIB_DIR}" ]; then
echo "Synchronize modules directory" &>> "${MODULES_INIT_LOG}"
rsync -halvi --delete "/home/${USER}/node_modules/" "${LIB_DIR}/"
elif [ ! -e "${LIB_DIR}" ]; then
ln -s /home/${USER}/node_modules "${LIB_DIR}"
fi
# Using bash login
exec "$@"