Aggiornamenti

Gli aggiornamenti in WebBlocks CMS sono basati sulle release e sui pacchetti.

Sorgente del client condiviso

CMS include il runtime condiviso Publisher Client come sorgenti sincronizzati in src/Support/Updates/Client, senza richiedere il pacchetto Composer privato. Gli adattatori CMS gestiscono cronologia, versione persistente, migrazioni, riparazione cataloghi e backup completi. Non modificare file generati. Il repository privato è autorevole: composer embed:sync-all aggiorna le copie registrate; composer embed:check-all rileva divergenze tramite .publisher-client.json.

Regole fondamentali

  • La versione installata riflette l'ultima release reale applicata all'installazione.
  • Il normale sviluppo del codice sorgente non modifica la versione installata.
  • L'updater integrato applica pacchetti di release pubblicati, non le modifiche locali dell'albero di lavoro.
  • I nuovi consumatori Composer devono installare prima con composer require fklavyenet/webblocks-cms e php artisan webblocks:install prima di usare il normale flusso di aggiornamento basato sulle release.
  • Le attuali installazioni native di pacchetto consumano direttamente gli ZIP di release con radice di pacchetto.
  • Le System Updates native di pacchetto applicano l'artefatto del pacchetto alla radice canonica del pacchetto Composer, vendor/fklavyenet/webblocks-cms, così che l'aggiornamento con Composer e la System Update producano la stessa struttura di pacchetto installata.
  • Storicamente, le installazioni precedenti al modello nativo di pacchetto, come 1.31.53, non potevano consumare direttamente gli ZIP di release con radice di pacchetto e richiedevano prima il ponte gestito dalla radice nel vecchio formato 1.32.33. Quel percorso ponte è ora ritirato dalla validazione di release ordinaria perché non restano vecchie installazioni gestite dalla radice da supportare nei controlli normali.

Transizione documentazione e licenza (1.89.1–1.89.4)

La documentazione canonica risiede in docs/ del repository indipendente webblocks-cms-docs, inclusi docs/guides/ e media. Le pagine /docs e /guides sono destinazioni di pubblicazione. CMS include il contratto resources/contracts/inventory.md, ancora accessibile tramite GET /webadmin/api/inventory. Installare o aggiornare CMS non richiede il repository documentale. La separazione non ha introdotto motori di pubblicazione o sincronizzazione.

La transizione della licenza usa una versione ponte del pacchetto:

  • 1.89.1: Gli ZIP Publisher includono solo il percorso storico docs/LICENSE per consentire ai client esistenti di installare il ponte. Composer/Git mantengono LICENSE nella radice. L'updater accetta entrambi, preferisce LICENSE nella radice se coesistono e installa la licenza canonica. La documentazione resta esclusa.
  • 1.89.2 e successivi: Gli ZIP Publisher contengono LICENSE nella radice senza generare docs/. I metadati richiedono almeno CMS 1.89.1. Le installazioni precedenti devono prima installare 1.89.1 e ricontrollare. Composer permette aggiornamenti diretti.
  • 1.89.3: Publisher Client incorporato passa a 1.1.13, valida la compatibilità del ponte e cerca il prossimo aggiornamento dopo l'installazione riuscita. L'adattatore CMS conserva update_path e rifiuta versioni minime del prodotto malformate.
  • 1.89.4: Publisher Client incorporato passa a 1.1.14. Le note includono solo versioni successive all'installata e non superiori al target scelto, anche se è un ponte.

Per esempio, un'installazione precedente può ricevere 1.89.1 prima di 1.89.4. Verificare e applicare il ponte, poi aggiornare alla versione corrente dopo un nuovo controllo. Lo schermo del ponte mostra note solo fino a 1.89.1. È distinto dal ponte storico 1.32.33 gestito dalla radice.

