Files
investor-flow/deploy/unraid/user-scripts/sync-and-up.sh
T

61 lines
1.7 KiB
Bash
Raw Normal View History

#!/bin/bash
# Unraid User Scripts → "Run in background" on a 5–15 min cron.
# Pulls main from Gitea and rebuilds the stack when HEAD moved.
#
# First-time:
# mkdir -p /mnt/cache/appdata/investor-flow
# git clone http://unraid.local:3003/transnet/investor-flow.git \
# /mnt/cache/appdata/investor-flow/repo
# cp /mnt/cache/appdata/investor-flow/repo/deploy/unraid/.env.example \
# /mnt/cache/appdata/investor-flow/.env
# # edit .env
# Then point this script at those paths (or set the env vars below).
set -euo pipefail
REPO_DIR="${IFLOW_REPO_DIR:-/mnt/cache/appdata/investor-flow/repo}"
ENV_FILE="${IFLOW_ENV_FILE:-/mnt/cache/appdata/investor-flow/.env}"
COMPOSE="docker compose --project-directory ${REPO_DIR} --env-file ${ENV_FILE}"
LOG_TAG="investor-flow-cd"
log() { echo "[${LOG_TAG}] $*"; }
if [[ ! -d "${REPO_DIR}/.git" ]]; then
log "ERROR: ${REPO_DIR} is not a git checkout"
exit 1
fi
if [[ ! -f "${ENV_FILE}" ]]; then
log "ERROR: missing ${ENV_FILE}"
exit 1
fi
cd "${REPO_DIR}"
git fetch --prune origin main
LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/main)
if [[ "${LOCAL}" == "${REMOTE}" ]]; then
log "already at ${LOCAL:0:12} — no deploy"
# still ensure the stack is up
${COMPOSE} up -d --remove-orphans
exit 0
fi
log "updating ${LOCAL:0:12} → ${REMOTE:0:12}"
git merge --ff-only origin/main
${COMPOSE} up -d --build --remove-orphans
# Wait for health
for i in 1 2 3 4 5 6 7 8 9 10; do
if curl -fsS "http://127.0.0.1:${IFLOW_WEB_PORT:-3000}/health" >/dev/null \
&& curl -fsS "http://127.0.0.1:${IFLOW_BACKEND_PORT:-3001}/health" >/dev/null; then
log "healthy after deploy"
exit 0
fi
sleep 3
done
log "WARNING: containers started but health checks did not pass in 30s"
${COMPOSE} ps
exit 1