b02bf0a6df
The container ran Obsidian Sync in pull-only mode, so notes, tasks and journal entries the agent wrote stayed in its local copy. OBSIDIAN_SYNC_MODE now defaults to bidirectional (merge on conflict); pull-only and mirror-remote remain available. Blue and green share the vault volume, and two sync clients writing one vault and its sync state would race during a deploy. Setup and sync now run under a flock on a file in the vault, so a new container starts syncing only after the old container's sync process exits. Clearing Obsidian's stale sync lock is safe inside that lock. Setup runs in the background, so startup no longer waits for Obsidian login. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.4 KiB
Bash
57 lines
2.4 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Support the historical misspelling for externally supplied environments.
|
|
if [ -z "${TAVILY_API_KEY:-}" ] && [ -n "${TAVILIY_API_KEY:-}" ]; then
|
|
export TAVILY_API_KEY="${TAVILIY_API_KEY}"
|
|
fi
|
|
|
|
python scripts/validate_config.py
|
|
|
|
echo "Running database migrations..."
|
|
aerich upgrade
|
|
|
|
# Ensure Obsidian vault directory exists
|
|
mkdir -p /app/data/obsidian
|
|
|
|
# Start continuous Obsidian sync if enabled
|
|
if [ "${OBSIDIAN_CONTINUOUS_SYNC:-false}" = "true" ]; then
|
|
if [ -z "${OBSIDIAN_EMAIL:-}" ] || [ -z "${OBSIDIAN_PASSWORD:-}" ] || [ -z "${OBSIDIAN_VAULT_ID:-}" ]; then
|
|
echo "WARNING: OBSIDIAN_EMAIL, OBSIDIAN_PASSWORD, or OBSIDIAN_VAULT_ID not set. Skipping sync."
|
|
else
|
|
VAULT_PATH="${OBSIDIAN_VAULT_PATH:-/app/data/obsidian}"
|
|
SYNC_MODE="${OBSIDIAN_SYNC_MODE:-bidirectional}"
|
|
mkdir -p "${VAULT_PATH}"
|
|
|
|
# Blue and green share the vault volume. flock on a file in it works
|
|
# across containers, so this container only sets up and runs sync once
|
|
# the previous container's sync process has exited. Two clients writing
|
|
# one vault and its sync state would otherwise race. Setup runs in the
|
|
# background so the app starts while it waits.
|
|
(
|
|
flock 9
|
|
echo "Setting up Obsidian sync (${SYNC_MODE})..."
|
|
if ob login --email "${OBSIDIAN_EMAIL}" --password "${OBSIDIAN_PASSWORD}" && \
|
|
ob sync-setup \
|
|
--vault "${OBSIDIAN_VAULT_ID}" \
|
|
--path "${VAULT_PATH}" \
|
|
--password "${OBSIDIAN_E2E_PASSWORD:-}" \
|
|
--device-name "${OBSIDIAN_DEVICE_NAME:-simbarag}"; then
|
|
# Safe now: the lock means no other container's sync is running.
|
|
rm -rf "${VAULT_PATH}/.obsidian/.sync.lock"
|
|
if ob sync-config --mode "${SYNC_MODE}" --conflict-strategy merge \
|
|
--path "${VAULT_PATH}"; then
|
|
echo "Starting Obsidian continuous sync (${SYNC_MODE})..."
|
|
exec ob sync --continuous --path "${VAULT_PATH}"
|
|
fi
|
|
echo "WARNING: Obsidian sync-config failed. Continuing without sync."
|
|
else
|
|
echo "WARNING: Obsidian sync setup failed. Continuing without sync."
|
|
fi
|
|
) 9>"${VAULT_PATH}/.raggr-sync.lock" &
|
|
fi
|
|
fi
|
|
|
|
echo "Starting application..."
|
|
exec python app.py
|