#!/bin/sh
# BusyBox/dash-friendly: no “pipefail”, no “[[ … ]]”, no “+=”

set -eu   # BusyBox ash does not support “pipefail”

###############################################################################
# Mandatory variables – abort if not provided
###############################################################################
for var in KANIKO_CONTEXT GIT_REF_NAME GIT_USERNAME GIT_PASSWORD; do
  eval [ -z \"\${$var:-}\" ] && {
    echo "Error: $var environment variable is required but not set." >&2
    exit 1
  }
done

###############################################################################
# Optional / defaulted variables
###############################################################################
REGISTRY_HOST="${REGISTRY_HOST:-git.van-hemmen.com}"
REGISTRY_USER="${REGISTRY_USER:-}"
REGISTRY_PASS="${REGISTRY_PASS:-}"

KANIKO_DESTINATION="${KANIKO_DESTINATION:-}"   # optional
KANIKO_VERBOSITY="${KANIKO_VERBOSITY:-info}"
KANIKO_DOCKERFILE="${KANIKO_DOCKERFILE:-./Dockerfile}"

###############################################################################
# Handle registry authentication (only if credentials are present)
###############################################################################
AUTH_ENABLED=false
if [ -n "${REGISTRY_USER}" ] && [ -n "${REGISTRY_PASS}" ]; then
  echo "Registry credentials supplied – configuring authentication for ${REGISTRY_HOST}"
  mkdir -p /kaniko/.docker
  cat > /kaniko/.docker/config.json <<EOF
{
  "auths": {
    "${REGISTRY_HOST}": {
      "username": "${REGISTRY_USER}",
      "password": "${REGISTRY_PASS}"
    }
  }
}
EOF
  AUTH_ENABLED=true
else
  echo "Registry credentials not supplied – skipping authentication."
fi

###############################################################################
# Decide between --destination [...] or --no-push
###############################################################################
DEST_FLAGS=""

if $AUTH_ENABLED && [ -n "${KANIKO_DESTINATION## }" ]; then
  echo "Building list of --destination flags"
  old_ifs="$IFS"; IFS=','
  for raw in $KANIKO_DESTINATION; do
    raw=$(echo "$raw" | xargs)            # trim
    expanded=$(eval echo "$raw")          # env-var expansion if any
    [ -n "$expanded" ] && DEST_FLAGS="$DEST_FLAGS --destination=$expanded"
  done
  IFS="$old_ifs"
  echo "Image(s) will be pushed to the registry."
else
  DEST_FLAGS="--no-push"
  $AUTH_ENABLED  || echo "Registry credentials are missing – image(s) will not be pushed."
  [ -n "${KANIKO_DESTINATION## }" ] || echo "KANIKO_DESTINATION not provided – using --no-push."
fi

echo "Kaniko will be called with:${DEST_FLAGS}"

###############################################################################
# resume what will be done
###############################################################################
echo "Environment Variables:"
echo "KANIKO_CONTEXT=${KANIKO_CONTEXT}"
echo "GIT_REF_NAME=${GIT_REF_NAME}"
echo "GIT_USERNAME=${GIT_USERNAME}"
echo "GIT_PASSWORD=$(echo "${GIT_PASSWORD}" | sed 's/\(^..\).*\(..$\)/\1...\2/')"
echo "REGISTRY_HOST=${REGISTRY_HOST}"
echo "REGISTRY_USER=${REGISTRY_USER}"
[ -n "${REGISTRY_PASS}" ] && echo "REGISTRY_PASS=$(echo "${REGISTRY_PASS}" | sed 's/\(^..\).*\(..$\)/\1...\2/')"
echo "KANIKO_DESTINATION=${KANIKO_DESTINATION}"
echo "KANIKO_VERBOSITY=${KANIKO_VERBOSITY}"
echo "KANIKO_DOCKERFILE=${KANIKO_DOCKERFILE}"
echo ""
if [ "${DEST_FLAGS}" = "--no-push" ]; then
  echo "Action: Build only (no push)"
else
  echo "Action: Build and push"
fi
echo ""

###############################################################################
# Invoke Kaniko
###############################################################################
exec /kaniko/executor \
  --verbosity="${KANIKO_VERBOSITY}" \
  --context="${KANIKO_CONTEXT}#${GIT_REF_NAME}" \
  --dockerfile="${KANIKO_DOCKERFILE}" \
  $DEST_FLAGS