• v2.13.0 c2456a1a0c

    v2.13.0
    All checks were successful
    Auto Release on version bump / release (push) Successful in 10s
    Stable

    Ghost released this 2026-10-11 15:06:44 +02:00 | 6 commits to main since this release

    Changed

    • Il pacchetto arriva dall'ultima release, non più dal branch. get_latest_version() chiama GET /api/v1/repos/{owner}/{repo}/releases/latest: versione = tag_name senza la v, pacchetto = primo allegato .zip servito dalla stessa istanza (se manca, archive/{tag}.zip), readme.txt letto dal tag. Restano 2 richieste per plugin.
    • Ripiego sul branch solo per i repo senza release (HTTP 404 su releases/latest): versione dall'header Version: e zip del branch, come fino alla 2.12.0. La colonna Stato lo segnala con "Nessuna release: aggiorna dal branch". Su 401/403, 5xx ed errori di rete nessun ripiego: valgono gli stati già esistenti.
    • "Installa plugin da Forgejo" installa anch'esso l'ultima release; la checklist ha un passo "Pacchetto" (release o branch). La cartella prende il nome del repo con un filtro upgrader_source_selection temporaneo, perché lo zip di una release può contenere il nome vecchio del repo.
    • readme.txt (FAQ, External services) e i due README descrivono il flusso nuovo. Corretta anche la descrizione delle richieste dell'anteprima, che citava un /contents mai usato.

    Why

    • Con lo zip del branch, un commit su main senza bump arrivava ai siti che aggiornavano dopo, con lo stesso numero di versione della release: due siti "2.12.0" potevano avere codice diverso. Lo zip allegato dalla CI esisteva già ma nessuno lo usava. Idea presa dal confronto con Git Updater, che scarica il tag o l'asset della release.
    • Caso reale che ha deciso "primo .zip" invece della ricerca per nome: la release v1.6.0 di eg-contact-form allega eg-contact-form-privacy.zip, con dentro la cartella eg-contact-form-privacy/ (nome del repo prima del rename).

    Verified

    • Prima del rilascio, in produzione con la classe API nuova caricata sotto altro nome (wp eval-file, nessuna scrittura): i 13 plugin gestiti passano tutti a release, con la stessa versione di oggi e lo zip della release; repotest (file principale rinominato per il test 404) → 404 come prima; con il nome giusto del file → ripiego branch.
    • Risposte simulate con pre_http_request: release senza zip e zip su host esterno → archive/{tag}.zip; tag non valido e JSON rotto → errore; 401 → nessun ripiego; 500 → 3 tentativi.
    • Download reale dello zip di eg-contact-form con il token: HTTP 200 senza redirect.
    • make-pot, msgfmt --check (95 tradotte, 3 non tradotte ammesse), Plugin Check: solo l'ERROR atteso plugin_updater_detected.
    Downloads