// ─── Sync: pull vault + carry into container ────────────────────── // // vault: ob sync (Obsidian Sync) // carry: git pull from GitHub private repo import { execSync } from "child_process"; const VAULT_PATH = process.env.VAULT_PATH || "/data/vault"; const CARRY_PATH = process.env.CARRY_PATH || "/data/carry"; const CARRY_REMOTE = process.env.CARRY_REMOTE || ""; const CARRY_BRANCH = process.env.CARRY_BRANCH || "main"; export async function syncVault(): Promise { try { execSync(`ob sync ${VAULT_PATH}`, { stdio: "pipe", timeout: 60000 }); console.log("[sync] vault synced via ob"); } catch (e: any) { console.error("[sync] vault sync failed:", e.message); } } export async function syncCarry(): Promise { if (!CARRY_REMOTE) { console.error("[sync] CARRY_REMOTE not set, skipping carry sync"); return; } try { // If not cloned yet, clone; otherwise pull try { execSync(`git -C ${CARRY_PATH} rev-parse --git-dir`, { stdio: "pipe" }); execSync(`git -C ${CARRY_PATH} pull origin ${CARRY_BRANCH}`, { stdio: "pipe", timeout: 30000, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, }); console.log("[sync] carry pulled via git"); } catch { // Not a git repo — clone execSync(`git clone --branch ${CARRY_BRANCH} --single-branch ${CARRY_REMOTE} ${CARRY_PATH}`, { stdio: "pipe", timeout: 60000, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, }); console.log("[sync] carry cloned via git"); } } catch (e: any) { console.error("[sync] carry sync failed:", e.message); } } export async function syncAll(): Promise { await Promise.all([syncVault(), syncCarry()]); }