78 lines
2.1 KiB
Bash
78 lines
2.1 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Configuration from environment variables
|
|
VAULT_REPO="${VAULT_REPO:-}"
|
|
VAULT_BRANCH="${VAULT_BRANCH:-main}"
|
|
SYNC_INTERVAL="${SYNC_INTERVAL:-30}"
|
|
CONTENT_DIR="/usr/src/app/content"
|
|
|
|
# Logging function
|
|
log() {
|
|
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
# Initialize vault content
|
|
init_vault() {
|
|
log "Initializing vault from $VAULT_REPO (branch: $VAULT_BRANCH)"
|
|
|
|
if [ -z "$VAULT_REPO" ]; then
|
|
log "ERROR: VAULT_REPO not set. Using pre-existing content."
|
|
return 0
|
|
fi
|
|
|
|
# Remove existing content if it exists and is a git repo
|
|
if [ -d "$CONTENT_DIR/.git" ]; then
|
|
log "Content directory is a git repo, pulling latest changes..."
|
|
cd "$CONTENT_DIR"
|
|
git fetch origin "$VAULT_BRANCH"
|
|
git reset --hard "origin/$VAULT_BRANCH"
|
|
cd /usr/src/app
|
|
else
|
|
log "Content directory is not a git repo, cloning..."
|
|
rm -rf "$CONTENT_DIR"
|
|
git clone --depth 1 --branch "$VAULT_BRANCH" "$VAULT_REPO" "$CONTENT_DIR"
|
|
fi
|
|
|
|
log "Vault synchronized successfully"
|
|
}
|
|
|
|
# Sync vault periodically in background
|
|
sync_vault_loop() {
|
|
while true; do
|
|
sleep "$SYNC_INTERVAL"
|
|
log "Checking for vault updates..."
|
|
|
|
if [ -d "$CONTENT_DIR/.git" ]; then
|
|
cd "$CONTENT_DIR"
|
|
# Check if there are remote changes
|
|
git fetch origin "$VAULT_BRANCH" 2>/dev/null || continue
|
|
|
|
LOCAL=$(git rev-parse HEAD)
|
|
REMOTE=$(git rev-parse "origin/$VAULT_BRANCH")
|
|
|
|
if [ "$LOCAL" != "$REMOTE" ]; then
|
|
log "Vault changes detected, pulling..."
|
|
git reset --hard "origin/$VAULT_BRANCH"
|
|
log "Vault updated. Note: Quartz build may need restart for changes to appear."
|
|
else
|
|
log "Vault is up to date"
|
|
fi
|
|
cd /usr/src/app
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Initialize once on startup
|
|
init_vault
|
|
|
|
# Start sync loop in background
|
|
sync_vault_loop &
|
|
SYNC_PID=$!
|
|
|
|
log "Starting Quartz..."
|
|
# Run Quartz with proper signal handling
|
|
trap "kill $SYNC_PID 2>/dev/null || true" EXIT TERM INT
|
|
exec npx quartz build --serve
|
|
|