#!/usr/bin/env bash set -euo pipefail # === METADATA === SCRIPT_NAME="$(basename "$0")" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SKILL_ROOT="$(dirname "$SCRIPT_DIR")" # === CONFIGURATION === : "${NODE_NAME:=node-a}" : "${GITOPS_ROOT:=$HOME/infrastructure}" : "${OUTPUT_DIR:=$SKILL_ROOT/outputs}" # === FUNCTIONS === log_info() { echo "[INFO] $(date -Iseconds) $*"; } log_warn() { echo "[WARN] $(date -Iseconds) $*" >&2; } main() { log_info "Starting $SCRIPT_NAME (PLAN ONLY - no changes made)..." # Expand ~ in GITOPS_ROOT GITOPS_ROOT="${GITOPS_ROOT/#\~/$HOME}" echo "" echo "============================================" echo " GITOPS STRUCTURE PLAN" echo " Node: $NODE_NAME" echo "============================================" echo "" echo "=== Directory Structure ===" echo " $GITOPS_ROOT/" echo " +-- config.git/ (bare repo: infrastructure config)" echo " +-- secrets.git/ (bare repo: encrypted secrets)" echo " +-- manifests.git/ (bare repo: k8s/deployment manifests)" echo "" echo "=== Branch Structure (each repo) ===" echo " main - production state" echo " staging - pre-production testing" echo " dev - development changes" echo "" echo "=== Post-Receive Hooks ===" echo " config.git: Validate YAML on push" echo " secrets.git: Verify GPG encryption" echo " manifests.git: Validate manifest syntax" echo "" echo "=== Working Directories ===" echo " After setup, clone repos to working directories:" echo " git clone $GITOPS_ROOT/config.git ~/config" echo " git clone $GITOPS_ROOT/secrets.git ~/secrets" echo " git clone $GITOPS_ROOT/manifests.git ~/manifests" echo "" # Check for existing repos for repo in config secrets manifests; do if [[ -d "$GITOPS_ROOT/${repo}.git" ]]; then log_warn "$repo.git already exists - apply will skip creation" fi done echo "============================================" echo " To apply: ./scripts/31_gitops_apply.sh" echo " To abort: Do nothing" echo " To rollback: ./scripts/rollback/undo_gitops.sh" echo "============================================" log_info "Completed $SCRIPT_NAME" } [[ "${BASH_SOURCE[0]}" == "$0" ]] && main "$@"