kitestacks-homelab/autosync/promote.sh
kenpat fb822d5142 Reorganize repos into kitestacks-homelab + plain-English doc rewrite
- Rewrote RUNBOOK.md and DEBUG-DOCUMENTATION.md in simple 5th-grade language
  with real-world analogies for every technical concept
- Updated README.md with current service inventory and folder map
- Added cloud-migration/ subdirectory (from kitestacks-cloud-migration repo)
- Added autosync/ subdirectory (from kitestacks-homelab-autosync-test repo)
- Added osticket/ subdirectory (from OSTicketSystem repo)
- Added cloud/ placeholder for future cloud configs
- Excluded binary DB/postgres files from autosync subdirectory

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 18:37:58 -05:00

102 lines
5.1 KiB
Bash

#!/bin/bash
# =============================================================================
# promote.sh
# Flips the watcher from TEST repo → kenpat/kitestacks-homelab (main).
# Run after verifying the test repo looks correct in Forgejo.
# =============================================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="$SCRIPT_DIR/config/settings.conf"
STATE_FILE="/opt/kitestacks-autosync/.active_target"
WORK_DIR="/opt/kitestacks-autosync"
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
[[ $EUID -ne 0 ]] && error "Run as root: sudo bash promote.sh"
source "$CONFIG_FILE"
CURRENT="$(cat "$STATE_FILE" 2>/dev/null || echo "test")"
if [[ "$CURRENT" == "main" ]]; then
warn "Already targeting kenpat/kitestacks-homelab. Nothing to do."
exit 0
fi
echo ""
warn "┌──────────────────────────────────────────────────────────────┐"
warn "│ PROMOTE: test repo → kenpat/kitestacks-homelab │"
warn "│ │"
warn "│ From: ${FORGEJO_URL}/${FORGEJO_USER}/${TEST_REPO}"
warn "│ To : ${FORGEJO_URL}/${FORGEJO_USER}/${MAIN_REPO}"
warn "│ │"
warn "│ All future auto-commits will go to the MAIN repo. │"
warn "└──────────────────────────────────────────────────────────────┘"
echo ""
read -rp "Have you verified the test repo looks correct? Type 'promote' to confirm: " CONFIRM
[[ "$CONFIRM" != "promote" ]] && { info "Aborted."; exit 0; }
# ── Set up remote prefix ──────────────────────────────────────────────────────
if [[ "$AUTH_METHOD" == "ssh" ]]; then
REMOTE_BASE="git@gitforge.kitestacks.com:${FORGEJO_USER}"
else
REMOTE_BASE="https://gitforge.kitestacks.com/${FORGEJO_USER}"
fi
# ── Clone main repo if not already present ────────────────────────────────────
MAIN_DIR="$WORK_DIR/$MAIN_REPO"
if [[ ! -d "$MAIN_DIR/.git" ]]; then
info "Cloning kenpat/kitestacks-homelab..."
git clone "${REMOTE_BASE}/${MAIN_REPO}.git" "$MAIN_DIR"
fi
cd "$MAIN_DIR"
git config user.email "$GIT_EMAIL"
git config user.name "$GIT_NAME"
git pull --rebase origin HEAD 2>/dev/null || true
# ── Add version tag to main README.md if not already there ───────────────────
if ! grep -q '<!-- version:' "$MAIN_DIR/README.md" 2>/dev/null; then
info "Injecting version tag into main README.md..."
# Get the latest version from the test repo
TEST_VER=$(grep -oP '(?<=version:\s)[\d.]+' "$WORK_DIR/$TEST_REPO/README.md" 2>/dev/null | head -1 || echo "1.3.0")
# Inject after the first H1
sed -i "0,/^# /{s|^# \(.*\)|# \1\n\n<!-- version: $TEST_VER -->|}" "$MAIN_DIR/README.md"
# Update the docs reference line
sed -i "s|docs/KiteStacks-Homelab-Documentation-v.*\.md|docs/KiteStacks-Homelab-Documentation-v${TEST_VER}.md|" "$MAIN_DIR/README.md" || true
# Copy CHANGELOG.md and docs from test repo if main doesn't have them
if [[ ! -f "$MAIN_DIR/CHANGELOG.md" ]]; then
cp "$WORK_DIR/$TEST_REPO/CHANGELOG.md" "$MAIN_DIR/CHANGELOG.md" 2>/dev/null || true
fi
if [[ ! -d "$MAIN_DIR/docs" ]]; then
cp -r "$WORK_DIR/$TEST_REPO/docs" "$MAIN_DIR/docs" 2>/dev/null || true
fi
git add -A
git commit -m "chore: inject autosync version tracking — promoted from test"
git push origin HEAD
info "Main repo prepared for autosync."
fi
# ── Flip state ────────────────────────────────────────────────────────────────
echo "main" > "$STATE_FILE"
info "Active target → main (kenpat/kitestacks-homelab)"
# ── Restart service ───────────────────────────────────────────────────────────
info "Restarting kitestacks-autosync service..."
systemctl restart kitestacks-autosync
sleep 2
systemctl status kitestacks-autosync --no-pager
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
info "Promotion complete!"
info " Now watching → ${FORGEJO_URL}/${FORGEJO_USER}/${MAIN_REPO}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"