Aspettative operative

  • Eseguite gli aggiornamenti solo da release pubblicate.
  • Mantenete i file specifici dell'installazione nei percorsi preservati come .env, storage/ e project/.
  • Trattate separatamente i flussi di lavoro di sviluppo e di release.
  • System Updates punta sempre alla radice Composer vendor/fklavyenet/webblocks-cms. Le copie sorgenti si aggiornano con git/Composer. La modalità ritirata da sorgente e l'impostazione WEBBLOCKS_UPDATES_MIGRATION_STRATEGY sono ignorate da 1.41.0.
  • I pacchetti di release contengono solo codice riutilizzabile del core del CMS e non devono includere contenuti project/ specifici dell'installazione.
  • I percorsi preservati durante l'aggiornamento non modificano il confine del pacchetto di release: project/ resta locale all'installazione e fuori dall'artefatto pubblicato.
  • Le copie di lavoro CMS installate sono consumatrici di aggiornamenti, non publisher upstream. Se un'installazione ha un origin git, mantenete l'accesso in fetch se necessario ma disabilitate il push con git remote set-url --push origin DISABLED.
  • Il successo si registra solo quando il runtime riporta la versione target da WebBlocks\Cms\Support\WebBlocks. Una versione precedente o inattesa causa errore e ripristino automatico. Lo stato è restored se il ripristino riesce, altrimenti failed con entrambe le tracce d'errore.

Client di aggiornamento coinstallati

Un host può installare più pacchetti con Publisher Client in namespace distinti. La configurazione Laravel è globale; publisher-client non è uno stato permanente del prodotto. Un altro provider può scrivere prodotto, risolutore versione, target, validazione, migrazioni e valori post-applicazione nello stesso avvio.

Ogni ingresso aggiornamento CMS ripristina tutta la configurazione prima di risolvere un servizio. I controller iniettano solo CmsPublisherClientConfigurator, chiamano configure(), poi risolvono SystemUpdateInspector, UpdateServerClient, SystemUpdater o AdminUpdateIndicator. Iniettarli nel costruttore o metodo d'azione potrebbe risolvere dipendenze prima del ripristino ed è vietato. Il test di coesistenza sostituisce la configurazione con un prodotto estraneo e verifica il ripristino congiunto di risolutore, versione, target e client CMS.

Dettagli della release

System Updates mostra una scheda con due stati. Se aggiornato, mostra versione e ultimo controllo. Se c'è un aggiornamento compatibile, mostra percorso versioni, What's new richiudibile con note per versione, Update to X con un clic e backup automatico/ripristino in caso d'errore, più il collegamento ai backup completi prima di aggiornamenti importanti. Confronta il codice CMS attivo con l'ultima versione pubblicata; la versione memorizzata serve solo alla cronologia e persistenza.

I superamministratori hanno un indicatore asincrono nella navigazione superiore. Nascosto per default, legge /webadmin/system/updates/indicator in background e appare solo con una nuova versione affidabile. Il rendering normale non attende il server aggiornamenti; le installazioni aggiornate non mostrano scorciatoie permanenti.

Il controllo preliminare verifica database, ZIP/sodium, esecuzione PHP/Composer/processi, scrittura in radice/workspace e spazio libero. Ogni test passa o fallisce; aggiornare richiede tutti superati e nessun blocco attivo. La cronologia è richiusa e i log si aprono in modali; non ci sono azioni distruttive.

I registri vengono ripuliti dopo controlli e applicazioni. Si conservano gli ultimi cinque e l'ultimo errore fino a un successo successivo. La schermata li elenca senza cancellazione. Ispezionare con php artisan webblocks:updates:runs, php artisan webblocks:updates:runs --last, php artisan webblocks:updates:runs --failed; pulire in modo controllato con php artisan webblocks:updates:prune-runs --keep=5.

Release mostra metadati da title, summary, highlights, fixes, compatibility_notes, migration_notes, asset_notes, operator_notes, technical_notes come testo con escape. changelog_entries contiene voci cumulative, più recenti prima, successive all'installata e non oltre il target, tratte da changelog, releases, changelog_entries. Senza lista, usa la sola voce target; What's new non è vuoto.

