#!/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} validate_user_at_host "${HOST}" 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}" || die "Error changing to ${BUBBLE_SERVER_DIR} directory" 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, copying to ${HOST} ..." 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, then copying to ${HOST} ..." else echo "Files changed (rebuilding jar, then copying to ${HOST}) ..." 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: ${HOST} ..." ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar" else echo "Patching and restarting: ${HOST} ..." 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: ${HOST} ..." ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cd ~bubble && unzip -q -o /tmp/bubble.jar 'site/*' && chown -R bubble:bubble site" fi