Files
_Assistant_Lead_Tech/scripts/bmad-init-project.sh
MaksTinyWorkshop 808e9d5536 MAJ
2026-03-26 13:36:51 +01:00

128 lines
4.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# bmad-init-project.sh
# Initialise la structure BMAD d'un nouveau projet en symlinkant la carcasse centralisée.
#
# Usage : bmad-init (depuis la racine du projet)
# Ou : ./bmad-init-project.sh <chemin-absolu-du-projet>
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BMAD_BASE="$(cd "$SCRIPT_DIR/../80_bmad/base" && pwd)"
# ─── Résolution du dossier projet ────────────────────────────────────────────
if [[ $# -ge 1 ]]; then
PROJECT_ROOT="$1"
else
PROJECT_ROOT="$(pwd)"
fi
if [[ ! -d "$PROJECT_ROOT" ]]; then
echo "Erreur : le dossier '$PROJECT_ROOT' n'existe pas."
exit 1
fi
if [[ ! -d "$BMAD_BASE" ]]; then
echo "Erreur : BMAD base introuvable à '$BMAD_BASE'."
exit 1
fi
PROJECT_NAME="$(basename "$PROJECT_ROOT")"
echo "→ Initialisation BMAD pour : $PROJECT_ROOT"
# ─── CLAUDE.md + AGENTS.md ───────────────────────────────────────────────────
"$SCRIPT_DIR/generate_project_claude.sh" "$PROJECT_NAME" "$PROJECT_ROOT"
# ─── Modules à symlinkter dans _bmad/ ────────────────────────────────────────
BMAD_MODULES=(core bmm cis tea _config)
mkdir -p "$PROJECT_ROOT/_bmad"
for module in "${BMAD_MODULES[@]}"; do
TARGET="$PROJECT_ROOT/_bmad/$module"
SOURCE="$BMAD_BASE/_bmad/$module"
if [[ ! -d "$SOURCE" ]]; then
echo " ⚠ Module '$module' absent de la base, ignoré."
continue
fi
if [[ -L "$TARGET" ]]; then
echo " ~ symlink déjà présent : _bmad/$module"
elif [[ -e "$TARGET" ]]; then
echo " ⚠ '$TARGET' existe déjà (pas un symlink), ignoré."
else
ln -s "$SOURCE" "$TARGET"
echo " ✓ symlink créé : _bmad/$module$SOURCE"
fi
done
# ─── _memory : copie locale (écrite par les agents) ──────────────────────────
MEMORY_TARGET="$PROJECT_ROOT/_bmad/_memory"
MEMORY_SOURCE="$BMAD_BASE/_bmad/_memory"
if [[ -L "$MEMORY_TARGET" ]]; then
echo " ⚠ _bmad/_memory est un symlink — conversion en copie locale..."
rm "$MEMORY_TARGET"
cp -r "$MEMORY_SOURCE" "$MEMORY_TARGET"
echo " ✓ _memory copié localement"
elif [[ -d "$MEMORY_TARGET" ]]; then
echo " ~ _bmad/_memory existe déjà, non écrasé."
else
cp -r "$MEMORY_SOURCE" "$MEMORY_TARGET"
echo " ✓ _memory initialisé depuis la base"
fi
# ─── .agents/ et .claude/ : symlinks à la racine du projet ──────────────────
for dir in .agents .claude; do
TARGET="$PROJECT_ROOT/$dir"
SOURCE="$BMAD_BASE/$dir"
if [[ ! -d "$SOURCE" ]]; then
echo " ⚠ '$dir' absent de la base, ignoré."
continue
fi
if [[ -L "$TARGET" ]]; then
echo " ~ symlink déjà présent : $dir"
elif [[ -d "$TARGET" ]]; then
echo " ⚠ '$dir' existe déjà (dossier réel), ignoré. Merge manuel requis."
else
ln -s "$SOURCE" "$TARGET"
echo " ✓ symlink créé : $dir$SOURCE"
fi
done
# ─── _bmad-output/ : dossier local vide ─────────────────────────────────────
OUTPUT_DIR="$PROJECT_ROOT/_bmad-output"
if [[ ! -d "$OUTPUT_DIR" ]]; then
mkdir -p "$OUTPUT_DIR"/{brainstorming,planning-artifacts,implementation-artifacts,test-artifacts}
echo " ✓ _bmad-output/ créé"
else
echo " ~ _bmad-output/ existe déjà"
fi
# ─── Résumé ──────────────────────────────────────────────────────────────────
echo ""
echo "Structure BMAD initialisée :"
echo ""
echo " $PROJECT_ROOT/"
echo " ├── _bmad/"
for module in "${BMAD_MODULES[@]}"; do
echo " │ ├── $module → symlink (centralisé)"
done
echo " │ └── _memory/ (local)"
echo " ├── .agents/ → symlink (centralisé)"
echo " ├── .claude/ → symlink (centralisé)"
echo " └── _bmad-output/ (local)"
echo ""
echo "✓ Prêt."