La stringa legacy release_notes resta supportata per i payload di release più vecchi. Se non sono presenti note di release, la schermata indica No release notes were provided for this release. L'updater non deduce le modifiche dai numeri di versione.

I metadati si preparano con composer release:prepare e pubblicano con composer release:publish-update. Il wrapper verifica GitHub CLI prima della scrittura irreversibile su Publisher, pubblica lì e crea/aggiorna il GitHub Release come latest. Richiede una sezione CHANGELOG.md corrispondente, usa i punti per release_notes e summary/highlights, aggiunge riferimento, checksum e versione minima. Invia campi superiori e annidati: nuovi client ricevono note ricche, vecchi testo semplice. Si leggono campi superiori, details, release_details, meta.release_details/meta.details.

GitHub Actions non crea pacchetti né pubblica metadati; .github esegue solo test/lint. Il wrapper locale allinea GitHub latest al tag stabile. System Updates usa solo Publisher. publisher.webblocksui.com è il servizio canonico: pubblicazione https://publisher.webblocksui.com/api/updates/publish, lettura https://publisher.webblocksui.com/api/updates/latest, download https://publisher.webblocksui.com/downloads/.... Nei normali .env non servono chiavi server/prodotto/canale: ReleaseDefaults definisce server, prodotto, stable e percorsi. Il vecchio ponte updates.webblocksui.com è storico, non configurazione attiva.

Comandi per i manutentori:

composer release:push
composer release:prepare
composer release:publish-update -- --dry-run
composer release:publish-update

release:push invia ramo e tag annotato insieme a origin, eseguendo i controlli pre-push una volta. Solo dopo replica gli stessi riferimenti su backup con --no-verify; confronta ramo e commit risolto del tag su entrambi i remoti col commit locale.

La pubblicazione usa WEBBLOCKS_PUBLISHER_TOKEN e, per firmare, WEBBLOCKS_PUBLISHER_SIGNING_KEY. Default: https://publisher.webblocksui.com, prodotto webblocks-cms, canale stable, lettura /api/updates/latest; pubblicazione con stessa identità e /api/updates/publish. Il wrapper Composer legge solo questi due segreti da .env nel processo Testbench isolato; la configurazione in cache li aggiorna da .env. Non serve export manuale. Dry-run valida chiave e artefatti senza upload. Senza token, la pubblicazione reale resta non pubblicata e termina con errore; non conta come pubblicazione.

Telemetria di adozione anonima

I controlli includono telemetria rispettosa della privacy. Publisher distingue download da installazioni anonime attive. I download contano gli artefatti scaricati; le installazioni attive contano identificativi unici che riportano nel tempo.

La telemetria è attiva per default; per disattivarla:

WEBBLOCKS_TELEMETRY=false

Con telemetria attiva, il primo controllo necessario genera installation_id casuale locale e lo salva nelle impostazioni di sistema. Non contiene dati personali o del sito, resta stabile e può cambiare ricreando l'installazione o reimpostando storage/database.

Il controllo invia solo questi campi:

  • product_key
  • installed_version
  • channel
  • installation_id
  • telemetry_schema_version

CMS non invia domini, URL completi, email admin, percorsi, nomi database, titolari licenza, conteggi utenti, token, segreti o valori arbitrari. Con WEBBLOCKS_TELEMETRY=false, richiede ancora metadati con prodotto, canale e versione, ma non crea né invia installation_id.

Flusso di applicazione dell'aggiornamento

Un aggiornamento interno è un'esecuzione con un clic: scarica e verifica il pacchetto, crea backup automatico, applica i file e poi, nell'ordine:

  • migrazioni di aggiornamento del pacchetto, se presenti
  • passaggi di pulizia della cache
  • sincronizzazione del catalogo incluso (webblocks:catalog-repair --all)
  • registrazione dell'esecuzione di aggiornamento
  • persistenza della versione installata

