#!/usr/bin/env bash set -euo pipefail APP_HOME="${APP_HOME:-/home/zaine/master-folder/org-platform/org_backend}" SERVICE_NAME="${SERVICE_NAME:-org-backend.service}" SYSTEMCTL_TIMEOUT="${SYSTEMCTL_TIMEOUT:-120}" ENV_FILE="${ENV_FILE:-/etc/org-backend/org-backend.env}" SOURCE_DIR="$(pwd)" SOURCE_JAR="${SOURCE_DIR}/target/org-backend.jar" APP_TARGET_DIR="${APP_HOME}/target" APP_JAR="${APP_TARGET_DIR}/org-backend.jar" SOURCE_SERVICE="${SOURCE_DIR}/misc/${SERVICE_NAME}" SYSTEMD_SERVICE="/etc/systemd/system/${SERVICE_NAME}" run_sudo() { if [[ -n "${SUDO_PASSWORD:-}" ]]; then printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p '' "$@" else sudo -n "$@" fi } if [[ ! -f "${SOURCE_JAR}" ]]; then echo "Missing built jar: ${SOURCE_JAR}" >&2 exit 1 fi if [[ ! -f "${SOURCE_SERVICE}" ]]; then echo "Missing service file: ${SOURCE_SERVICE}" >&2 exit 1 fi mkdir -p "${APP_TARGET_DIR}" if [[ "$(realpath "${SOURCE_JAR}")" != "$(realpath -m "${APP_JAR}")" ]]; then echo "Installing jar to ${APP_JAR}" install -m 0644 "${SOURCE_JAR}" "${APP_JAR}" else echo "Built jar is already in place at ${APP_JAR}" fi echo "Checking sudo access" run_sudo true echo "Checking runtime env file at ${ENV_FILE}" if ! run_sudo test -f "${ENV_FILE}"; then echo "Missing ${ENV_FILE}. Create it on the server with the production values required by the app." >&2 exit 1 fi echo "Linking project systemd unit to ${SYSTEMD_SERVICE}" run_sudo rm -f "${SYSTEMD_SERVICE}" run_sudo ln -s "${SOURCE_SERVICE}" "${SYSTEMD_SERVICE}" echo "Reloading systemd" run_sudo systemctl daemon-reload echo "Enabling ${SERVICE_NAME}" run_sudo systemctl enable "${SERVICE_NAME}" echo "Restarting ${SERVICE_NAME}" if ! timeout "${SYSTEMCTL_TIMEOUT}" bash -c "$(declare -f run_sudo); run_sudo systemctl --no-ask-password restart \"${SERVICE_NAME}\""; then echo "Restart did not finish within ${SYSTEMCTL_TIMEOUT}s" >&2 run_sudo systemctl --no-pager --full status "${SERVICE_NAME}" || true exit 1 fi echo "Service status" run_sudo systemctl --no-pager --full status "${SERVICE_NAME}"