5c2c957ceb
- 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
161 lines
4.5 KiB
Bash
Executable File
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."
|