Se applicazione o verifica falliscono, ripristina automaticamente il backup precedente. Lo stato è restored; se fallisce anche il ripristino, è failed con entrambe le tracce nel log. Il backup resta disponibile nella schermata Backup o via CLI php artisan system:backup:restore per ripristino manuale.

Dopo il successo si applica la pulizia configurata e si registrano quantità eliminate e byte liberati. Gli errori di pulizia non annullano l'aggiornamento; sono registrati per revisione. Default: backup precedenti 14 giorni e almeno gli ultimi cinque riusciti; backup di sicurezza ripristino 30 giorni e punti contenuto 7. I backup di aggiornamenti falliti/ripristinati sono protetti 90 giorni. Esclusi manuali, caricati e in esecuzione. Configurare/anteprima in Maintenance → Cleanup; vedere Operazioni per scheduler, CLI e API.

Gli aggiornamenti applicano pacchetti pubblicati e dopo la pulizia cache eseguono webblocks:catalog-repair --all come sottoprocesso del nuovo codice. Allineano cataloghi blocchi, blocchi plugin, slot, layout e icone; aggiungono voci come Rating/Comments senza comando manuale. Il manifest ricostruito rileva nuovi comandi. Sono idempotenti e preservano voci personalizzate.

La sincronizzazione è best-effort: file e migrazioni sono già riusciti, quindi un suo errore non fa fallire l'aggiornamento. Il log segnala l'incompletezza e la possibilità di rieseguire php artisan webblocks:catalog-repair --all. Lo schema cambia tramite migrazioni esplicite; il sync ripara solo dati del catalogo.

I passaggi di pulizia della cache comprendono le pulizie di configurazione, viste, cache applicativa e rotte di Laravel, così che i layout e gli helper Blade di proprietà del pacchetto vengano ricompilati dopo la sostituzione dei file. Su installazioni PHP-FPM in produzione con OPcache configurato per non validare i timestamp, ricaricate il servizio PHP-FPM pertinente dopo un aggiornamento riuscito, in modo che PHP non continui a servire dalla memoria classi del pacchetto precedenti all'aggiornamento.

Durante l'aggiornamento, una modale non chiudibile mostra il percorso con il caricamento WebBlocks UI. PHP può riavviarsi durante la richiesta, quindi non ne attende la fine: avvia e interroga l'indicatore ogni 1,5 secondi, tornando comunque all'admin entro 3 minuti. Ogni risposta, incluso il redirect al login, ricarica lo schermo.

System Update non esegue mai database/migrations dell'host, evitando conflitti di migrazioni Laravel pendenti come 0001_01_01_000000_create_users_table.php con tabelle CMS esistenti. Applica il pacchetto a vendor/fklavyenet/webblocks-cms ed esegue solo migrazioni PHP in vendor/fklavyenet/webblocks-cms/database/migrations/updates. Se assenti, registra il salto e continua con cache/versione. Qui vanno anche riparazioni sicure dello schema, come chiavi padre per backup completi portabili.

Regola di aggiornamento dello schema nativa di pacchetto

Qualsiasi modifica allo schema di WebBlocks CMS richiesta dal codice a runtime deve supportare entrambi i percorsi di installazione:

  1. Installazioni nuove o da consumatore del pacchetto: aggiornate il percorso di migrazione dello schema normale o di installazione nuova.
  2. Installazioni native di pacchetto esistenti aggiornate tramite System Updates: aggiungete una migrazione di aggiornamento del pacchetto sotto database/migrations/updates del pacchetto; i consumatori installati la eseguono da vendor/fklavyenet/webblocks-cms/database/migrations/updates.

Lo schema di installazione nuova da solo non basta. Se il nuovo codice a runtime si aspetta una tabella o una colonna, la release deve includere una migrazione di aggiornamento per le installazioni esistenti, oppure l'aggiornamento deve fallire in modo sicuro prima che il nuovo percorso di codice possa generare un errore 500 grezzo. Le System Updates native di pacchetto non devono richiedere agli utenti ordinari di collegarsi via SSH a un sito ed eseguire migrazioni manuali dopo un aggiornamento riuscito.

