[spip_auto_update] 10 commits

technova69/spip_auto_update | 10 commits

Par gilles, le 22 août 2026 à 21h22min :

Ne pas inclure graft

Modifié
.gitignore

Détails : Ne pas inclure graft (394f4c83) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 21h19min :

feat: sauvegarde les plugins avant leur mise à jour

Ajouté
src/ResultatSauvegardePlugins.php
src/SauvegardePlugins.php
tests/unit/Rapport/JournalTest.php
tests/unit/SauvegardePluginsTest.php
Modifié
payload/sonde.php
src/Application.php
src/Execution.php
src/JournalSite.php
src/PlanSite.php
src/Rapport/Journal.php
tests/unit/ExecutionTest.php

Détails : feat: sauvegarde les plugins avant leur mise à jour (0956cb4e) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 21h07min :

feat: exécution complète et commande appliquer --go

L’ordre des étapes est fixe et testé : sauvegarde, relevé des journaux,
archive, noyau, core:maj:bdd, plugins:maj:bdd, plugins, plugins:maj:bdd,
cache:vider, contrôle de santé.

La sauvegarde précède toute écriture et son échec écarte le site en entier,
plugins compris. Un site en échec n’interrompt pas les autres. Un contrôle de
santé rouge marque le site ÉCHEC avec le chemin de sa sauvegarde et de son
répertoire de fichiers obsolètes, sans jamais restaurer.

Les migrations passent par des appels explicites au binaire absolu, jamais
par core:mettreajour qui suppose « spip » dans le PATH.

Ajouté
README.md
src/Execution.php
src/JournalSite.php
src/Rapport/Journal.php
tests/unit/ExecutionTest.php
Modifié
src/Application.php

Détails : feat: exécution complète et commande appliquer --go (b0c8b176) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 21h04min :

feat: contrôle de santé après écriture

Accueil en 200 et tmp/log/ comparé à son état d’avant. Un contrôle rouge
signale bruyamment sans jamais restaurer : sur un site de production,
restaurer sans qu’on l’ait demandé est plus dangereux que de laisser en
l’état et de prévenir.

Quand le noyau a bougé, l’opcache de PHP-FPM est cité comme cause candidate :
opcache_invalidate() depuis le CLI n’atteint pas FPM.

Ajouté
src/RapportSante.php
src/Sante.php
tests/unit/SanteTest.php

Détails : feat: contrôle de santé après écriture (3997ddbb) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 21h03min :

feat: application des mises à jour de plugins en « upon »

Le plan est recalculé puis comparé à celui qui a été annoncé : toute
divergence arrête le site sans rien écrire. On n’applique jamais autre chose
que ce qui a été montré.

Les deux défauts de spip-cli qui valent aussi pour notre charge utile sont
traités : les deux formes d’autoriser_exception (SPIP normalise le type deux
fois), et le résultat lu dans done[array_key_last()] et non dans la valeur
de retour de one_action(), qui décrit l’action avant son exécution et vaut
donc vrai même en échec.

Ajouté
payload/appliquer.php
src/ApplicateurPlugins.php
src/ResultatPlugins.php
tests/integration/ApplicateurPluginsTest.php
tests/unit/ResultatPluginsTest.php

Détails : feat: application des mises à jour de plugins en « upon » (f1fda02d) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 21h00min :

feat: installation du noyau par archive officielle

Ordre repris de spip_loader : extraire, puis nettoyer. Le calcul des
superflus se fait AVANT l’extraction, sur l’état d’origine du site — après,
les fichiers neufs masqueraient les anciens et le nettoyage ne verrait plus
rien à écarter.

Rien n’est extrait tant que l’archive ne s’est pas ouverte : un site n’est
jamais laissé à moitié remplacé.

Ajouté
src/Noyau/Installateur.php
src/Noyau/ResultatInstallation.php
tests/unit/Noyau/InstallateurTest.php

Détails : feat: installation du noyau par archive officielle (3a0466b1) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 20h58min :

feat: calcul et déplacement des fichiers superflus

Reprise du Cleaner de spip_loader, avec ses trois garde-fous : .ok et
.htaccess jamais retirés, répertoire portant .spip_loader_keep préservé avec
tout son contenu, et fichiers obsolètes DÉPLACÉS vers
fichiers_obsoletes_/ plutôt que supprimés.

Le marqueur garde le nom de spip_loader : un site déjà préparé pour le
loader est respecté sans reconfiguration.

config/spip fait partie des six répertoires suivis — c’est celui qu’on
oublie, et il porte dirs.php et routes.php.

Ajouté
src/Noyau/Nettoyeur.php
tests/unit/Noyau/NettoyeurTest.php

Détails : feat: calcul et déplacement des fichiers superflus (902c702f) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 20h57min :

feat: téléchargement et vérification de l’archive du noyau

L’archive est téléchargée hors du site et vérifiée avant toute écriture :
elle doit s’ouvrir comme zip ET contenir ecrire/inc_version.php. Un code 200
ne suffit pas — une page d’erreur HTML servie en 200 ne passe pas ce
contrôle.

Une archive locale corrompue est retéléchargée plutôt que réutilisée.

Ajouté
src/Noyau/Archive.php
tests/unit/Noyau/ArchiveTest.php

Détails : feat: téléchargement et vérification de l'archive du noyau (66ffbeb8) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 20h52min :

feat: sauvegarde de la base, formats sqlite et sql

Le format .sqlite reste le défaut : c’est le mécanisme natif du plugin dump
de SPIP, et il fonctionne sur tous les connecteurs. Le format .sql, par
mysqldump, se restaure bien plus simplement sur un site MySQL.

Le connecteur SPIP chargé ne conserve ni hôte, ni login, ni mot de passe :
les paramètres sont repris dans config/connect.php, par un processus isolé
qui pré-déclare spip_connect_db() pour capturer ses arguments sans ouvrir de
connexion.

Le mot de passe passe par un fichier d’options en 0600, supprimé même en cas
d’échec, jamais par la ligne de commande où ps le lirait. Il est masqué dans
les messages d’erreur.

Ajouté
payload/capture_connect.php
src/Sauvegarde/DumpMysql.php
src/Sauvegarde/DumpSqlite.php
src/Sauvegarde/LecteurConnect.php
src/Sauvegarde/ResultatSauvegarde.php
src/Sauvegarde/Sauvegarde.php
tests/fixtures/connect-mysql.php
tests/fixtures/connect-sqlite.php
tests/fixtures/connect-vide.php
tests/unit/Sauvegarde/DumpMysqlTest.php
tests/unit/Sauvegarde/LecteurConnectTest.php

Détails : feat: sauvegarde de la base, formats sqlite et sql (cb871b3e) · Validations · Gilles Vincent / spip_auto_update · GitLab

==============================
Par gilles, le 22 août 2026 à 20h29min :

feat: rapport du mode à blanc par courriel

Le message est remis à sendmail sur son entrée standard : aucune adresse ne
transite par la ligne de commande, et toute adresse contenant un saut de
ligne est refusée — un saut de ligne dans une adresse permettrait d’injecter
un en-tête.

C’est la forme cronable : « planifier --mail » n’écrit rien, il annonce.

Ajouté
src/Rapport/Courriel.php
tests/unit/Rapport/CourrielTest.php
Modifié
src/Application.php

Détails : feat: rapport du mode à blanc par courriel (4ed7ab89) · Validations · Gilles Vincent / spip_auto_update · GitLab