From 186ab3808138135950550e230314ab34cb230033 Mon Sep 17 00:00:00 2001 From: Barby Date: Thu, 9 Jul 2026 16:04:42 +0200 Subject: [PATCH] deploy.sh: 2min-Sync + claude-config Repo + Linux-Cron Support --- deploy.sh | 74 +++++++++++++++++++++++++++++++++++------ hooks-v2/sync-to-hub.sh | 36 ++++++++++++++++++++ 2 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 hooks-v2/sync-to-hub.sh diff --git a/deploy.sh b/deploy.sh index eb3860f..7c08fa6 100644 --- a/deploy.sh +++ b/deploy.sh @@ -1,25 +1,77 @@ #!/bin/bash -# Claude Hooks Deploy — läuft auf jedem neuen Mac/Hub-Instanz einmalig +# Claude Hooks + Config Sync Deploy +# Einmalig auf jedem neuen Mac/Hub ausführen: # curl -sL https://git.consoro.eu/barby/claude-hooks/raw/branch/main/deploy.sh | bash set -e HOOKS_REPO="https://barby:dc9a2241890acb243548342977a6c02d6dde39a7@git.consoro.eu/barby/claude-hooks.git" +CONFIG_REPO="https://barby:dc9a2241890acb243548342977a6c02d6dde39a7@git.consoro.eu/barby/claude-config.git" CLAUDE_DIR="$HOME/.claude" HOOKS_DIR="$CLAUDE_DIR/hooks-v2" -LOCAL_REPO="$HOME/git/claude-hooks" +HOOKS_LOCAL="$HOME/git/claude-hooks" +CONFIG_LOCAL="$HOME/git/claude-config" -echo "=== Claude Hooks Deploy ===" -mkdir -p "$HOOKS_DIR" "$LOCAL_REPO" +echo "=== Claude Deploy ===" +mkdir -p "$HOOKS_DIR" "$HOOKS_LOCAL" "$CONFIG_LOCAL" -if [ ! -d "$LOCAL_REPO/.git" ]; then - git clone "$HOOKS_REPO" "$LOCAL_REPO" +# 1) Hooks-Repo klonen/updaten +if [ ! -d "$HOOKS_LOCAL/.git" ]; then + git clone "$HOOKS_REPO" "$HOOKS_LOCAL" -q else - cd "$LOCAL_REPO" && git pull origin main -q + cd "$HOOKS_LOCAL" && git pull origin main -q fi -# Scripts deployen -cp "$LOCAL_REPO/hooks-v2/"*.sh "$HOOKS_DIR/" 2>/dev/null +# Hook-Scripts deployen +cp "$HOOKS_LOCAL/hooks-v2/"*.sh "$HOOKS_DIR/" 2>/dev/null chmod +x "$HOOKS_DIR/"*.sh +echo "✅ Hooks deployed: $(ls $HOOKS_DIR/*.sh | wc -l | tr -d ' ') Scripts" -echo "✅ $(ls $HOOKS_DIR/*.sh | wc -l | tr -d ' ') Hook-Scripts deployed nach $HOOKS_DIR" -echo "Fertig — bitte Claude Code neu starten." +# 2) Config-Repo einrichten (falls nicht vorhanden — erstmalig) +if [ ! -d "$CONFIG_LOCAL/.git" ]; then + # Repo auf Hub erstellen falls nötig + TOKEN="dc9a2241890acb243548342977a6c02d6dde39a7" + curl -s -X POST "https://git.consoro.eu/api/v1/user/repos" \ + -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ + -d '{"name":"claude-config","description":"Claude Code Config Sync","private":true,"auto_init":true}' \ + -o /dev/null + sleep 2 + git clone "$CONFIG_REPO" "$CONFIG_LOCAL" -q 2>/dev/null || (mkdir -p "$CONFIG_LOCAL" && cd "$CONFIG_LOCAL" && git init && git remote add origin "$CONFIG_REPO") +fi +echo "✅ Config-Repo ready: $CONFIG_LOCAL" + +# 3) LaunchAgent (macOS) oder Cron (Linux) für 2min-Sync installieren +OS=$(uname) +if [ "$OS" = "Darwin" ]; then + PLIST="$HOME/Library/LaunchAgents/eu.consoro.claude-sync.plist" + cat > "$PLIST" << PEOF + + + + + Labeleu.consoro.claude-sync + ProgramArguments + + /bin/bash + $HOOKS_DIR/sync-to-hub.sh + + StartInterval120 + RunAtLoad + StandardOutPath/tmp/claude-sync.log + StandardErrorPath/tmp/claude-sync.err + + +PEOF + launchctl unload "$PLIST" 2>/dev/null || true + launchctl load "$PLIST" + echo "✅ LaunchAgent installiert (alle 2min)" +else + # Linux: crontab + (crontab -l 2>/dev/null | grep -v claude-sync; echo "*/2 * * * * bash $HOOKS_DIR/sync-to-hub.sh >> /tmp/claude-sync.log 2>&1") | crontab - + echo "✅ Cron installiert (alle 2min)" +fi + +echo "" +echo "=== Deploy fertig ===" +echo "Hooks: $HOOKS_DIR" +echo "Sync: $CONFIG_LOCAL → git.consoro.eu/barby/claude-config (alle 2min)" +echo "Bitte Claude Code neu starten." diff --git a/hooks-v2/sync-to-hub.sh b/hooks-v2/sync-to-hub.sh new file mode 100644 index 0000000..531e5df --- /dev/null +++ b/hooks-v2/sync-to-hub.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Alle 2min: lokale Claude-Änderungen → git.consoro.eu/barby/claude-config +# Synct: memory/, skills/, hooks-v2/ — KEINE Credentials/Sessions/Cache + +REPO_DIR="$HOME/git/claude-config" +CLAUDE_DIR="$HOME/.claude" + +[ ! -d "$REPO_DIR/.git" ] && exit 0 + +# Relevante Dirs kopieren (kein Cache, keine Sessions, keine Credentials) +rsync -a --delete \ + --exclude="*.jsonl" \ + --exclude="cache/" \ + --exclude="session-env/" \ + --exclude="sessions/" \ + --exclude="logs/" \ + --exclude="log/" \ + --exclude="mcp-needs-auth-cache.json" \ + --exclude=".last-update" \ + "$CLAUDE_DIR/projects/" "$REPO_DIR/projects/" 2>/dev/null + +rsync -a --delete "$CLAUDE_DIR/hooks-v2/" "$REPO_DIR/hooks-v2/" 2>/dev/null +rsync -a --delete "$CLAUDE_DIR/skills/" "$REPO_DIR/skills/" 2>/dev/null + +# Status-Datei aus Claude_desktop falls vorhanden +STATUS_SRC="/Users/matthiaskoerner/Library/Mobile Documents/com~apple~CloudDocs/Claude_desktop/status.md" +[ -f "$STATUS_SRC" ] && cp "$STATUS_SRC" "$REPO_DIR/status.md" + +cd "$REPO_DIR" || exit 1 +git add -A +git diff --cached --quiet && exit 0 # nix geändert + +HOSTNAME=$(hostname -s) +git commit -m "auto-sync $HOSTNAME $(date '+%H:%M:%S')" \ + --author="Barby " -q +git push origin main -q 2>&1 | logger -t claude-sync