Il successo richiede codice, schema, cache e verifica finale allineati. Admin/API/runtime dipendenti dal nuovo schema devono mostrare istruzioni controllate, non errori grezzi. Il caso 1.32.146→1.32.147 è il riferimento: cms_api_tokens era solo nelle migrazioni normali; dopo l'update System -> API Tokens dava errore finché 1.32.147 aggiunse migrazione del pacchetto e gestione dello schema mancante.

Lo schema interazioni segue lo stesso contratto. Gli aggiornamenti garantiscono wbcms_comment_entries/wbcms_content_ratings automaticamente senza richiedere artisan migrate dell'host. La riparazione idempotente conserva e rinomina le tabelle storiche senza prefisso o crea quelle prefissate; nel rollback preserva intenzionalmente i dati.

I report di release con modifiche allo schema devono rispondere esplicitamente a:

  • percorso dello schema di installazione nuova aggiornato: sì/no
  • migrazione di aggiornamento del pacchetto aggiunta: sì/no
  • test di regressione della migrazione di aggiornamento aggiunto: sì/no
  • comportamento corretto in assenza di schema necessario/aggiunto: sì/no

Durante la transizione a pacchetto, alcune installazioni possono avere ancora una copia obsoleta packages/webblocks-cms nella radice dell'installazione o una vecchia copia annidata di transizione in vendor. Questi percorsi sono artefatti legacy della transizione, non la fonte di verità nativa di pacchetto attiva. La System Update nativa di pacchetto sostituisce ora la radice canonica del pacchetto Composer in vendor/fklavyenet/webblocks-cms e verifica la versione di destinazione da quella radice di pacchetto. Non mantiene packages/webblocks-cms come seconda copia runtime aggiornata.

Il vendor precedente vendor/fklavyenet/webblocks-cms può contenere artisan, app/, bootstrap/, packages/webblocks-cms/, plugins/, tests/ come repository. System Update lo sostituisce col pacchetto piatto: composer.json, LICENSE radice, src/, routes/, resources/, database/, public/, config/, stubs/ sotto vendor/fklavyenet/webblocks-cms. Normalizza metadati Composer prima dell'autoload ottimizzato e verifica che WebBlocks\Cms\ provenga da vendor/fklavyenet/webblocks-cms/src, non vendor/fklavyenet/webblocks-cms/packages/webblocks-cms/src. Percorsi obsoleti fanno fallire l'update anziché dichiarare successo con admin guasto.

Gli aggiornamenti moderni preservano la separazione tra l'amministrazione /webadmin e gli asset /cms introdotta dalla migrazione della v1.32.56. /cms è solo uno spazio dei nomi per asset statici, non un prefisso di amministrazione, perché il try_files di Nginx può risolvere /cms/ come la directory fisica public/cms/ prima che Laravel veda una rotta. Gli aggiornamenti non devono ripristinare alias di amministrazione /cms di proprietà del CMS, redirect /cms, rotte /admin o un passaggio a public/cms/index.php, né nella radice dell'installazione né negli asset pubblici del pacchetto.

Ponte ritirato dagli aggiornamenti gestiti dalla radice della 1.31

Questa sezione è storica. L'updater della 1.31.53 validava il vecchio contratto di archivio gestito dalla radice: artisan e composer.json dovevano trovarsi nella radice dell'archivio o dentro un'unica directory contenitore. Gli artefatti con radice di pacchetto come 1.32.31 non contenevano intenzionalmente un artisan di radice, perciò quei vecchi client fallivano prima dell'applicazione con Package validation failed because composer.json and artisan were not found at the archive root.

