#! /bin/bash -e

: "${JENKINS_HOME:="/var/jenkins_home"}"

if [[ -f "/usr/local/bin/pre_startup_copy_plugins.sh" ]] ; then
  /bin/bash /usr/local/bin/pre_startup_copy_plugins.sh
fi

cat << EOF >>/usr/share/jenkins/ref/init.groovy.d/executors.groovy
import jenkins.model.*
Jenkins.instance.setNumExecutors(${JENKINS_NUM_EXECUTORS:-2})
EOF
touch "${COPY_REFERENCE_FILE_LOG}" || { echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?"; exit 1; }
echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG"
find /usr/share/jenkins/ref/ -type f -exec bash -c '. /usr/local/bin/jenkins-support; for arg; do copy_reference_file "$arg"; done' _ {} +

export JENKINS_URL_PREFIX=${JENKINS_URL_PREFIX:-""}
export JENKINSTHEME_CSS_URL=${JENKINSTHEME_CSS_URL:-$JENKINS_URL_PREFIX/userContent/theme/mirantis.min.css}
export JENKINSTHEME_JS_URL=${JENKINSTHEME_JS_URL:-$JENKINS_URL_PREFIX/userContent/theme/mirantis.min.js}
[ -f $JENKINS_HOME/org.codefirst.SimpleThemeDecorator.xml ] || cat /opt/org.codefirst.SimpleThemeDecorator.xml | envsubst > $JENKINS_HOME/org.codefirst.SimpleThemeDecorator.xml
[ ! -e $JENKINS_HOME/secret.key ] && echo -n $(openssl rand -hex 32) > $JENKINS_HOME/secret.key # echo without EOL symbol
chmod 0600 $JENKINS_HOME/secret.key

# if `docker run` first argument start with `--` the user is passing jenkins launcher arguments
if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then

  # read JAVA_OPTS and JENKINS_OPTS into arrays to avoid need for eval (and associated vulnerabilities)
  java_opts_array=()
  while IFS= read -r -d '' item; do
    java_opts_array+=( "$item" )
  done < <([[ $JAVA_OPTS ]] && xargs printf '%s\0' <<<"$JAVA_OPTS")

  jenkins_opts_array=( )
  while IFS= read -r -d '' item; do
    jenkins_opts_array+=( "$item" )
  done < <([[ $JENKINS_OPTS ]] && xargs printf '%s\0' <<<"$JENKINS_OPTS")

  exec java "${java_opts_array[@]}" -jar /usr/share/jenkins/jenkins.war "${jenkins_opts_array[@]}" "$@"
fi

# As argument is not jenkins, assume user want to run his own process, for example a `bash` shell to explore this image
exec "$@"
