Mises à jour
Les mises à jour dans WebBlocks CMS reposent sur les versions publiées et sur les paquets.
Source du client partagé
CMS fournit le runtime partagé Publisher Client sous forme de sources synchronisées dans src/Support/Updates/Client, sans nécessiter le paquet Composer privé. Les adaptateurs CMS gèrent historique, version persistante, migrations, réparation des catalogues et sauvegardes complètes. Ne modifiez pas les fichiers générés. Le dépôt privé fait référence : composer embed:sync-all actualise les copies enregistrées ; composer embed:check-all détecte les écarts via .publisher-client.json.
Règles fondamentales
- La version installée reflète la dernière version réelle appliquée à l'installation.
- Le développement ordinaire du code source ne change pas la version installée.
- L'outil de mise à jour intégré applique des paquets de versions publiées, et non les modifications locales de l'arbre de travail.
- Les nouveaux consommateurs Composer doivent d'abord installer avec
composer require fklavyenet/webblocks-cmsetphp artisan webblocks:installavant d'utiliser le flux normal de mise à jour fondé sur les versions publiées. - Les installations natives de paquet actuelles consomment directement les ZIP de version à racine de paquet.
- Les System Updates natives de paquet appliquent l'artefact du paquet à la racine canonique du paquet Composer,
vendor/fklavyenet/webblocks-cms, de sorte que la mise à jour Composer et la System Update produisent la même arborescence de paquet installée. - Historiquement, les installations antérieures au natif de paquet, telles que
1.31.53, ne pouvaient pas consommer directement les ZIP de version à racine de paquet et exigeaient d'abord le pont géré depuis la racine à l'ancien format1.32.33. Ce chemin de pont est désormais retiré de la validation de version courante, car il ne reste plus d'anciennes installations gérées depuis la racine à prendre en charge dans les contrôles normaux.
Transition de documentation et licence (1.89.1–1.89.4)
La documentation canonique réside dans docs/ du dépôt indépendant webblocks-cms-docs, avec docs/guides/ et les médias. Les pages /docs et /guides sont des destinations de publication. CMS contient le contrat resources/contracts/inventory.md, toujours accessible via GET /webadmin/api/inventory. Installer ou mettre à jour CMS ne nécessite pas le dépôt documentaire. La séparation n'a introduit aucun moteur de publication ou de synchronisation.
La transition de licence utilise une version intermédiaire du paquet :
- 1.89.1: Les ZIP Publisher contiennent uniquement l'ancien chemin
docs/LICENSEpour que les clients existants installent la transition. Composer/Git conserventLICENSEà la racine. L'outil accepte les deux structures, préfèreLICENSEà la racine si les deux existent et installe la licence canonique. La documentation reste exclue. - 1.89.2 et suivantes: Les ZIP Publisher contiennent
LICENSEà la racine sans générerdocs/. Les métadonnées exigent au minimum CMS1.89.1. Les anciennes installations doivent d'abord installer1.89.1, puis revérifier. Composer permet une mise à jour directe. - 1.89.3: Publisher Client intégré passe à
1.1.13, valide la compatibilité de transition et recherche la prochaine mise à jour après installation réussie. L'adaptateur CMS conserveupdate_pathet refuse les versions minimales mal formées. - 1.89.4: Publisher Client intégré passe à
1.1.14. Les notes incluent uniquement les versions ultérieures à l'installée et ne dépassant pas la cible choisie, même si c'est une transition.
Par exemple, une ancienne installation peut recevoir 1.89.1 avant 1.89.4. Vérifiez et appliquez la transition, puis installez la version courante après un nouveau contrôle. L'écran intermédiaire doit afficher les notes jusqu'à 1.89.1 seulement. Cette transition de licence est distincte de l'ancienne transition 1.32.33 gérée à la racine.
Attentes opérationnelles
- N'exécutez les mises à jour qu'à partir de versions publiées.
- Conservez les fichiers propres à l'installation dans des chemins préservés tels que
.env,storage/etproject/. - Traitez séparément les flux de développement et de publication.
- System Updates cible toujours la racine Composer
vendor/fklavyenet/webblocks-cms. Les copies sources se mettent à jour via git/Composer. Le mode retiré depuis les sources et son paramètreWEBBLOCKS_UPDATES_MIGRATION_STRATEGYsont ignorés depuis1.41.0. - Les paquets de version ne contiennent que du code réutilisable du cœur du CMS et ne doivent pas embarquer de contenu
project/propre à l'installation. - Les chemins préservés lors de la mise à jour ne modifient pas la frontière du paquet de version :
project/reste local à l'installation et hors de l'artefact publié. - Les copies de travail CMS installées sont consommatrices de mises à jour, non publieuses en amont. Si une installation possède un
origingit, conservez l'accès en fetch si nécessaire mais désactivez le push avecgit remote set-url --push origin DISABLED. - Le succès est enregistré uniquement si le runtime signale la version cible depuis
WebBlocks\Cms\Support\WebBlocks. Une version ancienne ou inattendue provoque un échec et une restauration automatique. Le statut estrestoredsi elle réussit, sinonfailedavec les deux traces d'erreur.
Clients de mise à jour coexistants
Un hôte peut installer plusieurs paquets intégrant Publisher Client dans des espaces de noms distincts. La configuration Laravel est globale ; publisher-client n'est pas un état permanent du produit. Un autre fournisseur peut écrire ses valeurs de produit, résolution de version, cible, validation, migration et post-application dans le même cycle d'amorçage.
Chaque point d'entrée CMS restaure toute la configuration avant de résoudre un service. Les contrôleurs injectent seulement CmsPublisherClientConfigurator, appellent configure(), puis résolvent SystemUpdateInspector, UpdateServerClient, SystemUpdater ou AdminUpdateIndicator. L'injection dans le constructeur ou la méthode d'action pourrait résoudre les dépendances trop tôt et doit être évitée. Le test de coexistence remplace la configuration par un produit tiers et vérifie la restauration conjointe du résolveur, de la version, de la cible et du client CMS.
Détails de la version
System Updates affiche une carte à deux états. À jour, elle indique version et dernier contrôle. Sinon, elle montre le parcours de versions, What's new replié avec notes par version, Update to X en un clic avec sauvegarde automatique/restauration en cas d'échec, et un lien vers les sauvegardes complètes avant les mises à jour majeures. Le résumé compare le code CMS actif à la dernière publication ; la version enregistrée sert uniquement à l'historique et à la persistance.
Les superadministrateurs disposent d'un indicateur asynchrone dans la navigation supérieure. Masqué par défaut, il consulte /webadmin/system/updates/indicator en arrière-plan et apparaît seulement pour une nouvelle version fiable. Le rendu normal n'attend pas le serveur de mises à jour ; les installations à jour n'affichent aucun raccourci permanent.
Le contrôle préalable vérifie base, ZIP/sodium, exécution PHP/Composer/processus, écriture racine/espace de travail et disque libre. Chaque test réussit ou échoue ; tous doivent réussir et aucun verrou ne doit être détenu. L'historique est replié, les journaux s'ouvrent en modales ; aucune action destructive n'est affichée.
Les exécutions sont purgées après contrôles et applications. Les cinq dernières restent, et le dernier échec jusqu'à un succès ultérieur. L'écran les liste sans suppression. Inspection CLI : php artisan webblocks:updates:runs, php artisan webblocks:updates:runs --last, php artisan webblocks:updates:runs --failed ; purge contrôlée : php artisan webblocks:updates:prune-runs --keep=5.
Release affiche les métadonnées de title, summary, highlights, fixes, compatibility_notes, migration_notes, asset_notes, operator_notes, technical_notes en texte échappé. changelog_entries contient les entrées cumulées, plus récentes d'abord, après la version installée et jusqu'à la cible, issues de changelog, releases, changelog_entries. Sans liste, seule l'entrée cible est utilisée ; What's new contient toujours du contenu.
La chaîne historique release_notes reste prise en charge pour les charges utiles de versions plus anciennes. En l'absence de notes de version, l'écran affiche No release notes were provided for this release. L'outil de mise à jour ne déduit pas les changements à partir des numéros de version.
Les métadonnées sont préparées avec composer release:prepare et publiées avec composer release:publish-update. L'enveloppe vérifie GitHub CLI avant l'écriture irréversible sur Publisher, publie puis crée/actualise le GitHub Release comme latest. Un chapitre CHANGELOG.md correspondant est requis ; ses points alimentent release_notes et summary/highlights, avec référence, somme de contrôle et version minimale. Les champs sont envoyés au niveau supérieur et imbriqué : notes enrichies pour nouveaux clients, texte simple pour anciens. Lecture via champs supérieurs, details, release_details, meta.release_details/meta.details.
GitHub Actions ne crée ni paquets ni métadonnées publiées ; .github exécute seulement tests/lint. L'enveloppe locale aligne GitHub latest sur le tag stable. System Updates utilise seulement Publisher. publisher.webblocksui.com est le service canonique : publication https://publisher.webblocksui.com/api/updates/publish, lecture https://publisher.webblocksui.com/api/updates/latest, téléchargement https://publisher.webblocksui.com/downloads/.... Les .env habituels ne configurent pas serveur/produit/canal : ReleaseDefaults possède ces valeurs, stable et les chemins. L'ancienne transition updates.webblocksui.com est historique, pas une configuration active.
Commandes du mainteneur :
composer release:push
composer release:prepare
composer release:publish-update -- --dry-run
composer release:publish-update
release:push pousse branche et tag annoté ensemble vers origin, avec un seul contrôle pre-push. Ensuite seulement, il reflète les mêmes références vers backup avec --no-verify, puis compare branche et commit résolu du tag sur les deux distants au commit local.
La publication utilise WEBBLOCKS_PUBLISHER_TOKEN et, pour signer, WEBBLOCKS_PUBLISHER_SIGNING_KEY. Valeurs : https://publisher.webblocksui.com, produit webblocks-cms, canal stable, lecture /api/updates/latest ; publication avec même identité et /api/updates/publish. L'enveloppe Composer lit seulement ces deux secrets dans .env et les exporte vers Testbench isolé ; la configuration en cache les actualise depuis .env. Aucun export manuel. Dry-run valide clé et artefact sans envoi. Sans token, la publication réelle reste non publiée et termine en échec ; elle ne compte pas comme publication.
Télémétrie d'adoption anonyme
Les contrôles incluent une télémétrie respectueuse de la vie privée. Publisher distingue téléchargements et installations anonymes actives. Les téléchargements comptent les récupérations d'artefacts ; les installations actives comptent les identifiants uniques signalés au fil du temps.
La télémétrie est activée par défaut ; pour la désactiver :
WEBBLOCKS_TELEMETRY=false
Avec la télémétrie active, le premier contrôle nécessaire génère installation_id aléatoire local et l'enregistre dans les paramètres système. Sans données personnelles ni du site, il reste stable et peut changer après recréation de l'installation ou réinitialisation stockage/base.
Le contrôle envoie uniquement ces champs :
product_keyinstalled_versionchannelinstallation_idtelemetry_schema_version
CMS n'envoie ni domaines, URL complètes, courriels admin, chemins, noms de bases, propriétaires de licence, nombres d'utilisateurs, tokens, secrets ni valeurs arbitraires. Avec WEBBLOCKS_TELEMETRY=false, il demande toujours les métadonnées avec produit, canal et version, mais ne crée ni n'envoie installation_id.
Flux d'application de la mise à jour
Une mise à jour interne s'exécute en un clic : téléchargement/vérification, sauvegarde préalable automatique, application des fichiers, puis dans cet ordre :
- migrations de mise à jour du paquet, si présentes
- étapes de vidage du cache
- synchronisation du catalogue fourni (
webblocks:catalog-repair --all) - enregistrement de l'exécution de mise à jour
- persistance de la version installée
Si l'application ou la vérification échoue, la sauvegarde préalable est restaurée automatiquement. Le statut est restored ; si la restauration échoue aussi, failed avec les deux traces dans le journal. La sauvegarde reste disponible dans Sauvegardes ou via CLI php artisan system:backup:restore pour restauration manuelle.
Après succès, la politique de nettoyage s'applique ; nombre supprimé et octets libérés sont journalisés. Un échec de nettoyage n'annule pas la mise à jour ; il est consigné. Par défaut : sauvegardes préalables 14 jours et au moins les cinq dernières réussies ; sauvegardes de sécurité de restauration 30 jours, points de contenu 7. Celles des mises à jour échouées/restaurées sont protégées 90 jours. Sauvegardes manuelles, importées ou en cours exclues. Configurez/prévisualisez sous Maintenance → Cleanup ; voir Opérations pour planification, CLI et API.
Les mises à jour appliquent les paquets publiés puis, après vidage du cache, exécutent webblocks:catalog-repair --all en sous-processus sur le nouveau code. Catalogues de blocs, blocs plugin, emplacements, mises en page et icônes sont alignés ; Rating/Comments peut être ajouté sans commande manuelle. Le manifeste reconstruit découvre les nouvelles commandes. Le processus est idempotent et conserve les entrées personnalisées.
La synchronisation est au mieux : fichiers et migrations ont déjà réussi, donc son échec ne fait pas échouer la mise à jour. Le journal indique qu'elle est incomplète et que php artisan webblocks:catalog-repair --all peut être relancé manuellement. Le schéma relève de migrations explicites ; la synchronisation répare seulement les données du catalogue.
Les étapes de vidage du cache comprennent les vidages de configuration, de vues, de cache applicatif et de routes de Laravel, afin que les layouts et helpers Blade appartenant au paquet soient recompilés après le remplacement des fichiers. Sur les installations PHP-FPM en production dont l'OPcache est configuré pour ne pas valider les horodatages, rechargez le service PHP-FPM concerné après une mise à jour réussie afin que PHP ne continue pas de servir depuis la mémoire des classes de paquet antérieures à la mise à jour.
Pendant la mise à jour, une modale non fermable montre le parcours avec le chargement WebBlocks UI. PHP pouvant redémarrer durant la requête, elle n'attend pas sa fin : elle déclenche puis interroge l'indicateur toutes les 1,5 secondes, avec retour à l'administration après 3 minutes au maximum. Toute réponse, même une redirection de connexion, recharge l'écran.
System Update n'exécute jamais database/migrations de l'hôte, évitant les conflits de migrations Laravel en attente comme 0001_01_01_000000_create_users_table.php avec les tables CMS. Les paquets sont appliqués à vendor/fklavyenet/webblocks-cms ; seules les migrations PHP de vendor/fklavyenet/webblocks-cms/database/migrations/updates sont exécutées. Sinon, le saut est journalisé et cache/version poursuivent. Les réparations sûres, comme les clés parentes nécessaires aux sauvegardes complètes portables, appartiennent aussi à ces migrations.
Règle de mise à jour de schéma native de paquet
Tout changement de schéma de WebBlocks CMS requis par le code à l'exécution doit prendre en charge les deux chemins d'installation :
- Installations neuves ou de consommateur du paquet : mettez à jour le chemin de migration de schéma normal ou d'installation neuve.
- Installations natives de paquet existantes mises à jour via les System Updates : ajoutez une migration de mise à jour du paquet sous
database/migrations/updatesdu paquet ; les consommateurs installés l'exécutent depuisvendor/fklavyenet/webblocks-cms/database/migrations/updates.
Le schéma d'installation neuve ne suffit pas à lui seul. Si le nouveau code à l'exécution attend une table ou une colonne, la version doit inclure une migration de mise à jour pour les installations existantes, ou bien la mise à jour doit échouer proprement avant que le nouveau chemin de code ne puisse produire une erreur 500 brute. Les System Updates natives de paquet ne doivent pas obliger les utilisateurs ordinaires à se connecter en SSH à un site et à lancer des migrations manuelles après une mise à jour réussie.
Un succès aligne code, schéma, cache et contrôle final. Les pages admin/API/runtime dépendantes d'un nouveau schéma doivent fournir des consignes contrôlées plutôt que des erreurs brutes. L'incident 1.32.146→1.32.147 est la référence : cms_api_tokens était seulement dans les migrations normales ; après mise à jour, System -> API Tokens échouait jusqu'à l'ajout d'une migration du paquet et d'une gestion contrôlée en 1.32.147.
Le schéma d'interaction suit le même contrat. Les mises à jour assurent wbcms_comment_entries/wbcms_content_ratings automatiquement sans demander artisan migrate sur l'hôte. La réparation idempotente conserve et renomme les anciennes tables sans préfixe ou crée les tables préfixées ; les données sont volontairement conservées au rollback.
Les rapports de version comportant un changement de schéma doivent répondre explicitement à :
- chemin de schéma d'installation neuve mis à jour : oui/non
- migration de mise à jour du paquet ajoutée : oui/non
- test de non-régression de la migration de mise à jour ajouté : oui/non
- comportement propre en cas de schéma manquant nécessaire/ajouté : oui/non
Pendant la transition vers le paquet, certaines installations peuvent encore comporter une copie obsolète packages/webblocks-cms à la racine de l'installation ou une ancienne copie de transition imbriquée dans vendor. Ces chemins sont des artefacts hérités de la transition, et non la source de vérité native de paquet active. La System Update native de paquet remplace désormais la racine canonique du paquet Composer à vendor/fklavyenet/webblocks-cms et vérifie la version cible depuis cette racine de paquet. Elle ne conserve pas packages/webblocks-cms comme seconde copie d'exécution mise à jour.
L'ancien vendor vendor/fklavyenet/webblocks-cms peut être structuré comme dépôt avec artisan, app/, bootstrap/, packages/webblocks-cms/, plugins/, tests/. System Update le remplace par le paquet plat : composer.json, LICENSE racine, src/, routes/, resources/, database/, public/, config/, stubs/ sous vendor/fklavyenet/webblocks-cms. Les métadonnées Composer sont normalisées avant autoload optimisé ; WebBlocks\Cms\ doit provenir de vendor/fklavyenet/webblocks-cms/src, pas vendor/fklavyenet/webblocks-cms/packages/webblocks-cms/src. Les chemins anciens font échouer la mise à jour plutôt que déclarer un faux succès.
Les mises à jour modernes préservent la séparation entre l'administration /webadmin et les ressources /cms introduite par la migration de la v1.32.56. /cms est uniquement un espace de noms de ressources statiques, et non un préfixe d'administration, car le try_files de Nginx peut résoudre /cms/ comme le répertoire physique public/cms/ avant que Laravel ne voie une route. Les mises à jour ne doivent pas restaurer d'alias d'administration /cms appartenant au CMS, de redirections /cms, de routes /admin ni de relais public/cms/index.php, que ce soit à la racine de l'installation ou dans les ressources publiques du paquet.
Pont retiré des mises à jour gérées depuis la racine de la 1.31
Cette section est historique. L'outil de mise à jour de la 1.31.53 validait l'ancien contrat d'archive géré depuis la racine : artisan et composer.json devaient exister à la racine de l'archive, ou dans un unique répertoire englobant. Les artefacts à racine de paquet tels que 1.32.31 ne contenaient volontairement pas d'artisan racine, si bien que ces anciens clients échouaient avant l'application avec Package validation failed because composer.json and artisan were not found at the archive root.
La stratégie de pont retirée se déroulait en deux étapes :
- Publier ou republier un artefact de version passerelle dans l'ancienne forme gérée depuis la racine, construit à partir d'une source compatible passerelle qui contenait encore les enveloppes héritées
App\Support\System\Updates\*et validait déjà les archives strictes à racine de paquetfklavyenet/webblocks-cms. Pour la passerelle1.32.33, la référence source étaitv1.32.30. - Publier des versions à racine de paquet avec
minimum_client_versionfixé à1.32.18ou plus récent, afin que les anciens clients ne se voient pas proposer le dernier artefact à racine de paquet avant la passerelle. - Une fois la passerelle appliquée, l'updater installé pouvait valider et appliquer la forme stricte d'artefact à racine de paquet
fklavyenet/webblocks-cmsutilisée par les versions modernes.
scripts/build-root-managed-bridge-archive.sh VERSION [OUTPUT_DIR] [GIT_REF] n'est conservé que comme outil archivé de récupération manuelle pour le ZIP passerelle à l'ancienne forme ; par exemple scripts/build-root-managed-bridge-archive.sh 1.32.33 dist v1.32.30. Le constructeur exclut délibérément les chemins appartenant à l'installation tels que .env, storage/, project/, public/site/, public/storage et le config/ racine ; les valeurs par défaut appartenant au paquet sous packages/webblocks-cms/config restent partie intégrante du runtime du paquet. La validation courante native du paquet n'emprunte pas ce chemin de passerelle.
Le chemin historique achevé était 1.31.53 -> 1.32.33 bridge -> 1.32.34+ package-rooted. Les installations déjà compatibles passerelle, comme 1.32.30, ont sauté la passerelle et sont passées directement à une version à racine de paquet 1.32.34+. Les garde-fous de version actuels ne protègent que l'artefact à racine de paquet et le comportement de l'updater natif du paquet.
Réparation du catalogue
System Updates exécute webblocks:catalog-repair --all automatiquement après installation ; voir Processus d'application. Les mêmes commandes restent disponibles pour réparations entre versions ou synchronisation incomplète :
php artisan webblocks:catalog-repair --dry-run --all
php artisan webblocks:catalog-repair --all
La commande prend en charge --block-types, --plugin-block-types, --slot-types, --page-layouts, --icons. Exécutez d'abord --dry-run pour voir les lignes créées, modifiées, inchangées ou ignorées. Elle est idempotente, conserve les entrées personnalisées et ne les supprime pas.
La synchronisation de plus bas niveau des types de bloc reste disponible pour des raisons de compatibilité :
php artisan block-types:sync-core
Le chemin de réparation des types de bloc maintient le catalogue block_types stocké en base aligné sur le catalogue du cœur du CMS livré, sur les installations existantes :
- les types de bloc du cœur manquants sont créés
- les types de bloc du cœur existants sont mis à jour sur place
- les types de bloc personnalisés propres à l'installation sont préservés
- aucune ligne du cœur en double n'est créée
Ce flux de maintenance couvre le cas où une installation doit rafraîchir des lignes de catalogue sans obliger chaque application d'un paquet de version à effectuer une réparation étendue du catalogue en base.
Lorsque l'updater s'exécute dans un clone d'installation géré par git qui pointe encore vers l'upstream canonique du CMS, le CMS désactive désormais aussi automatiquement le push vers origin après les commandes de post-installation, afin que de futures tentatives accidentelles de git push échouent clairement tandis que l'accès normal en fetch ou pull reste disponible.
Mises à jour du système via l'API (1.90.0)
Le Internal Content API prend en charge les contrôles de mise à jour, l'exécution, et des résultats de fonctionnement durables. Ces points de terminaison utilisent le même client Publisher moteur comme panneau Mises à jour du système. Ils conservent son automatique configuré sauvegarde, vérification de la somme de contrôle et de la signature, verrouillage d'exécution exclusif, maintenance mode, vérification de la version après application et récupération après échec. Signature la vérification suit la politique de signature existante de l'installation ; l'API fait ne pas transformer une politique de signature facultative en politique obligatoire ni l'affaiblir.
| Méthode et chemin | Capacité requise | Objectif |
|---|---|---|
| GET /webadmin/api/system/updates/check | system-updates.read | Lisez la version installée, la cible proposée, la somme de contrôle, la compatibilité et l'état de verrouillage. |
| POST /webadmin/api/system/updates | system-updates.run | Exécutez de manière synchrone une mise à jour explicitement approuvée. |
| GET /webadmin/api/system/updates/operations/{operation} | system-updates.read | Lisez une opération durable par UUID et son résultat aseptisé. |
Les deux fonctionnalités sont facultatives et absentes du jeton par défaut et du jeton par défaut hérité.
autorisations. system-updates.run est classé comme destructeur. Accorde les deux
capacités à un outil qui doit exécuter et ensuite inspecter les mises à jour, ou accorder
uniquement system-updates.read pour la surveillance. L'autorisation de lecture n'implique jamais l'exécution
autorisation.
Uniquement un jeton système à l'échelle de l'installation, avec allowed_site_ids égal à
null, appartenant à un utilisateur actif qui possède actuellement access-system, peut utiliser ces
points finaux. Les jetons personnels et les jetons système à l'échelle du site sont exclus, même si
leur tableau de capacités stocké a été modifié pour inclure les autorisations de mise à jour.
Les utilisateurs de la démo publique sans accès au système ne peuvent pas accorder ou exercer la mise à jour
autorisations. Révocation, expiration, désactivation du propriétaire, suppression ou perte du système
l’autorité empêche tout accès ultérieur. L'API vérifie la capacité et l'installation
autorité au moment de la demande ; l'émission du jeton vérifie également l'autorité d'installation.
Approbation et exécution
- Lisez le point de terminaison de contrôle. Un serveur de mise à jour inaccessible ou résultat incompatible n'est pas autorisé à exécuter une mise à jour.
- Afficher à l'opérateur la version installée, la version cible proposée et la somme de contrôle. Obtenez une approbation explicite pour cette mise à jour exacte et son installation à l'échelle impact. L'octroi d'un jeton ne remplace pas l'approbation d'une exécution particulière.
- Générez un
idempotency_keystable et soumettez les champs approuvés. Gardez ça clé et corps de la demande pour la récupération après perte de connexion.
Exemple de corps de requête, utilisant des versions synthétiques et une somme de contrôle :
{
"idempotency_key": "operator-approval-2026-10-02-1",
"expected_current_version": "1.90.0",
"target_version": "1.91.0",
"checksum_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"confirmed": true
}
confirmed atteste que l'appelant a obtenu l'approbation de l'opérateur ; ce n'est pas le cas
prouver qu'un humain a approuvé la demande. La discipline d'approbation reste la
responsabilité de l’outil appelant. Ne le définissez pas automatiquement dans une IA
workflow qui a uniquement été autorisé à modifier le contenu.
Le moteur vérifie la version installée et la nouvelle version proposée par rapport à
version approuvée/somme de contrôle à l'intérieur de son verrou d'exécution, avant de créer une sauvegarde ou
application des fichiers. Une cible modifiée, une somme de contrôle ou une version installée renvoie
system_update_target_changed ; vérifiez à nouveau et obtenez une nouvelle approbation. Arbitraire
les URL de téléchargement, les artefacts, les commandes et les remplacements de signature/sauvegarde ne sont pas
accepté. Une version relais est une mise à jour approuvée : elle n'autorise pas
installation d'une version ultérieure.
Exécution, tentatives et résultats
L'exécution est synchrone, comme dans le panneau. Il n'y a aucune exigence de file d'attente et aucun
Promesse de travail en arrière-plan 202 Accepted. Le POST initial renvoie normalement 200
avec un objet operation ; l'échec de l'exécution renvoie 409 avec l'opération.
L'opération comprend son UUID, l'ID d'exécution associé, les versions, la somme de contrôle, le statut,
code d'erreur, horodatages et résultat nettoyé. Emplacements de sauvegarde, jetons de porteur,
les informations d'identification du serveur et les traces brutes de la pile ne sont pas renvoyées. Vérifier les réponses omis
télécharger les URL et les diagnostics bruts du serveur.
Les statuts sont running, success, success_with_warnings, failed et
restored. restored signifie que le moteur a signalé un échec de mise à jour suivi d'un
restauration de sauvegarde réussie ; ce n'est pas un succès de mise à jour. Le résultat est
délimité et désinfecté à nouveau lorsqu'il est présenté. Finalisation post-candidature vérifiée
les échecs utilisent le même service de réconciliation que le panneau, donc l'ouverture du panneau
n’est pas requis pour obtenir success_with_warnings.
Un POST identique utilisant le même jeton et la même clé d'idempotence renvoie l'original
opération avec replayed: true et n’exécute jamais une autre mise à jour. Réutiliser un
la clé avec différents champs approuvés renvoie system_update_idempotency_conflict.
Les clés d'idempotence sont limitées à un jeton : changer de jeton ou utiliser une nouvelle clé est
ce n’est pas une nouvelle tentative sûre après un résultat incertain. Inspectez le operation.status et
operation.code ; la réponse HTTP réussie d'une rediffusion signifie que l'existant
l'opération a été récupérée, mais sa mise à jour n'a pas réussi.
Une mise à jour concurrente renvoie system_update_in_progress. L'admission à l'API et le
le verrouillage du moteur existant empêche les exécutions qui se chevauchent, y compris les courses de panneaux/API.
Les reçus durables sont conservés indépendamment de l'élagage ordinaire de l'historique d'exécution ;
la révocation ou la suppression d'un jeton ne supprime pas ces reçus en cascade.
Perte de connexion et récupération de l'opérateur
Une mise à jour peut remplacer son propre code en cours d'exécution et activer temporairement la maintenance
mode. Une connexion POST peut expirer et l'interrogation peut recevoir un 503 temporaire.
réponses. Ni l’un ni l’autre ne prouve l’échec. Lorsque l'accès revient, répétez le POST exact
avec sa clé/corps d'origine pour récupérer l'UUID de l'opération, ou interroger l'UUID si
déjà connu. Ne soumettez jamais automatiquement une nouvelle clé.
Une interruption fatale du processus peut laisser une opération enregistrée sous le nom running.
Lorsque l'opération est suffisamment ancienne et que le moteur n'a pas de verrouillage/battement de cœur en direct,
son résultat indique requires_attention: true. C'est une issue incertaine,
il ne s’agit pas d’un échec, d’un succès ou d’un recul fabriqué de toutes pièces. Bloc d'opérations API non résolu
nouvelles exécutions d'API avec system_update_requires_attention ; la même opération
peut toujours être récupéré sans l’exécuter à nouveau.
L'opérateur d'installation doit inspecter la version active, la sauvegarde, la maintenance état et exécution de l'historique et complétez la procédure de récupération existante. Résoudre un reçu orphelin grâce à la maintenance contrôlée de la base de données côté hôte uniquement après avoir établi le résultat réel ; conserver sa clé et son dossier d'audit. Faire ne supprimez pas les reçus pour contourner la sauvegarde. L'API ne fournit intentionnellement aucun redémarrage, annulation ou restauration automatique du point de terminaison pour les opérations incertaines.
Champs de demande invalides ou retour de confirmation manquant 422 ; capacité manquante
ou l'autorité d'installation renvoie 403 et une opération inconnue renvoie
404. Les échecs d’authentification conservent le comportement normal de l’API 401. Découvrez
les chemins en direct et la demande de contrat via /webadmin/api et
/webadmin/api/openapi.json.
Éligibilité du jeton système dans le panneau (1.90.1)
La création et la modification du jeton système affichent le type de jeton système fixe et la portée à l'échelle de l'installation. Le panneau avertit avant d'enregistrer un jeton qui ne peut pas exécuter les mises à jour du système. Un jeton éligible nécessite toujours un propriétaire administrateur système actif, une portée à l'échelle de l'installation et un system-updates.read ou system-updates.run accordé séparément ; les jetons personnels et à l’échelle du site ne peuvent pas effectuer les mises à jour d’installation. La modification d'un jeton normalise les types de jetons système existants sans supprimer les contrôles de propriétaire, d'expiration, de révocation ou de portée.