La strategia del ponte ritirato prevedeva due passaggi:

  • Pubblicare o ripubblicare un artefatto di release ponte nella vecchia forma gestita dalla radice, costruito da un sorgente compatibile con il ponte che conteneva ancora i wrapper legacy App\Support\System\Updates\* e che convalidava già archivi stretti con radice di pacchetto fklavyenet/webblocks-cms. Per il ponte 1.32.33 il riferimento sorgente era v1.32.30.
  • Pubblicare release con radice di pacchetto con minimum_client_version impostato a 1.32.18 o successivo, in modo che ai client vecchi non venisse proposto l'ultimo artefatto con radice di pacchetto prima del ponte.
  • Dopo l'applicazione del ponte, l'updater installato poteva convalidare e applicare la forma stretta di artefatto con radice di pacchetto fklavyenet/webblocks-cms usata dalle release moderne.

scripts/build-root-managed-bridge-archive.sh VERSION [OUTPUT_DIR] [GIT_REF] è mantenuto soltanto come strumento archiviato di ripristino manuale per lo ZIP ponte nella vecchia forma; per esempio scripts/build-root-managed-bridge-archive.sh 1.32.33 dist v1.32.30. Il builder esclude intenzionalmente i percorsi di proprietà dell'installazione come .env, storage/, project/, public/site/, public/storage e il config/ radice; i valori predefiniti di proprietà del pacchetto sotto packages/webblocks-cms/config restano parte del runtime del pacchetto. La validazione ordinaria nativa del pacchetto non esegue questo percorso ponte.

Il percorso storico completato è stato 1.31.53 -> 1.32.33 bridge -> 1.32.34+ package-rooted. Le installazioni già compatibili con il ponte, come 1.32.30, hanno saltato il ponte e sono state aggiornate direttamente a una release con radice di pacchetto 1.32.34+. Gli attuali controlli di rilascio proteggono soltanto l'artefatto con radice di pacchetto e il comportamento dell'updater nativo del pacchetto.

Riparazione del catalogo

System Updates esegue webblocks:catalog-repair --all automaticamente dopo l'installazione; vedere Flusso di applicazione. Gli stessi comandi restano disponibili per riparazioni manuali tra release o sincronizzazioni incomplete:

php artisan webblocks:catalog-repair --dry-run --all
php artisan webblocks:catalog-repair --all

Il comando supporta --block-types, --plugin-block-types, --slot-types, --page-layouts, --icons. Eseguire prima --dry-run per vedere voci create, aggiornate, invariate o saltate. È idempotente, conserva le voci personalizzate e non le elimina.

La sincronizzazione dei tipi di blocco di livello inferiore resta disponibile per compatibilità:

php artisan block-types:sync-core

Il percorso di riparazione dei tipi di blocco mantiene il catalogo block_types memorizzato nel database allineato al catalogo del core CMS distribuito nelle installazioni esistenti:

  • i tipi di blocco core mancanti vengono creati
  • i tipi di blocco core esistenti vengono aggiornati sul posto
  • i tipi di blocco personalizzati specifici dell'installazione vengono preservati
  • non vengono create righe core duplicate

Questo flusso di manutenzione copre il caso in cui un'installazione debba aggiornare le righe di catalogo senza costringere ogni applicazione di un pacchetto di release a eseguire un'ampia riparazione del catalogo nel database.

Quando l'updater viene eseguito all'interno di un clone di installazione gestito con git che punta ancora all'upstream canonico del CMS, il CMS disabilita ora automaticamente anche il push su origin dopo i comandi di post-installazione, così che futuri tentativi accidentali di git push falliscano in modo chiaro mentre il normale accesso in fetch o pull resta disponibile.

Aggiornamenti di sistema tramite l'API (1.90.0)

Internal Content API supporta controlli di aggiornamento, esecuzione, e risultati operativi durevoli. Questi endpoint utilizzano lo stesso client editore motore come pannello Aggiornamenti di sistema. Conservano l'automatico configurato backup, verifica checksum e firma, blocco esecuzione esclusivo, manutenzione modalità, verifica della versione post-applicazione e ripristino in seguito a errori. Firma la verifica segue la politica di firma esistente dell'installazione; l'API lo fa non trasformare una politica di firma facoltativa in obbligatoria né indebolirla.

