Files
apxtri/setup/promote-to-skeleton.sh
T
phil 5c2c957ceb Align setup/docs with repo-versioned mainapp and cdn
- init.sh: drop pointless cdn/lib + mainapp mkdirs, stale comment
- promote-to-skeleton.sh: only promote schema/ + objects/ (mainapp/cdn now live in the apxtri repo)
- AGENTS.md: New Tribe Setup reflects repo-versioned mainapp/cdn (symlinks)
- documents/01-SETUP.md: current directory layout + mainapp/cdn note
2026-08-14 04:53:39 +00:00

161 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# promote-to-skeleton.sh
# Promotes tribe development to apxtri skeleton for PR.
# Run from the tribe you want to promote (e.g., TOWN=dev).
#
# Usage:
# sudo ./promote-to-skeleton.sh [--dry-run] [--town <name>]
#
# What it does:
# 1. Copies {tribe}/schema/* → apxtri/schema/ (promote tribe schemas to core)
# 2. Copies {DATAPATH}/{tribe}/objects/ → skeletons/newtribe/data/objects/
# 3. Replaces {tribe} → $town in $ref paths within schemas and data
# 4. Shows summary of changes
#
# NOTE: mainapp and cdn are NOT promoted anymore — they are versioned directly
# in the apxtri repository (apxtri/mainapp, apxtri/cdn) and provisioned by init.sh
# via symlinks. See documents/17-TEAMDEV.md.
set -euo pipefail
DATE="$(date '+%Y-%m-%d %H:%M:%S')"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="$SCRIPT_DIR/../.env"
DRY_RUN=false
TOWN=""
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run) DRY_RUN=true; shift ;;
--town) TOWN="$2"; shift 2 ;;
*) echo "Usage: $0 [--dry-run] [--town <name>]"; exit 1 ;;
esac
done
if [[ -f "$ENV_FILE" ]]; then
set -a
source "$ENV_FILE"
set +a
else
echo "[ERROR] .env not found at $ENV_FILE"
exit 1
fi
TRIBE="${TOWN:-${TOWN:-}}"
if [[ -z "$TRIBE" ]]; then
TRIBE="$TOWN"
fi
if [[ -z "$TRIBE" ]]; then
echo "[ERROR] No tribe specified. Use --town or set TOWN in .env"
exit 1
fi
NODEPATH="${NODEPATH:-/opt/apxtowns/$TOWN.$NATION}"
DATAPATH="${DATAPATH:-/var/lib/apxtowns/$TOWN.$NATION}"
APXTRI_DIR="$NODEPATH/apxtri"
SKELETON_DATA_DIR="$APXTRI_DIR/setup/skeletons/newtribe/data"
TRIBE_CODE_SCHEMA="$NODEPATH/$TRIBE/schema"
TRIBE_DATA_OBJECTS="$DATAPATH/$TRIBE/objects"
APXTRI_SCHEMA="$APXTRI_DIR/schema"
if [[ ! -d "$APXTRI_DIR" ]]; then
echo "[ERROR] apxtri directory not found: $APXTRI_DIR"
exit 1
fi
echo "$DATE 🔄 Promoting tribe '$TRIBE' to skeleton..."
echo " NODEPATH: $NODEPATH"
echo " DATAPATH: $DATAPATH"
echo " DRY_RUN: $DRY_RUN"
echo ""
PROMOTED_FILES=0
declare -a ACTIONS
record() {
PROMOTED_FILES=$((PROMOTED_FILES + 1))
ACTIONS+=("$1")
}
echo "─── Step 1: Schemas ───"
if [[ -d "$TRIBE_CODE_SCHEMA" ]]; then
for schema_file in "$TRIBE_CODE_SCHEMA"/*.json; do
[[ -f "$schema_file" ]] || continue
base="$(basename "$schema_file")"
dest="$APXTRI_SCHEMA/$base"
if $DRY_RUN; then
echo " 📋 Would promote schema: $TRIBE/schema/$base → apxtri/schema/$base"
continue
fi
sed "s|\"$TRIBE/objects/|\"\$town/objects/|g" "$schema_file" > "$dest"
record "Schema: $base"
done
else
echo " ⏭️ No tribe schemas at $TRIBE_CODE_SCHEMA"
fi
echo "─── Step 2: Data objects ───"
if [[ -d "$TRIBE_DATA_OBJECTS" ]]; then
for objdir in "$TRIBE_DATA_OBJECTS"/*/; do
[[ -d "$objdir" ]] || continue
objname="$(basename "$objdir")"
if [[ "$objname" =~ ^(nations|towns|tribes|logs|backup|tmp)$ ]]; then
echo " ⏭️ Skip infrastructure object: $objname"
continue
fi
src_items="$objdir/itm"
if [[ ! -d "$src_items" ]] || [[ -z "$(ls -A "$src_items" 2>/dev/null)" ]]; then
echo " ⏭️ No items for object: $objname"
continue
fi
dest="$SKELETON_DATA_DIR/objects/$objname/itm"
if $DRY_RUN; then
echo " 📋 Would promote objects/$objname/ → skeleton"
continue
fi
mkdir -p "$dest"
for item in "$src_items"/*.json; do
[[ -f "$item" ]] || continue
dest_item="$dest/$(basename "$item")"
sed "s|\"$TRIBE/|\"\$town/|g" "$item" > "$dest_item"
done
record "Objects: $objname"
src_idx="$objdir/idx"
if [[ -d "$src_idx" ]]; then
cp -r "$src_idx" "$SKELETON_DATA_DIR/objects/$objname/" 2>/dev/null || true
fi
done
else
echo " ⏭️ No objects at $TRIBE_DATA_OBJECTS"
fi
echo ""
echo "═══════════════════════════════════════════"
echo "📦 Promotion summary:"
if [[ "$PROMOTED_FILES" -eq 0 ]]; then
echo " No files promoted."
else
for action in "${ACTIONS[@]}"; do
echo " ✅ $action"
done
echo ""
echo " Total: $PROMOTED_FILES item(s) promoted."
fi
if $DRY_RUN; then
echo ""
echo "⚠️ DRY-RUN mode — no changes were made."
echo " Run without --dry-run to apply."
fi
echo ""
echo "📋 Next steps:"
echo " 1. Review the changes in apxtri/schema/ and setup/skeletons/"
echo " 2. git add -A && git commit -m 'promote $TRIBE to skeleton'"
echo " 3. git push && create PR"
echo "$DATE ✅ Done."