Skip to content

🐛 fix(deploy): composer via PHP CLI, vérification de vendor/ et rollback avant migrations (#570) - #602

Merged
ronan-develop merged 4 commits into
mainfrom
fix/570-deploy-composer-rollback
Oct 2, 2026
Merged

ronan-develop merged 4 commits into
mainfrom
fix/570-deploy-composer-rollback

Conversation

@ronan-develop

Copy link
Copy Markdown
Owner

Closes #570

Pourquoi

Incident #569 : 6 instances en HTTP 500. Le déploiement nocturne a lancé composer avec le PHP CGI du PATH cron ; composer a affiché son aide et sorti en code 0 sans rien installer, alors que git checkout avait déjà mis le code à jour. Résultat : nouveau code + ancien vendor/ (3 paquets manquants), et aucun rollback.

Deux constats en plus pendant l'analyse :

  • le correctif 61ba614 était lui-même cassé ("$COMPOSER_BIN" entre guillemets, valeur de deux mots → exit 127), donc le cron nocturne aurait échoué dès qu'une instance l'aurait récupéré ;
  • 7 tests bash échouaient déjà sur main, sans que personne le voie (ils ne tournent pas en CI).

Changements

  • bin/lib/deploy-common.sh (nouveau) : définition unique de composer (PHP CLI explicite, memory_limit) et de la vérification de vendor/, sourcée par deploy-nightly.sh, deploy-all.sh et deploy.sh. Plus aucun composer nu dans bin/.
  • Vérification de vendor/ après composer install : composer install --dry-run --no-dev doit afficher « Nothing to install, update or remove ». Validé avec le vrai composer sur la prod : présent sur ronan, absent sur yannick (3 paquets manquants listés).
  • Rollback si l'échec précède les migrations : restauration du HEAD réellement en place (pas .deployed-sha), réinstallation de vendor/, vérification, cache:clear. Rapport → code restauré (<sha>) ou → ROLLBACK ÉCHOUÉ. Pas de rollback à partir des migrations (état de la base incertain), ni si HEAD est déjà la cible.
  • Docs : .claude/deploiement.md, .github/avancement.md.

Points d'attention

  • bin/deploy.sh (script historique) : son mode primo déploiement installait composer sans --no-dev ; il utilise désormais les arguments communs. Pas de rollback dans ce script (deploy-all.sh est l'outil supporté).
  • Le script du cron est celui du disque au lancement : un correctif n'est actif sur une instance qu'à la nuit suivante. D'où le déploiement exceptionnel via deploy-all.sh depuis le poste.
  • Hors périmètre : exécuter tests/bash/run.sh en CI (proposé, non fait ici).

Tests

  • bash tests/bash/run.sh : 28/28 (11 nouveaux, 7 réparés) — vérification de vendor/, rollback, pas de rollback après migration ou si HEAD = cible, rollback en échec signalé, pas de composer nu.
  • Suite PHP : 1384 tests verts (aucun fichier PHP modifié).

@ronan-develop ronan-develop added the bug Comportement incorrect ou inattendu label Oct 2, 2026
@ronan-develop ronan-develop self-assigned this Oct 2, 2026
@github-actions github-actions Bot added this to the Pre Prod milestone Oct 2, 2026
@ronan-develop
ronan-develop merged commit 641c43e into main Oct 2, 2026
4 checks passed
@ronan-develop
ronan-develop deleted the fix/570-deploy-composer-rollback branch October 2, 2026 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Comportement incorrect ou inattendu

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Déploiement : composer sans garantie CLI et aucun rollback quand une étape échoue après le checkout

1 participant