chore(deploy): make pousse.sh build opt-in via --build
**Motivations:** - Push-by-script should stage, commit, and push without implicit full monorepo builds; compilation must be explicit. **Root causes:** - pousse.sh always ran npm build for each build_dir before git add, coupling push duration and Next lock issues to every push. **Correctives:** - Add --build flag to run the previous build loop; default skips builds and prints guidance. - Update push-by-script agent (step 4 bis, closure types), deploy-pprod-or-prod note, cloture-lint wording, agents-scripts-split. **Evolutions:** - Documented alternative: manual builds per build_dirs or single pousse.sh --build <<MSG. **Pages affectées:** - deploy/pousse.sh, .smartIde/agents/push-by-script.md, deploy-pprod-or-prod.md, cloture-lint.mdc, projects/kogus/docs/agents-scripts-split.md
This commit is contained in:
parent
ffdb076926
commit
2baae6ca48
@ -1,6 +1,6 @@
|
||||
---
|
||||
name: deploy-pprod-or-prod
|
||||
description: Déploie vers pprod ou prod en suivant le workflow change-to-all-branches, deploy-by-script-to, puis push-by-script. Toute correction issue d’une phase pprod/prod se fait sur test puis le workflow est rejoué depuis change-to-all-branches. Paramètre obligatoire pprod ou prod.
|
||||
description: Déploie vers pprod ou prod : push-by-script, alignement branches (change-to-all-branches.sh --align-only, sans déploiement test), deploy-by-script-to, puis push-by-script. Toute correction issue d’une phase pprod/prod se fait sur test puis le workflow est rejoué depuis l’étape 2. Paramètre obligatoire pprod ou prod.
|
||||
model: inherit
|
||||
is_background: false
|
||||
---
|
||||
@ -37,13 +37,15 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
|
||||
|
||||
**Répertoire d'exécution (standalone) :** Racine de ia_dev. Tous les scripts sont invoqués depuis la racine de ia_dev.
|
||||
|
||||
**`repository_root` (LeCoffre) / branche `test` — pas de `git stash` :** ne pas utiliser **`git stash`** sur le clone applicatif pour « préparer » **`pousse.sh`** ou un déploiement — commit WIP + **`./deploy/pousse.sh`** (message sur stdin ; builds explicites avant push ou **`--build`** si compilation requise dans le même appel). Le stash crée des conflits (**`VERSION`**, fichiers non suivis) et duplique souvent un état déjà sur **`origin/test`**.
|
||||
|
||||
## Corrections découvertes sur pprod ou prod (obligatoire)
|
||||
|
||||
- **Contexte** : analyse des logs, échec de **`deploy-by-script-to`**, constat sur le dépôt applicatif alors que la branche locale est **pprod** ou **prod**, ou toute autre intervention qui amène à modifier code, configuration ou documentation du projet cible.
|
||||
- **Interdit** : appliquer la correction **uniquement** sur la branche **pprod** ou **prod** du dépôt applicatif (`repository_root` dans `projects/<id>/conf.json`) et poursuivre sans repasser par **test** (pas de « correctif local pprod/prod puis push ciblé » en dehors du flux test-first).
|
||||
- **Obligation** :
|
||||
1. **`git checkout test`** (ou équivalent validé projet) sur le **dépôt applicatif** ; y **réaliser** les corrections (commits selon règles du projet ; le premier push du cycle est en principe celui de l’**étape 2** via **`/change-to-all-branches`**).
|
||||
2. **Rejouer intégralement** le workflow **depuis l’étape 2** : **`/change-to-all-branches`** (push-by-script + `change-to-all-branches.sh`), puis **étape 3** **`deploy-by-script-to`** vers la cible **pprod** ou **prod**, puis **étapes 4 à 6** comme décrit ci-dessous.
|
||||
1. **`git checkout test`** (ou équivalent validé projet) sur le **dépôt applicatif** ; y **réaliser** les corrections (commits selon règles du projet ; le premier push du cycle est en principe celui de l’**étape 2** via **`/push-by-script`**).
|
||||
2. **Rejouer intégralement** le workflow **depuis l’étape 2** : **`/push-by-script`** puis **`./deploy/change-to-all-branches.sh [project_id] --align-only`**, puis **étape 3** **`deploy-by-script-to`** vers la cible **pprod** ou **prod**, puis **étapes 4 à 6** comme décrit ci-dessous. Pour un **déploiement test** complet après correctif, enchaîner l’agent **`/change-to-all-branches`** en flux **séparé**.
|
||||
- Si plusieurs cycles correction → alignement → déploiement sont nécessaires, **chaque** correction part toujours de **test** puis enchaîne **étape 2 → 6** jusqu’à succès ou blocage utilisateur.
|
||||
|
||||
## Ordre des agents et anti-duplication (obligatoire)
|
||||
@ -52,23 +54,23 @@ Règles **décisionnelles** (ne pas lancer en double ce qu’un agent en aval ex
|
||||
|
||||
| Action en amont | Condition | Application (tant que l’étape 2 ci-dessous existe dans ce fichier) |
|
||||
| --- | --- | --- |
|
||||
| **`/push-by-script`** (branche **test**) | Lancer **avant** ce workflow **seulement si** **`/change-to-all-branches`** ne le lance **pas** aussi. | L’agent **`/change-to-all-branches`** exécute **`/push-by-script`** **avant** `./deploy/change-to-all-branches.sh` (voir `.smartIde/agents/change-to-all-branches.md`, checklist étape 5). Comme **`/deploy-pprod-or-prod`** appelle **`/change-to-all-branches`** à l’étape 2, **interdit** de lancer **`/push-by-script`** sur test **séparément avant** l’étape 2 de ce workflow. |
|
||||
| **`/change-to-all-branches`** | Lancer **avant** ce workflow **seulement si** **`/deploy-pprod-or-prod`** (cible pprod ou prod) ne le lance **pas** aussi. | Ce fichier impose l’**étape 2** « Lancer **`/change-to-all-branches`** ». **Interdit** de lancer **`/change-to-all-branches`** **séparément avant** de commencer ce workflow (sauf **évolution documentée** de ce fichier **sans** étape 2 ; dans ce cas seulement, enchaîner manuellement dans l’ordre push → change-to-all-branches → suite). |
|
||||
| **`/push-by-script`** (branche **test**) | Lancer **avant** ce workflow **seulement si** l’**étape 2** de ce fichier ne le lance **pas** aussi. | L’**étape 2** exécute **`/push-by-script`** **puis** `./deploy/change-to-all-branches.sh [project_id] --align-only`. **Interdit** de lancer **`/push-by-script`** sur test **séparément avant** l’étape 2 de ce workflow (évite la double exécution). |
|
||||
| **Agent `/change-to-all-branches`** (déploiement **test** inclus) | Lancer **avant** ce workflow **seulement** pour un besoin explicite de **déploiement test** (flux séparé). | Ce fichier **n’invoque pas** l’agent **`/change-to-all-branches`** : l’étape 2 aligne les branches via **`change-to-all-branches.sh --align-only`** **sans** **`deploy.sh` test**. **Interdit** de lancer l’agent **`/change-to-all-branches`** juste avant ce workflow pour « pré-déployer test » dans le même objectif pprod/prod — utiliser **`/change-to-all-branches`** en session **dédiée** si le déploiement test est requis. |
|
||||
|
||||
**Si** une future version de ce fichier **supprime** l’étape 2 : réévaluer le tableau (alors **`/change-to-all-branches`** peut être requis en amont, et **`/push-by-script`** reste couvert **si** **`/change-to-all-branches`** est inchangé côté ia_dev).
|
||||
**Si** une future version de ce fichier **supprime** l’étape 2 : réévaluer le tableau (alignement branches + push en amont manuel si besoin).
|
||||
|
||||
### Vérification obligatoire — début d’exécution
|
||||
|
||||
Avant l’**étape 1** du workflow, **afficher et cocher** (dans la sortie de l’agent) :
|
||||
|
||||
1. **Anti-duplication `change-to-all-branches`** : je **n’ai pas** exécuté **`/change-to-all-branches`** complet en dehors de ce run **immédiatement avant** l’étape 2 (conforme : une seule exécution, celle de l’étape 2).
|
||||
2. **Anti-duplication `push-by-script`** : je **n’ai pas** exécuté **`/push-by-script`** sur test **uniquement pour préparer** ce déploiement avant l’étape 2 (le premier push est celui inclus dans **`/change-to-all-branches`** à l’étape 2).
|
||||
1. **Anti-duplication agent `change-to-all-branches`** : je **n’ai pas** enchaîné l’agent **`/change-to-all-branches`** (déploiement **test**) dans le même run **pour le même objectif** pprod/prod **avant** l’étape 2, sauf exigence utilisateur documentée (flux test dédié).
|
||||
2. **Anti-duplication `push-by-script`** : je **n’ai pas** exécuté **`/push-by-script`** sur test **uniquement pour préparer** ce déploiement avant l’étape 2 (le premier push est celui de l’**étape 2**).
|
||||
|
||||
Si l’utilisateur ou un autre processus **a** déjà aligné / poussé : **le signaler** ; ne **pas** refaire **`/push-by-script`** ni **`/change-to-all-branches`** en amont par habitude — suivre quand même l’étape 2 (idempotence gérée par les scripts / l’agent change-to-all-branches).
|
||||
Si l’utilisateur ou un autre processus **a** déjà aligné / poussé : **le signaler** ; ne **pas** refaire **`/push-by-script`** en amont par habitude — suivre quand même l’étape 2 (idempotence gérée par les scripts).
|
||||
|
||||
### Vérification obligatoire — fin d’agent (avant clôture)
|
||||
|
||||
Cocher explicitement : **« Ordre anti-duplication : respecté (pas de `/push-by-script` ni `/change-to-all-branches` standalone avant l’étape 2 hors ce workflow) »** — ou documenter l’exception si évolution du fichier sans étape 2. Cocher : **« Corrections pprod/prod : si applicable, faites sur test puis workflow rejoué depuis étape 2 (aucun correctif applicatif « seulement pprod/prod ») »**. Cocher aussi : **« Lint min. 5 : exécuté sur repository_root + décompte avant/après (ou 0 diagnostic) ; pas de report seul sur /fix-lint »**.
|
||||
Cocher explicitement : **« Ordre anti-duplication : respecté (pas de `/push-by-script` standalone avant l’étape 2 hors ce workflow ; pas d’agent `/change-to-all-branches` complet en doublon pour le même objectif pprod/prod) »** — ou documenter l’exception. Cocher : **« Corrections pprod/prod : si applicable, faites sur test puis workflow rejoué depuis étape 2 (aucun correctif applicatif « seulement pprod/prod ») »**. Cocher aussi : **« Lint min. 5 : exécuté sur repository_root + décompte avant/après (ou 0 diagnostic) ; pas de report seul sur /fix-lint »**.
|
||||
|
||||
## Multisite — projet **kogus** (monorepo LeCoffre ; code produit site `lecoffreio` inchangé)
|
||||
|
||||
@ -78,16 +80,18 @@ Quand **`repository_root`** est le monorepo LeCoffre et **`deploy-by-script-to`*
|
||||
|
||||
1. **Vérifier la branche** : La machine doit être sur la branche **test** au démarrage. Si ce n'est pas le cas, indiquer à l'utilisateur de passer sur test (ou exécuter `git checkout test` depuis la racine projet) avant de continuer.
|
||||
|
||||
2. **Lancer /change-to-all-branches** (sur test) :
|
||||
- Exécuter intégralement l'agent change-to-all-branches (commande /change-to-all-branches) : push-by-script puis `./deploy/change-to-all-branches.sh`.
|
||||
- **Si KO :** Analyser la sortie et les logs (logs/deploy_*.log), identifier la cause. Toute correction sur le dépôt applicatif : **test** d’abord (voir section **Corrections découvertes sur pprod ou prod**), puis relancer **`/change-to-all-branches`** jusqu'à succès.
|
||||
2. **Alignement branches sur test (sans déploiement test)** :
|
||||
- Exécuter intégralement **`/push-by-script`** (message selon règles du projet ; stdin obligatoire en non interactif).
|
||||
- Puis, depuis la racine ia_dev : **`./deploy/change-to-all-branches.sh [project_id] --align-only`** (équivalent **`branch-align.sh test`** après push ; **pas** d’appel **`deploy-lecoffre-all-sites.sh test`** / **`orchestrator.sh test`** dans cette étape).
|
||||
- **Ne pas** invoquer l’agent **`/change-to-all-branches`** ici : cet agent enchaîne le déploiement **test** ; pour un déploiement test complet, flux séparé **`/change-to-all-branches`**.
|
||||
- **Si KO :** Analyser la sortie (et **`logs/deploy_*.log`** si un outil amont les a alimentés). Toute correction sur le dépôt applicatif : **test** d’abord (voir section **Corrections découvertes sur pprod ou prod**), puis relancer l’**étape 2** jusqu'à succès.
|
||||
- **Si OK :** Passer à l'étape 3.
|
||||
|
||||
3. **Lancer le script deploy-by-script-to** avec l’environnement en paramètre (`pprod` ou `prod`) :
|
||||
- Le script est lancé depuis la racine de ia_dev. Avec project_id (optionnel), MAIL_TO ou AI_AGENT_TOKEN le dépôt cible est celui de la conf (deploy.secrets_path). Lancer : `./deploy/deploy-by-script-to.sh [project_id] <pprod|prod>`.
|
||||
- **`deploy.host_stays_on_test: true`** dans `projects/<id>/conf.json` (LeCoffre : **true** dans `projects/kogus/conf.json`) : le clone applicatif reste sur **`test`** ; `deploy-by-script-to.sh` ne fait **pas** de `checkout` **pprod**/**prod** ni `reset --hard` sur ces branches ; le `deploy.sh` du dépôt aligne les remotes / **worktree** (voir **`deploy/README.md`** du dépôt applicatif).
|
||||
- **Sinon :** le script fait en général : passage dans le dépôt du projet, `checkout` sur la branche paramètre, vérification que la base secrets attendue par le projet existe (**kogus** / monorepo LeCoffre : imbriquée **`.secrets/<site>/<env>/`**, voir **`repository_root/docs/features/multi-site-architecture.md`** — le seul plat **`.secrets/<env>/`** n’est pas le contrat nominal multisite), `reset --hard` sur **`origin/<branche>`**, déploiement (orchestrateur ou `deploy.sh`), puis **`checkout test`**.
|
||||
- **Si KO :** Analyser la sortie et les logs, identifier la cause. **Ne pas** se limiter à corriger sur la branche **pprod**/**prod** : retour **test**, corrections, puis **rejouer depuis l’étape 2** (**`/change-to-all-branches`** puis **`deploy-by-script-to`**) jusqu'à succès (section **Corrections découvertes sur pprod ou prod**).
|
||||
- **`deploy.host_stays_on_test: true`** dans `projects/<id>/conf.json` (LeCoffre : **true** dans `projects/kogus/conf.json`) : le clone applicatif reste sur **`test`** ; `deploy-by-script-to.sh` ne fait **pas** de `checkout` **pprod**/**prod** ni `reset --hard` sur ces branches ; le playbook **`deploy/scripts_v2`** aligne les remotes / **worktree** et enchaîne **les trois lignes** (**`orchestrator.sh`** ou **`deploy-lecoffre-all-sites.sh`**) — voir **`deploy/README.md`** du dépôt applicatif.
|
||||
- **Sinon :** le script fait en général : passage dans le dépôt du projet, `checkout` sur la branche paramètre, vérification que la base secrets attendue par le projet existe (**kogus** / monorepo LeCoffre : imbriquée **`.secrets/<site>/<env>/`**, voir **`repository_root/docs/features/multi-site-architecture.md`** — le seul plat **`.secrets/<env>/`** n’est pas le contrat nominal multisite), `reset --hard` sur **`origin/<branche>`**, déploiement (**orchestrateur** ou **`deploy-lecoffre-all-sites.sh`** / repli **`deploy.sh`**), puis **`checkout test`**.
|
||||
- **Si KO :** Analyser la sortie et les logs, identifier la cause. **Ne pas** se limiter à corriger sur la branche **pprod**/**prod** : retour **test**, corrections, puis **rejouer depuis l’étape 2** (**`/push-by-script`** + **`change-to-all-branches.sh --align-only`**, puis **`deploy-by-script-to`**) jusqu'à succès (section **Corrections découvertes sur pprod ou prod**).
|
||||
- **Si OK :** Passer à l'étape 4.
|
||||
|
||||
4. **Branche test après l’étape 3 :** si **`deploy.host_stays_on_test`**, le clone est déjà sur **`test`**. Sinon, le script a remis **`test`** : vérifier que la branche courante est **`test`**.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
---
|
||||
name: push-by-script
|
||||
description: Exécute le script de push deploy/pousse.sh pour stager, committer avec un message structuré et pousser. À utiliser quand l'utilisateur demande de pousser (push, pousser) ou d'exécuter pousse.sh une fois les changements prêts.
|
||||
description: Exécute deploy/pousse.sh pour stager, committer et pousser. Le build n’est plus implicite dans pousse.sh : builds explicites avant l’appel ou option --build. À utiliser quand l’utilisateur demande de pousser (push, pousser) ou pousse.sh une fois les changements et la compilation vérifiés.
|
||||
model: inherit
|
||||
is_background: false
|
||||
---
|
||||
@ -16,7 +16,7 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
|
||||
- Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit.
|
||||
- Réponses concises, sans répéter règles ou docs déjà référencées.
|
||||
|
||||
- **Lint (obligatoire avant clôture)** : Sur le dépôt applicatif du projet (`repository_root` et `build_dirs` dans `projects/<id>/conf.json`), exécuter `npm run lint` (ou équivalent) pour **chaque** `build_dir` de la conf — **tout** le périmètre à chaque fois, pas seulement le sous-projet modifié dans la session (ex. tâche front : lancer aussi le lint sur les autres `build_dirs`). Compter **erreurs + warnings**. Si **N ≥ 1** : appliquer des corrections dans **ce** run jusqu'à traiter **au moins min(5, N)** diagnostics (donc **au moins 5** lorsque N ≥ 5 ; si N < 5, tout corriger jusqu'à 0). **Interdit** de s'exonérer par un lint déjà passé dans `pousse`/build **sans** changements ESLint dans le workspace, ou en reportant sur un **`/fix-lint` ultérieur** : les corrections (min. 5 quand N ≥ 5) font partie **du même run** que la clôture. Clôture : commandes, périmètres, **décompte avant/après**. Voir `.smartIde/rules/cloture-lint.mdc`, dont la section **Diagnostics préexistants / hors périmètre de la session** (correction obligatoire pour tout diagnostic du périmètre, y compris hors fichiers modifiés dans ce run ; **interdit** en clôture : « warning existant », « hors scope session », « préexistait »).
|
||||
- **Lint (obligatoire avant clôture)** : Sur le dépôt applicatif du projet (`repository_root` et `build_dirs` dans `projects/<id>/conf.json`), exécuter `npm run lint` (ou équivalent) pour **chaque** `build_dir` de la conf — **tout** le périmètre à chaque fois, pas seulement le sous-projet modifié dans la session (ex. tâche front : lancer aussi le lint sur les autres `build_dirs`). Compter **erreurs + warnings**. Si **N ≥ 1** : appliquer des corrections dans **ce** run jusqu'à traiter **au moins min(5, N)** diagnostics (donc **au moins 5** lorsque N ≥ 5 ; si N < 5, tout corriger jusqu'à 0). **Interdit** de s'exonérer par un lint déjà passé **sans** changements ESLint enregistrés dans le workspace, ou en reportant sur un **`/fix-lint` ultérieur** : les corrections (min. 5 quand N ≥ 5) font partie **du même run** que la clôture. Clôture : commandes, périmètres, **décompte avant/après**. Voir `.smartIde/rules/cloture-lint.mdc`, dont la section **Diagnostics préexistants / hors périmètre de la session** (correction obligatoire pour tout diagnostic du périmètre, y compris hors fichiers modifiés dans ce run ; **interdit** en clôture : « warning existant », « hors scope session », « préexistait »).
|
||||
|
||||
# Agent push-by-script
|
||||
|
||||
@ -49,7 +49,7 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
|
||||
### Étape 1 — Lecture du script
|
||||
|
||||
- Lire le fichier `deploy/pousse.sh` avec l'outil de lecture.
|
||||
- Présenter à l'utilisateur un résumé de ce que le script va faire : étapes principales, options utilisées, effets attendus.
|
||||
- Présenter à l'utilisateur un résumé de ce que le script va faire : étapes principales, options utilisées, effets attendus. **Par défaut** le script **ne lance pas** de build : uniquement **`git add -A`**, **`commit`**, **`push`** après lecture du message sur stdin ; le build n’intervient que si **`--build`** est passé.
|
||||
- Ne pas lancer le script avant d'avoir fait cette présentation.
|
||||
|
||||
### Étape 2 — Message de commit (toutes les sections obligatoires)
|
||||
@ -83,9 +83,16 @@ Pas de validation du commit à demander à l'utilisateur ; si les infos ne sont
|
||||
|
||||
- Mettre à jour le fichier `VERSION` en incrémentant la sous-sous-version (patch) : soit en appelant le script avec l'option **--bump-version** (recommandé), soit manuellement. Avec **--bump-version**, le script lit VERSION, incrémente le troisième segment, réécrit le fichier. Le message de commit doit mentionner la nouvelle version si pertinent.
|
||||
|
||||
### Étape 4 bis — Builds et compilation (obligatoire avant un push qui doit valider le monorepo)
|
||||
|
||||
- **`pousse.sh` sans `--build`** ne compile pas. Avant l’**étape 5**, soit :
|
||||
- **Builds manuels** dans le dépôt applicatif (`repository_root`, chemins depuis `projects/<id>/conf.json` **`build_dirs`**) : **`ressources-common`** et **`back-common`** → **`npm run build`** ; **`front-common`** → **`npm run build:all-sites`** (sauf ordre métier documenté contraire) ; puis **étape 5** avec **`pousse.sh` sans `--build`** ;
|
||||
- **ou** un seul appel : **`./deploy/pousse.sh [project_id|--project <id>] --build [--bump-version] <<'MSG'`** … **`MSG`** sur stdin pour enchaîner builds (comme l’ancien script) puis add/commit/push.
|
||||
- En cas d’échec de compilation : corriger, puis recommencer avant l’étape 5.
|
||||
|
||||
### Étape 5 — Exécution du script
|
||||
|
||||
- Exécuter depuis la **racine de ia_dev** : `./deploy/pousse.sh [project_id|--project <id>] [--bump-version]` (ou avec --remote si l'utilisateur le précise), en passant le message complet sur STDIN (heredoc). Si project_id est omis, le projet est résolu par MAIL_TO ou AI_AGENT_TOKEN. Le script effectue la build check (chemins absolus depuis conf), puis add/commit/push.
|
||||
- Exécuter depuis la **racine de ia_dev** : `./deploy/pousse.sh [project_id|--project <id>] [--bump-version] [--build]` (ou avec **--remote** si l'utilisateur le précise), en passant le message complet sur STDIN (heredoc). Si project_id est omis, le projet est résolu par MAIL_TO ou AI_AGENT_TOKEN. **Sans `--build`** : add/commit/push uniquement. **Avec `--build`** : même boucle de builds que l’ancien comportement (par **`build_dirs`**), puis add/commit/push.
|
||||
- **Ne pas masquer la sortie** du script (stdout/stderr visibles en entier).
|
||||
|
||||
### Étape 6 — Contrôle du résultat
|
||||
@ -104,7 +111,7 @@ Pas de validation du commit à demander à l'utilisateur ; si les infos ne sont
|
||||
|
||||
## Qualité et résolution de problèmes
|
||||
|
||||
- **Qualité** : Le message de commit doit contenir toutes les sections obligatoires ; CHANGELOG.md doit être à jour. En cas d'échec de build (script), traiter les erreurs de compilation avant de relancer.
|
||||
- **Qualité** : Le message de commit doit contenir toutes les sections obligatoires ; CHANGELOG.md doit être à jour. En cas d'échec de build (**`--build`** ou builds de l’étape 4 bis), traiter les erreurs de compilation avant de relancer.
|
||||
- **Résolution** : Si le script échoue, analyser la sortie pour identifier la cause, rapporter la cause et la résolution à apporter, appliquer les corrections puis relancer ; s'arrêter uniquement si la correction n'est pas possible sans instruction utilisateur.
|
||||
|
||||
---
|
||||
@ -119,6 +126,7 @@ Avant d'appeler la clôture, remplir explicitement pour cet agent :
|
||||
- [ ] Étape 2 (message commit avec toutes les sections) : réalisé / non réalisé
|
||||
- [ ] Étape 3 (CHANGELOG.md mis à jour) : réalisé / non réalisé
|
||||
- [ ] Étape 4 (VERSION mise à jour) : réalisé / non réalisé
|
||||
- [ ] Étape 4 bis (builds explicites ou `pousse.sh --build` avant push) : réalisé / non réalisé / N/A (push doc-only sans besoin de recompiler — le documenter explicitement)
|
||||
- [ ] Étape 5 (script exécuté, sortie non masquée) : réalisé / non réalisé
|
||||
- [ ] Étape 6 (contrôle résultat, corrections si échec) : réalisé / non réalisé
|
||||
- [ ] Étape 7 (contraintes respectées) : réalisé / non réalisé
|
||||
@ -172,5 +180,5 @@ Pour chaque point, indiquer **réalisé** ou **non réalisé** et, le cas éché
|
||||
- **9. Renforcement sécurité** : Vérifier exposition de données sensibles, validation des entrées ; « Réalisées » ou « Non réalisées encore ».
|
||||
- **10. Code mort** : Vérifier code mort (exports inutilisés, branches mortes) ; « Réalisées » ou « Non réalisées encore ».
|
||||
- **11. Lint corrigé** : **Exécuter** `npm run lint` (ou la commande de lint du projet) dans **chaque** répertoire du périmètre (chaque build_dir : backend, frontend, ressources partagées). Comptabiliser **erreurs et warnings** dans la sortie. « Réalisées » **uniquement** si **0 erreur et 0 warning** pour ce périmètre. S'il reste des erreurs ou des warnings : « Non réalisées encore » en précisant le nombre d'erreurs et le nombre de warnings par répertoire (ex. « frontend : 0 erreur, 1004 warnings »). Ne jamais considérer le lint OK si des warnings restent ; les traiter ou les documenter dans le reste à faire.
|
||||
- **Types et compilation** : l'**étape 5** (`./deploy/pousse.sh`, *build check*) exécute déjà le typecheck et les builds pour chaque `build_dir` du projet ainsi que les passes front (**`build:all-sites`** selon la conf). Si le script se termine avec **exit 0**, répondre **Réalisées** pour les contrôles **Types** et **Compilation** en s'appuyant sur cette sortie — **ne pas** enchaîner un `npm run typecheck` / `npm run build` complet sur le même arbre sans nouveau changement local. Si l'étape 5 est absente, en échec, ou arrêtée avant la fin du build check : **Non réalisées encore** (corriger puis relancer `pousse.sh`, ou documenter une exécution manuelle ciblée hors script).
|
||||
- **Types et compilation** : répondre **Réalisées** si **(a)** l’**étape 4 bis** a exécuté avec succès les builds explicites sur chaque **`build_dir`**, **ou (b)** l’**étape 5** a utilisé **`./deploy/pousse.sh ... --build`** et le script s’est terminé avec **exit 0** (builds inclus dans ce run). Sinon **Non réalisées encore** (lancer **`pousse.sh --build`** ou les commandes **`npm run build`** / **`build:all-sites`** / **`typecheck`** requises par le projet, puis reclôturer). **`pousse.sh` sans `--build`** ne prouve pas la compilation.
|
||||
- **Format de réponse** : Pour chaque point, écrire soit « Réalisées : [précision courte] », soit « Non réalisées encore : [précision courte] ». Interdit de laisser un point sans réponse ou avec uniquement « N/A » sans justification (périmètre inexistant).
|
||||
|
||||
@ -11,10 +11,10 @@ Complète le point **11. Lint corrigé obligatoirement** de `.smartIde/rules/clo
|
||||
|
||||
Le lint obligatoire porte sur **chaque** entrée listée dans `build_dirs` du `projects/<id>/conf.json` du dépôt projet actif (ex. LeCoffre : backend, frontend, ressources partagées). **Interdit** de restreindre l’exécution ou les corrections au seul sous-projet « concerné » par la tâche en cours (ex. correctif backend uniquement : lancer et traiter le lint aussi sur front et ressources). Même règle pour les agents **ia_dev** et les délégations depuis `LECOFFRE_REPO`.
|
||||
|
||||
## Obligation systématique (même après `pousse` ou build)
|
||||
## Obligation systématique (même après build explicite ou `pousse.sh --build`)
|
||||
|
||||
- Avant clôture, sur tout dépôt projet ayant des `build_dirs` : exécuter le lint sur **chaque** entrée ; si **N ≥ 1**, appliquer **au moins min(5, N)** corrections **dans le run courant** (commits dans le workspace si besoin).
|
||||
- Un lint **déjà** exécuté pendant `pousse`, un script de build ou une étape intermédiaire **sans** modifications ESLint enregistrées dans le dépôt **ne dispense pas** cette étape.
|
||||
- Un lint **déjà** exécuté pendant un script de build, **`pousse.sh --build`**, ou une étape intermédiaire **sans** modifications ESLint enregistrées dans le dépôt **ne dispense pas** cette étape. **`pousse.sh` sans `--build`** ne lance pas de build et ne dispense pas non plus le lint de clôture.
|
||||
- **Interdit** de clôturer le point lint en reportant l’effort sur un appel **`/fix-lint` séparé** ou « à faire plus tard » : les corrections requises font partie du **même run** que la clôture (sauf enchaînement **immédiat** de `/fix-lint` dans ce run, avec décompte final identique).
|
||||
|
||||
## Interdiction de « lint non applicable » par convenance
|
||||
|
||||
@ -36,19 +36,22 @@ source "${IA_DEV_ROOT}/lib/project_config.sh"
|
||||
|
||||
remote="origin"
|
||||
bump_version=false
|
||||
run_build=false
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./deploy/pousse.sh [project_id|--project <project_id>] [--remote <remote>] [--bump-version]
|
||||
./deploy/pousse.sh [project_id|--project <project_id>] [--remote <remote>] [--bump-version] [--build]
|
||||
|
||||
project_id Optional. Id from projects/<id>/conf.json (e.g. kogus). Else from MAIL_TO or AI_AGENT_TOKEN.
|
||||
--project <id> Same as positional project_id.
|
||||
--bump-version Increment patch (third component) in VERSION before staging.
|
||||
--build Run npm run build (or build:all-sites for front-common) in each build_dir from conf; exit on failure.
|
||||
Omitted by default: no build inside this script — run builds explicitly before pousse, or pass --build.
|
||||
|
||||
Reads a full multi-line commit message from STDIN, then:
|
||||
- if not in repo root: re-exec from repo root (standardized execution)
|
||||
- build check (npm run build in each directory listed in projects/<id>/conf.json build_dirs, if any; exit on failure)
|
||||
- optional build check only with --build (npm run build in each directory listed in projects/<id>/conf.json build_dirs)
|
||||
- git add -A
|
||||
- git commit -F <message>
|
||||
- git push -u <remote> HEAD
|
||||
@ -87,6 +90,10 @@ while [[ $# -gt 0 ]]; do
|
||||
bump_version=true
|
||||
shift
|
||||
;;
|
||||
--build)
|
||||
run_build=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
@ -130,41 +137,49 @@ if [[ -n "${PROJECT_CONFIG_PATH:-}" && -f "$PROJECT_CONFIG_PATH" ]] && command -
|
||||
[[ -n "$d" ]] && build_dirs+=( "$d" )
|
||||
done < <(jq -r '.build_dirs[]? // empty' "$PROJECT_CONFIG_PATH" 2>/dev/null)
|
||||
fi
|
||||
if [[ ${#build_dirs[@]} -gt 0 ]]; then
|
||||
# shellcheck source=../lib/conf_path_resolve.sh
|
||||
source "${IA_DEV_ROOT}/lib/conf_path_resolve.sh"
|
||||
echo "[pousse] Build check (${#build_dirs[@]} dirs from project config)..."
|
||||
for dir in "${build_dirs[@]}"; do
|
||||
if [[ "$dir" = /* ]]; then
|
||||
abs_dir="$dir"
|
||||
elif [[ "$dir" == ../* || "$dir" == ".." ]]; then
|
||||
abs_dir="$(ia_dev_resolve_path_from_conf "$PROJECT_CONFIG_PATH" "$dir")"
|
||||
else
|
||||
abs_dir="${git_work_root}/${dir}"
|
||||
fi
|
||||
if [[ ! -d "$abs_dir" ]]; then
|
||||
echo "[pousse][WARN] Skipping build ${dir} (directory not found)" >&2
|
||||
continue
|
||||
fi
|
||||
build_basename="$(basename "$abs_dir")"
|
||||
if [[ -z "${NEXT_PUBLIC_SITE_CODE:-}" && ( "$build_basename" == "front-common" || "$build_basename" == "lecoffre-front-main" ) ]]; then
|
||||
echo "[pousse] Building ${dir} (npm run build:all-sites: lecoffreio, enso, genealogie)..."
|
||||
(cd "$abs_dir" && npm run build:all-sites) || {
|
||||
echo "[pousse][ERROR] build:all-sites failed in ${dir}" >&2
|
||||
if [[ "$run_build" == "true" ]]; then
|
||||
if [[ ${#build_dirs[@]} -gt 0 ]]; then
|
||||
# shellcheck source=../lib/conf_path_resolve.sh
|
||||
source "${IA_DEV_ROOT}/lib/conf_path_resolve.sh"
|
||||
echo "[pousse] Build check (${#build_dirs[@]} dirs from project config, --build)..."
|
||||
for dir in "${build_dirs[@]}"; do
|
||||
if [[ "$dir" = /* ]]; then
|
||||
abs_dir="$dir"
|
||||
elif [[ "$dir" == ../* || "$dir" == ".." ]]; then
|
||||
abs_dir="$(ia_dev_resolve_path_from_conf "$PROJECT_CONFIG_PATH" "$dir")"
|
||||
else
|
||||
abs_dir="${git_work_root}/${dir}"
|
||||
fi
|
||||
if [[ ! -d "$abs_dir" ]]; then
|
||||
echo "[pousse][WARN] Skipping build ${dir} (directory not found)" >&2
|
||||
continue
|
||||
fi
|
||||
build_basename="$(basename "$abs_dir")"
|
||||
if [[ -z "${NEXT_PUBLIC_SITE_CODE:-}" && ( "$build_basename" == "front-common" || "$build_basename" == "lecoffre-front-main" ) ]]; then
|
||||
echo "[pousse] Building ${dir} (npm run build:all-sites: lecoffreio, enso, genealogie)..."
|
||||
(cd "$abs_dir" && npm run build:all-sites) || {
|
||||
echo "[pousse][ERROR] build:all-sites failed in ${dir}" >&2
|
||||
exit 1
|
||||
}
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "[pousse] Building ${dir}..."
|
||||
(cd "$abs_dir" && npm run build) || {
|
||||
echo "[pousse][ERROR] Build failed in ${dir}" >&2
|
||||
exit 1
|
||||
}
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "[pousse] Building ${dir}..."
|
||||
(cd "$abs_dir" && npm run build) || {
|
||||
echo "[pousse][ERROR] Build failed in ${dir}" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
echo "[pousse] Build check OK"
|
||||
done
|
||||
echo "[pousse] Build check OK"
|
||||
else
|
||||
echo "[pousse] No build_dirs in project config (or no projects/<id>/conf.json / jq); nothing to build with --build"
|
||||
fi
|
||||
else
|
||||
echo "[pousse] No build_dirs in project config (or no projects/<id>/conf.json / jq); skipping build check"
|
||||
if [[ ${#build_dirs[@]} -gt 0 ]]; then
|
||||
echo "[pousse] Skipping build check (no --build). Run npm run build / build:all-sites per build_dirs in conf before push, or re-run with --build."
|
||||
else
|
||||
echo "[pousse] No build_dirs in project config (or no projects/<id>/conf.json / jq); skipping build"
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_file="$(mktemp -t pousse-commit-msg.XXXXXX)"
|
||||
|
||||
@ -96,11 +96,11 @@
|
||||
- Construire le message de commit (toutes les sections obligatoires)
|
||||
- Mettre à jour CHANGELOG.md
|
||||
- Mettre à jour VERSION (incrément sous-sous-version)
|
||||
- Exécuter `./deploy/pousse.sh` avec le message sur STDIN
|
||||
- Exécuter `./deploy/pousse.sh` avec le message sur STDIN (builds explicites avant, ou **`--build`** sur la même ligne)
|
||||
|
||||
**Script pousse.sh aujourd’hui :**
|
||||
|
||||
- Lire le message sur STDIN, `git add -A`, vérifications (auteur, chemins sensibles, branche distante), commit, push
|
||||
- Par défaut : pas de build ; message sur STDIN, `git add -A`, vérifications (auteur, chemins sensibles, branche distante), commit, push. Avec **`--build`** : même boucle **`npm run build`** / **`build:all-sites`** que l’historique, puis add/commit/push.
|
||||
|
||||
**Déplacé dans le script :**
|
||||
|
||||
@ -121,8 +121,8 @@
|
||||
|---------|--------------|
|
||||
| `deploy/branch-align.sh` | Ré-exécution depuis la racine git si nécessaire |
|
||||
| `deploy/scripts_v2/deploy.sh` | Par défaut sync `--sync-origin` ; tee toujours vers `logs/deploy_*.log` ; `--no-sync-origin` pour désactiver le sync local ; métier uniquement `deploy.conf` |
|
||||
| `deploy/pousse.sh` | **Ré-exéc depuis racine** si besoin ; option --bump-version ; build check (ressources, backend, frontend) avant staging |
|
||||
| `deploy/change-to-all-branches.sh` | Vérif branche test, branch-align.sh test, orchestrateur ou deploy.sh test --no-sync-origin ; logs `./logs/` |
|
||||
| `deploy/pousse.sh` | **Ré-exéc depuis racine** si besoin ; options **`--bump-version`**, **`--build`** ; sans **`--build`** : pas de compilation dans le script |
|
||||
| `deploy/change-to-all-branches.sh` | Vérif branche test, `branch-align.sh test`, puis sauf **`--align-only`** : orchestrateur ou `deploy-lecoffre-all-sites.sh` / `deploy.sh` test `--no-sync-origin` ; logs `./logs/` ; **`--align-only`** = alignement seul (usage **`/deploy-pprod-or-prod`** étape 2) |
|
||||
| Agents .smartIde/agents/*.md | Adapter les consignes pour utiliser les nouvelles options/scripts et alléger les étapes redondantes |
|
||||
|
||||
---
|
||||
@ -138,8 +138,8 @@
|
||||
|
||||
### push-by-script / pousse.sh
|
||||
|
||||
- **Dans le script :** build check (npm run build pour les trois projets dev) avant staging ; en cas d'échec, sortie en erreur sans commit ni push.
|
||||
- **Dans l'agent :** construire le message, mettre à jour CHANGELOG, lancer le script, contrôler sortie et code de retour.
|
||||
- **Dans le script :** avec **`--build`** uniquement : build check (`npm run build` / `build:all-sites` selon `build_dirs`) avant staging ; en cas d'échec, sortie en erreur sans commit ni push. Sans **`--build`** : staging/commit/push seulement.
|
||||
- **Dans l'agent :** construire le message, mettre à jour CHANGELOG, exécuter les builds explicites (étape 4 bis) ou **`pousse.sh --build`**, lancer **`pousse.sh`**, contrôler sortie et code de retour.
|
||||
|
||||
### Tous les agents
|
||||
|
||||
@ -158,11 +158,12 @@
|
||||
|
||||
### pousse.sh
|
||||
|
||||
- **Ré-exécution depuis la racine :** si le script est appelé hors racine du dépôt, il se ré-exécute depuis `git rev-parse --show-toplevel`. Exécution toujours depuis la racine (comme branch-align.sh et change-to-all-branches.sh).
|
||||
- **Ré-exécution depuis la racine :** si le script est appelé hors racine du dépôt, il se ré-exécute depuis `git rev-parse --show-toplevel`. Exécution toujours depuis la racine (comme branch-align.sh et change-to-all-branches.sh). **Build :** opt-in **`--build`** ; sinon compilation hors script (agent ou opérateur).
|
||||
|
||||
### change-to-all-branches.sh
|
||||
|
||||
- Appelle `deploy.sh test --no-sync-origin` ou orchestrateur équivalent (après push ; métier dans `deploy.conf`).
|
||||
- Par défaut (sans **`--align-only`**) : après `branch-align.sh test`, appelle `deploy-lecoffre-all-sites.sh test --no-sync-origin` / orchestrateur ou `deploy.sh test --no-sync-origin` (métier dans `deploy.conf`).
|
||||
- Avec **`--align-only`** : s’arrête après `branch-align.sh test` (pas de déploiement test ; réservé au flux **`/deploy-pprod-or-prod`** ia_dev).
|
||||
|
||||
### Agents
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user