feat: automate project bootstrap and registry

This commit is contained in:
MaksTinyWorkshop
2026-03-08 17:48:48 +01:00
parent e98575aedf
commit c1f96fae96
6 changed files with 233 additions and 61 deletions

View File

@@ -1,11 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
PROJECTS_CONF="$REPO_ROOT/_projects.conf"
PROJECT_NAME="${1:-}"
OS="$(uname -s)"
TARGET_BASE=""
PROJECT_PATH=""
PROJECT_SCOPE=""
PROJECT_STACK=""
PROJECT_STATE="dev"
if [ -z "$PROJECT_NAME" ]; then
echo "Usage: mkproj <nom_du_projet>"
exit 1
@@ -14,18 +22,30 @@ fi
choose_mac_target_base() {
echo "Environnement détecté : Mac"
echo "Choisir le type de projet :"
echo " 1) Projet perso -> /Volumes/TeraSSD/Projets_Dev"
echo " 2) Projet Mindleaf -> /Volumes/TeraSSD/Projets_Dev/__Mindleaf"
printf "Votre choix [1/2] : "
echo " 1) Projet perso -> /Volumes/TeraSSD/Projets_Dev"
echo " 2) Projet Mindleaf -> /Volumes/TeraSSD/Projets_Dev/__Mindleaf"
echo " 3) Projet lab -> /Volumes/TeraSSD/Labs"
echo " 4) Projet archive -> /Volumes/TeraSSD/Archives_Projets"
printf "Votre choix [1/2/3/4] : "
read -r choice
case "$choice" in
1)
PROJECT_SCOPE="perso"
TARGET_BASE="/Volumes/TeraSSD/Projets_Dev"
;;
2)
PROJECT_SCOPE="mindleaf"
TARGET_BASE="/Volumes/TeraSSD/Projets_Dev/__Mindleaf"
;;
3)
PROJECT_SCOPE="lab"
TARGET_BASE="/Volumes/TeraSSD/Labs"
;;
4)
PROJECT_SCOPE="archive"
TARGET_BASE="/Volumes/TeraSSD/Archives_Projets"
;;
*)
echo "Choix invalide."
exit 1
@@ -38,6 +58,24 @@ choose_target_base() {
Linux)
echo "Environnement détecté : NUC/Linux"
TARGET_BASE="/srv/projects"
echo "Choisir le scope logique du projet :"
echo " 1) perso"
echo " 2) mindleaf"
echo " 3) lab"
echo " 4) archive"
printf "Votre choix [1/2/3/4] : "
read -r choice
case "$choice" in
1) PROJECT_SCOPE="perso" ;;
2) PROJECT_SCOPE="mindleaf" ;;
3) PROJECT_SCOPE="lab" ;;
4) PROJECT_SCOPE="archive" ;;
*)
echo "Choix invalide."
exit 1
;;
esac
;;
Darwin)
choose_mac_target_base
@@ -49,6 +87,30 @@ choose_target_base() {
esac
}
prompt_project_metadata() {
printf "Stack principale [à préciser] : "
read -r PROJECT_STACK
PROJECT_STACK="${PROJECT_STACK:-à préciser}"
printf "État du projet [dev] : "
read -r PROJECT_STATE
PROJECT_STATE="${PROJECT_STATE:-dev}"
}
register_project_in_conf() {
if [ ! -f "$PROJECTS_CONF" ]; then
echo "Erreur : fichier introuvable : $PROJECTS_CONF" >&2
exit 1
fi
if grep -Eq "^${PROJECT_NAME}\|" "$PROJECTS_CONF"; then
echo "Erreur : le projet $PROJECT_NAME existe déjà dans _projects.conf" >&2
exit 1
fi
printf "%s|%s|%s|%s\n" "$PROJECT_NAME" "$PROJECT_STACK" "$PROJECT_SCOPE" "$PROJECT_STATE" >> "$PROJECTS_CONF"
}
create_readme() {
cat <<EOF > "$PROJECT_PATH/README.md"
# $PROJECT_NAME
@@ -61,6 +123,7 @@ Projet initialisé avec l'environnement Lead_tech.
- \`AGENTS.md\` : symlink vers \`CLAUDE.md\`
- \`README.md\` : documentation projet
- \`.gitignore\` : exclusions Git de base
- \`_projects.conf\` (Lead_tech) : registre logique des projets
## Commandes utiles
@@ -111,10 +174,14 @@ tmp/
# AI tools
.claude/
.codex/
# Agent compatibility file (symlink to CLAUDE.md)
AGENTS.md
EOF
}
choose_target_base
prompt_project_metadata
if [ ! -d "$TARGET_BASE" ]; then
echo "Le dossier cible n'existe pas : $TARGET_BASE"
@@ -139,8 +206,11 @@ gen-claude "$PROJECT_NAME"
create_readme
create_gitignore
register_project_in_conf
echo ""
echo "Projet créé : $PROJECT_PATH"
echo "Projet enregistré dans : $PROJECTS_CONF"
echo ""
echo "Prochaines étapes :"
echo " cd $PROJECT_PATH"