mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-04-06 21:41:42 +02:00
feat: automate project bootstrap and registry
This commit is contained in:
@@ -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"
|
||||
|
||||
77
scripts/resolve-project-path.sh
Executable file
77
scripts/resolve-project-path.sh
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/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"
|
||||
OS="$(uname -s)"
|
||||
PROJECT_NAME="${1:-}"
|
||||
|
||||
usage() {
|
||||
echo "Usage: resolve-project-path.sh <nom_du_projet>" >&2
|
||||
}
|
||||
|
||||
if [ -z "$PROJECT_NAME" ]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$PROJECTS_CONF" ]; then
|
||||
echo "Erreur : fichier introuvable : $PROJECTS_CONF" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
resolve_base_path() {
|
||||
local scope="$1"
|
||||
|
||||
case "$OS" in
|
||||
Linux)
|
||||
case "$scope" in
|
||||
perso|mindleaf|lab|archive)
|
||||
echo "/srv/projects"
|
||||
;;
|
||||
*)
|
||||
echo "Erreur : scope inconnu sur Linux : $scope" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
Darwin)
|
||||
case "$scope" in
|
||||
perso)
|
||||
echo "/Volumes/TeraSSD/Projets_Dev"
|
||||
;;
|
||||
mindleaf)
|
||||
echo "/Volumes/TeraSSD/Projets_Dev/__Mindleaf"
|
||||
;;
|
||||
lab)
|
||||
echo "/Volumes/TeraSSD/Labs"
|
||||
;;
|
||||
archive)
|
||||
echo "/Volumes/TeraSSD/Archives_Projets"
|
||||
;;
|
||||
*)
|
||||
echo "Erreur : scope inconnu sur macOS : $scope" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "Erreur : système non supporté : $OS" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
while IFS='|' read -r name stack scope state; do
|
||||
[[ -z "$name" || "$name" == \#* ]] && continue
|
||||
|
||||
if [ "$name" = "$PROJECT_NAME" ]; then
|
||||
BASE_PATH="$(resolve_base_path "$scope")"
|
||||
echo "$BASE_PATH/$name"
|
||||
exit 0
|
||||
fi
|
||||
done < "$PROJECTS_CONF"
|
||||
|
||||
echo "Erreur : projet introuvable dans _projects.conf : $PROJECT_NAME" >&2
|
||||
exit 1
|
||||
@@ -9,39 +9,16 @@ set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
SOURCE="$REPO_ROOT/_AI_INSTRUCTIONS.md"
|
||||
PROJECTS_CONF="$REPO_ROOT/_projects.conf"
|
||||
|
||||
# --- Détection machine ---
|
||||
OS="$(uname -s)"
|
||||
CHANGED=0
|
||||
|
||||
# --- Construire la table markdown des projets ---
|
||||
build_projects_table() {
|
||||
local os="$1"
|
||||
echo "| Projet | Stack | Localisation | État |"
|
||||
echo "|---|---|---|---|"
|
||||
while IFS='|' read -r nom stack path_nuc path_mac etat; do
|
||||
# Ignorer lignes vides et commentaires
|
||||
[[ -z "$nom" || "$nom" == \#* ]] && continue
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
path="$path_mac"
|
||||
else
|
||||
path="$path_nuc"
|
||||
fi
|
||||
if [ -z "$path" ]; then
|
||||
echo "| $nom | $stack | *non disponible sur cette machine* | $etat |"
|
||||
else
|
||||
echo "| $nom | $stack | \`$path\` | $etat |"
|
||||
fi
|
||||
done < "$PROJECTS_CONF"
|
||||
}
|
||||
|
||||
generate_repo_claude() {
|
||||
local header="$1"
|
||||
local dest="$2"
|
||||
local projects_table
|
||||
local tmp
|
||||
projects_table="$(build_projects_table "$OS")"
|
||||
|
||||
tmp="$(mktemp)"
|
||||
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
@@ -49,14 +26,7 @@ generate_repo_claude() {
|
||||
{
|
||||
echo "$header"
|
||||
echo ""
|
||||
# Remplacer {{PROJECTS_TABLE}} par la table générée
|
||||
while IFS= read -r line; do
|
||||
if [ "$line" = "{{PROJECTS_TABLE}}" ]; then
|
||||
echo "$projects_table"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
done < "$SOURCE"
|
||||
cat "$SOURCE"
|
||||
} > "$tmp"
|
||||
|
||||
if [ ! -f "$dest" ] || ! cmp -s "$tmp" "$dest"; then
|
||||
|
||||
Reference in New Issue
Block a user