#!/bin/bash
#
# Copyright (c) 2020 Bubble, Inc.  All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/
#
#
# Usage:
#
#     bpatchfull [user@]hostname [norestart]
#
#  [user@]hostname  : the hostname of the bubble node to update. Optionally, also specify a username.
#                     Usually you will have an entry in ~/.ssh/config to set the username and ssh key
#  norestart        : If present, do not restart the API server after updating the jar file
#
# Patch the bubble.jar on a remote node.
# This script updates the entire jar file, and takes a lot longer than bpatch
#
# Environment variables
#
#  BUBBLE_SSH_PORT  : SSH port, default is 1202
#
SCRIPT="${0}"
SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd)
. ${SCRIPT_DIR}/bubble_common

HOST=${1:?no host provided}
NO_RESTART=${2}

if [[ -z "${BUBBLE_SSH_PORT}" ]] ; then
  BUBBLE_SSH_PORT="1202"
fi

BUBBLE_SERVER_DIR="${SCRIPT_DIR}/../bubble-server"
if [[ ! -d "${BUBBLE_SERVER_DIR}" ]] ; then
  die "bubble-server dir not found: ${BUBBLE_SERVER_DIR}"
fi
cd ${BUBBLE_SERVER_DIR}

ANY_JAR=$(find "./target" -type f -name "bubble*.jar" | head -1 | wc -l | tr -d ' ')
if [[ ${ANY_JAR} -eq 0 ]] ; then
  ANY_CHANGES=1
else
  ANY_CHANGES=$(find "./src/main" -type f -newer "$(find "./target" -type f -name "bubble*.jar" | head -1)" | wc -l | tr -d ' ')
fi
if [[ ${ANY_CHANGES} -eq 0 ]] ; then
  echo "No changes, not repackaging jar"
  scp -P ${BUBBLE_SSH_PORT} ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}"
else
  if [[ ${ANY_JAR} -eq 0 ]] ; then
    echo "No bubble jar file found, rebuilding"
  else
    echo "Files changed, rebuilding bubble jar: "
    find "./src/main" -type f -newer "$(find "./target" -type f -name "bubble*.jar" | head -1)"
  fi
  BUBBLE_PRODUCTION=1 mvn -DskipTests=true -Dcheckstyle.skip=true clean package || die "Error packaging jar"
  scp -P ${BUBBLE_SSH_PORT} ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}"
fi

if [[ ! -z "${NO_RESTART}" && "${NO_RESTART}" == "norestart" ]] ; then
  echo "Patching but not restarting..."
  ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar"
else
  echo "Patching and restarting..."
  ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble"
fi

if unzip -Z -1 ./target/bubble*.jar | grep -q "^site/$" ; then
  echo "Deploying new web..."
  ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cd ~bubble && unzip -o /tmp/bubble.jar 'site/*' && chown -R bubble:bubble site"
fi