Metodo e percorso Capacità richiesta Scopo
GET /webadmin/api/system/updates/check system-updates.read Leggi la versione installata, la destinazione offerta, il checksum, la compatibilità e lo stato di blocco.
POST /webadmin/api/system/updates system-updates.run Esegui un aggiornamento esplicitamente approvato in modo sincrono.
GET /webadmin/api/system/updates/operations/{operation} system-updates.read Leggi un'operazione duratura tramite UUID e il suo risultato disinfettato.

Entrambe le funzionalità sono attivabili e assenti dal token predefinito e legacy predefinito autorizzazioni. system-updates.run è classificato come distruttivo. Concedeteli entrambi funzionalità a uno strumento che deve eseguire e successivamente ispezionare gli aggiornamenti o concedere solo system-updates.read per il monitoraggio. Il permesso di lettura non implica mai l'esecuzione permesso.

Solo un token di sistema a livello di installazione, con allowed_site_ids uguale a null, di proprietà di un utente attivo che attualmente ha access-system, può utilizzarli endpoint. Sono esclusi i token personali e i token di sistema con ambito sito, anche se l'array di capacità memorizzate è stato modificato per includere le autorizzazioni di aggiornamento. Gli utenti della demo pubblica senza accesso al sistema non possono concedere o esercitare aggiornamenti autorizzazioni. Revoca, scadenza, disattivazione del titolare, cancellazione o perdita del sistema autorità impediscono ulteriori accessi. L'API verifica la funzionalità e l'installazione autorità al momento della richiesta; l'emissione del token controlla anche l'autorità di installazione.

Approvazione ed esecuzione

  1. Leggi l'endpoint di controllo. Un server di aggiornamento irraggiungibile o un risultato incompatibile non è l'autorizzazione per eseguire un aggiornamento.
  2. Mostra all'operatore la versione installata, la versione di destinazione offerta e il checksum. Ottieni l'approvazione esplicita per quell'aggiornamento esatto e per l'intera installazione impatto. Una concessione simbolica non sostituisce l'approvazione di una corsa particolare.
  3. Genera un idempotency_key stabile e invia i campi approvati. Tienilo chiave e corpo della richiesta per il ripristino della perdita di connessione.

Esempio di corpo della richiesta, utilizzando versioni sintetiche e checksum:

{
  "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 attesta che il chiamante ha ottenuto l'approvazione dell'operatore; non è così dimostrare che un essere umano ha approvato la richiesta. La disciplina dell'approvazione resta la responsabilità dello strumento chiamante. Non impostarlo automaticamente in un'IA flusso di lavoro autorizzato solo a modificare il contenuto.

Il motore controlla la versione installata e la nuova versione offerta rispetto a versione/checksum approvata all'interno del suo blocco di esecuzione, prima di creare un backup o applicazione dei file. Viene restituita una destinazione modificata, un checksum o una versione installata system_update_target_changed; ricontrollare e ottenere una nuova approvazione. Arbitrario gli URL di download, gli artefatti, i comandi e le sostituzioni di firma/backup non lo sono accettato. Una versione bridge è un aggiornamento approvato: non autorizza installazione di una release successiva.

Esecuzione, tentativi e risultati

L'esecuzione è sincrona, come nel pannello. Non è previsto alcun obbligo di coda e no 202 Accepted promessa di lavoro in background. Il POST iniziale normalmente restituisce 200 con un oggetto operation; l'esecuzione non riuscita restituisce 409 con l'operazione. L'operazione include l'UUID, l'ID di esecuzione associato, le versioni, il checksum, lo stato, codice di errore, timestamp e risultato disinfettato. Posizioni di backup, gettoni al portatore, le credenziali del server e le analisi dello stack non elaborate non vengono restituite. Controlla le risposte ometti scaricare URL e diagnostica grezza del server.

Gli stati sono running, success, success_with_warnings, failed e restored. restored significa che il motore ha segnalato un aggiornamento non riuscito seguito da a ripristino del backup riuscito; non è un aggiornamento riuscito. L'output del risultato è delimitato e igienizzato nuovamente quando presentato. Finalizzazione post-applicazione verificata gli errori utilizzano lo stesso servizio di riconciliazione del pannello, quindi aprendo il pannello non è necessario per ottenere success_with_warnings.

Un POST identico che utilizza lo stesso token e la stessa chiave di idempotenza restituisce l'originale operazione con replayed: true e non esegue mai un altro aggiornamento. Riutilizzare a la chiave con diversi campi approvati restituisce system_update_idempotency_conflict. Le chiavi di idempotenza hanno come ambito un token: la modifica dei token o l'utilizzo di una nuova chiave lo sono non è un tentativo sicuro dopo un risultato incerto. Ispezionare operation.status e operation.code; la risposta HTTP riuscita di un replay indica l'esistente l'operazione è stata recuperata, non che l'aggiornamento sia riuscito.

Un aggiornamento concorrente restituisce system_update_in_progress. Ammissione API e il blocco del motore esistente impedisce l'esecuzione sovrapposta, comprese le gare di pannelli/API. Le entrate durevoli vengono conservate indipendentemente dall'eliminazione ordinaria della cronologia di esecuzione; la revoca o l'eliminazione di un token non comporta l'eliminazione a cascata di queste ricevute.

Perdita di connessione e ripristino dell'operatore

Un aggiornamento può sostituire il proprio codice in esecuzione e abilitare temporaneamente la manutenzione modalità. Una connessione POST potrebbe scadere e il polling potrebbe ricevere 503 temporaneo risposte. Nessuno dei due dimostra il fallimento. Al ripristino dell'accesso ripetere il POST esatto con la sua chiave/corpo originale per recuperare l'UUID dell'operazione o interrogare l'UUID se già noto. Non inviare mai automaticamente una nuova chiave.

Un'interruzione irreversibile del processo può lasciare un'operazione registrata come running. Quando l'operazione è abbastanza vecchia e il motore non ha blocco/battito cardiaco attivo, il risultato riporta requires_attention: true. Si tratta di un risultato incerto, non un fallimento, un successo o un rollback inventati. Blocco delle operazioni API non risolto nuove esecuzioni API con system_update_requires_attention; la stessa operazione può ancora essere recuperato senza eseguirlo nuovamente.

L'operatore dell'installazione deve verificare la versione attiva, il backup, la manutenzione stato ed eseguire la cronologia e completare la procedura di ripristino esistente. Risolvi una ricevuta orfana solo attraverso la manutenzione controllata del database lato host dopo aver stabilito il risultato effettivo; conservare la sua chiave e la registrazione di audit. Fallo non eliminare le ricevute per aggirare la salvaguardia. L'API fornisce intenzionalmente no riavvio automatico, annullamento o ripristino endpoint per operazioni incerte.

Campi richiesta non validi o conferma reso mancante 422; capacità mancante o l'autorità di installazione restituisce 403 e viene restituita un'operazione sconosciuta 404. Gli errori di autenticazione mantengono il normale comportamento dell'API 401. Scopri i percorsi live e richiedere il contratto tramite /webadmin/api e /webadmin/api/openapi.json.

Idoneità del token di sistema nel pannello (1.90.1)

La creazione e la modifica del token di sistema mostrano il tipo di token di sistema fisso e l'ambito dell'intera installazione. Il pannello avvisa prima del salvataggio di un token che non può eseguire aggiornamenti di sistema. Un token idoneo necessita comunque di un proprietario attivo dell'amministratore di sistema, di un ambito a livello di installazione e di system-updates.read o system-updates.run concessi separatamente; I token personali e con ambito sito non possono eseguire aggiornamenti di installazione. La modifica di un token normalizza i tipi di token di sistema legacy senza rimuovere i controlli di proprietario, scadenza, revoca o ambito.

Documentazione correlata