Le release automatiche compilano e pubblicano un plugin sandboxed quando invii un tag di versione o avvii manualmente un workflow di GitHub Actions. Il tuo account Atmosphere rimane proprietario del profilo del pacchetto e dei record di release. GitHub identifica il workflow approvato e il servizio di release verifica la build e scrive la release tramite una delega ristretta. Il repository non memorizza una credenziale dell’account Atmosphere.
Usa emdash-plugin publish per una release avviata dal tuo computer. Usa questa guida quando GitHub Actions deve compilare e pubblicare le release.
Prerequisiti
Prepara quanto segue prima di iniziare:
- Un repository GitHub pubblico contenente un plugin EmDash sandboxed.
@emdash-cms/plugin-cliinstallato come dipendenza di sviluppo. I plugin creati con la CLI lo includono già.- Un
emdash-plugin.jsoncvalido conslug,publisher,license, un autore e un contatto di sicurezza. Impostareposull’URL GitHub canonico, oppure conferma il remote GitHub rilevato durante la configurazione interattiva. - Una versione in
package.json, oppure inemdash-plugin.jsoncper un plugin solo di registro. - L’account Atmosphere indicato da
publisher. - Un browser che supporta le passkey. L’approvazione della release richiede la verifica dell’utente.
Esegui il controllo del manifesto prima di configurare il workflow:
pnpm exec emdash-plugin validate
Configurare le release automatiche
-
Accedi alla CLI del plugin con l’account Atmosphere proprietario del pacchetto.
pnpm exec emdash-plugin login alice.example.comLa CLI memorizza questa sessione di pubblicazione locale fuori dal progetto. GitHub Actions non la riceve mai.
-
Prepara il profilo del pacchetto e genera il workflow dalla directory del plugin.
pnpm exec emdash-plugin release setupIl comando legge i metadati del pacchetto da
emdash-plugin.jsonc. Se manca il profilo del pacchetto, offre di crearlo. Se il profilo esiste senza impostazioni di delegated-release, offre di aggiungerle preservando i metadati esistenti del pacchetto.In un monorepo, esegui il comando all’interno del pacchetto del plugin oppure passa
--dir <plugin-directory>. Se il manifesto non contienerepo, la configurazione rileva il remote GitHuborigine precompila il prompt del repository.La configurazione chiede quando una release necessita di approvazione:
- When plugin permissions increase è l’impostazione predefinita. Una release attende l’approvazione quando il suo accesso dichiarato si amplia rispetto all’ultima release.
- For every release richiede l’approvazione per ogni versione.
La configurazione chiede anche se le release richiedono provenance verificabile. Require provenance è l’impostazione predefinita per le release automatiche. Scegli Allow releases without provenance solo quando lo stesso profilo deve accettare anche release pubblicate direttamente da un ambiente locale affidabile.
L’account Atmosphere con cui hai effettuato l’accesso diventa l’approvatore iniziale. Il profilo lega il pacchetto all’URL canonico del repository GitHub e registra la policy di provenance selezionata.
Esegui solo il passaggio del profilo quando esiste già un file di workflow:
pnpm exec emdash-plugin profile setupDopo aver pubblicato il profilo del pacchetto, questo comando mostra i comandi di release manuale e di GitHub Actions.
In un terminale non interattivo, passa
--yesper accettare le policy predefinite. Passa--repository <https-url>quando né il manifesto né il remote Git forniscono il repository,--provenance optionalper consentire release senza provenance e--confirmation alwaysper richiedere l’approvazione per ogni release. -
Rivedi e conferma il workflow generato.
Il comando crea
.github/workflows/emdash-release.yml. Non esegue il push del file e non sostituisce un workflow esistente a meno che tu non passi--force.Se il repository contiene
.changeset/config.json, la configurazione interattiva offre Follow Changesets releases. Quando Changesets pubblica un pacchetto contenenteemdash-plugin.jsonc, il workflow EmDash riutilizzabile pubblica la stessa versione. Collegalo al workflow Changesets esistente come descritto di seguito. Altrimenti, il workflow generato viene eseguito per i tag di pacchetto corrispondenti a<slug>@<version>. Entrambe le varianti supportano esecuzioni manuali e possono essere selezionate esplicitamente con--trigger changesets|tags|manual.Il workflow concede a ogni job solo i permessi
contents,id-tokeneattestationsrichiesti; fissa le Action di terze parti a identificatori di commit completi; esegue la versione esatta della CLI del plugin che ha generato il file; risolve ogni pacchetto dal suo manifesto; costruisce un bundle del plugin; crea la provenance di build di GitHub per quegli esatti byte; e passa entrambi i file all’Action di release EmDash.Il workflow si trova nella root del repository ed è condiviso da ogni pacchetto plugin in quel repository. Eseguire
release setupda un pacchetto annidato scrive comunque.github/workflows/emdash-release.ymlnella root. -
Apri la dashboard del servizio di release e accedi con lo stesso account Atmosphere.
Seleziona Authorize publishing. Il provider del tuo account mostra l’esatto permesso delegato. La concessione trattenuta può creare record di release del pacchetto e caricare blob di pacchetto o di immagine di listing. Non può creare o modificare profili di pacchetto, aggiornare o eliminare release, né scrivere in un’altra collection.
-
Avvia il workflow di release.
Con Changesets, unisci la pull request di versione e lascia completare il suo job di pubblicazione. L’Action Changesets passa i pacchetti che ha pubblicato al workflow EmDash riutilizzabile. I pacchetti npm ordinari vengono ignorati; i pacchetti contenenti
emdash-plugin.jsoncpubblicano la stessa versione su EmDash.Con il trigger del tag di pacchetto, aggiorna la versione del pacchetto prima di creare il tag di versione. I seguenti comandi avviano una release
1.2.3:git tag gallery@1.2.3 git push origin gallery@1.2.3Puoi anche selezionare Run workflow nella pagina GitHub Actions del repository.
-
Approva ogni ambito di ref del repository alla prima esecuzione.
Il servizio verifica che il profilo del pacchetto iniziato nomini il repository GitHub prima di creare una richiesta di connessione. L’Action scrive un link nel riepilogo del job di GitHub e attende. Apri il link e conferma il repository, il file di workflow, il branch o il tag e l’ambiente.
Per un’esecuzione attivata da tag, scegli All package version tags o Only this tag. Un’esecuzione manuale richiede l’approvazione la prima volta che viene usato il suo branch. Confermare un altro ambito di tag o branch lo aggiunge alla connessione del repository senza rimuovere gli ambiti esistenti. Il servizio memorizza gli ID del repository e del proprietario GitHub nonché i ref e gli ambienti approvati. I pacchetti successivi riutilizzano questi ambiti solo quando i loro profili firmati nominano lo stesso repository.
Le approvazioni di pacchetto create da workflow generati più vecchi restano limitate ai loro pacchetti originali. Il primo pacchetto o ref non corrispondente richiede una connessione al repository; il servizio non amplia automaticamente un’approvazione di pacchetto esistente.
-
Approva la release quando richiesto.
Una release che amplia i permessi del plugin, o un profilo configurato per la conferma a ogni release, passa in Awaiting approval. Apri l’URL di approvazione dall’output dell’Action o dalla dashboard delle release. Registra una passkey se l’account approvatore non ne ha già una, rivedi la modifica dei permessi e approva o rifiuta la release.
L’impostazione predefinita dell’Action restituisce successo quando la release raggiunge Awaiting approval. Il workflow del servizio continua ad attendere la decisione del browser e pubblica dopo l’approvazione.
Collegare un workflow Changesets
Il .github/workflows/emdash-release.yml generato accetta il JSON dei pacchetti pubblicati dell’Action Changesets tramite workflow_call. Aggiungi un output al job Changesets esistente, quindi chiama il workflow EmDash da un job dipendente. Sostituisci release e changesets quando il job o lo step esistente usa un altro ID.
Changesets Action v2 usa l’output published-packages. Aggiungi il seguente output di job e il chiamante a un workflow che usa Changesets CLI v3:
jobs:
release:
# Keep the existing runner, permissions, and steps.
outputs:
published: ${{ steps.changesets.outputs.published }}
published-packages: ${{ steps.changesets.outputs['published-packages'] }}
publish-emdash-plugins:
needs: release
if: needs.release.outputs.published == 'true'
uses: ./.github/workflows/emdash-release.yml
with:
published-packages: ${{ needs.release.outputs['published-packages'] }}
permissions:
contents: read
id-token: write
attestations: write
Changesets Action v1 usa l’output dello step in camel-case publishedPackages. Usa questa espressione per un workflow che usa Changesets CLI v2:
jobs:
release:
# Keep the existing runner, permissions, and steps.
outputs:
published: ${{ steps.changesets.outputs.published }}
published-packages: ${{ steps.changesets.outputs.publishedPackages }}
publish-emdash-plugins:
needs: release
if: needs.release.outputs.published == 'true'
uses: ./.github/workflows/emdash-release.yml
with:
published-packages: ${{ needs.release.outputs['published-packages'] }}
permissions:
contents: read
id-token: write
attestations: write
Lascia Changesets responsabile della sua pull request di versione e della pubblicazione del pacchetto. Il chiamante EmDash viene eseguito solo quando Changesets segnala published: true. Per i pacchetti privati solo EmDash, imposta sia privatePackages.version sia privatePackages.tag su true in .changeset/config.json. Aggiungi applicazioni private non correlate e fixture di test a ignore.
Aggiungere un altro pacchetto
Prepara il profilo del pacchetto dalla sua directory di origine. Vengono riutilizzati il workflow root esistente e la connessione del repository:
pnpm exec emdash-plugin profile setup --dir packages/comments
Con Changesets, aggiungi il pacchetto a un changeset e unisci la sua pull request di versione. Con il trigger del tag di pacchetto, aggiorna la versione del pacchetto e invia il suo tag:
git tag comments@1.0.0
git push origin comments@1.0.0
Il workflow risolve comments in un emdash-plugin.jsonc, controlla la versione selezionata e verifica che il profilo firmato nomini il repository connesso prima di accettare i caricamenti degli artefatti. ID di pacchetto duplicati e discrepanze di versione falliscono prima dell’attestazione.
Cosa verifica il servizio di release
Il servizio completa questi controlli prima di scrivere una release:
- Il token OpenID Connect (OIDC) di GitHub nomina un repository, proprietario, workflow, ref, ambiente, commit, esecuzione e runner ospitato da GitHub autorizzati.
- Il profilo del pacchetto esiste, è firmato dal publisher, contiene impostazioni di delegated-release e nomina lo stesso repository GitHub canonico.
- Il pacchetto e la versione richiesti corrispondono al bundle del plugin compilato.
- Il checksum del pacchetto corrisponde ai byte caricati.
- La provenance di GitHub copre lo stesso bundle, repository, workflow, commit ed esecuzione.
- L’accesso dichiarato del record di release corrisponde al manifesto del bundle.
- Il record di versione non esiste ancora.
- Qualsiasi approvazione passkey richiesta copre l’esatto risultato di verifica e la revisione corrente del profilo.
L’Action richiede un token OIDC di GitHub fresco per ogni chiamata al servizio. I file di bundle e provenance entrano nello storage transitorio privato solo dopo che il workflow è autorizzato. Il servizio carica i byte verificati di pacchetto e immagine sul personal data server (PDS) del publisher, crea lì il record di release ed espone la provenance verificata tramite un URL immutabile indirizzato per checksum.
Confini di autorità
Ogni credenziale ha un compito:
| Credential | Used by | Authority |
|---|---|---|
| Local CLI OAuth session | emdash-plugin profile setup | Create or update the publisher-owned package profile after local confirmation. |
| GitHub OIDC token | Release Action | Identify one GitHub workflow run to the service. It grants no AT Protocol write access. |
| Release-service delegation | Release service | Create package release records and upload the required blobs. |
| Publisher application session | Release dashboard | Authorise workflow connections and revoke delegated publishing. |
| Approver session and passkey | Approval page | Approve or reject one checksum-bound release verification. |
| Cloudflare Access identity | Service operator console | Operate the hosted service. It does not represent a publisher or approver. |
Il servizio memorizza lo stato del publisher e dell’approvatore separatamente. Accedere per visualizzare le tue release non concede accesso da operatore, e un’identità di operatore non può approvare una release come publisher.
Comportamento dell’Action
Il workflow generato usa l’Action da apps/release-action. L’Action accetta un bundle compilato più provenance Sigstore grezza, oppure un release-file di compatibilità contenente fonti di artefatti HTTPS legate al checksum. Non combinare release-file con input di bundle o provenance.
Il workflow generato standard fornisce questi input. Sono mostrati qui così puoi rivedere il file generato senza dover inferire cosa autorizza ciascun valore:
| Input | Value |
|---|---|
service-url | Release-service HTTPS origin. |
publisher-did | DID that owns the package profile and releases. |
bundle-file | The single tarball produced by emdash-plugin release prepare. |
provenance-file | Raw bundle-path output from actions/attest-build-provenance. |
L’Action restituisce questi output:
| Output | Meaning |
|---|---|
connection-url | Browser URL for first-run workflow approval. |
intent-id | Release intent identifier. |
state | Published, terminal, or awaiting_approval state. |
approval-url | Browser URL when passkey approval is required. |
release-uri | Published release AT URI. |
release-cid | Published release record CID. |
reason-code | Stable reason for a terminal intent. |
Consulta il riferimento dell’Action per input opzionali, workflow con fonti URL personalizzate, controlli di polling e il comportamento esatto degli output.
Risoluzione dei problemi
PACKAGE_PROFILE_REQUIRED
Il profilo del pacchetto manca, è privo di impostazioni di delegated-release, usa un URL di repository non canonico oppure nomina un repository diverso dal workflow di GitHub.
Esegui la configurazione del profilo localmente con l’account del publisher, quindi riavvia il workflow:
pnpm exec emdash-plugin profile setup
Questo controllo viene eseguito prima che il servizio accetti i caricamenti di bundle o provenance.
Repository pubblico richiesto
GitHub usa una root di fiducia Sigstore privata per i repository privati e interni. Il verificatore delle release attualmente si fida solo della provenance pubblica di GitHub. Sposta il workflow di release in un repository pubblico oppure pubblica localmente con emdash-plugin publish.
WORKLOAD_NOT_ALLOWED
Il repository, il proprietario, il file di workflow, il ref o l’ambiente di GitHub non corrisponde alla policy del workflow approvata. Apri la dashboard delle release e approva una nuova connessione del workflow con l’ambito previsto.
PROFILE_FETCH_FAILED
Il servizio non ha potuto verificare il profilo dal PDS del publisher. Riprova quando il provider dell’account è disponibile. Esegui emdash-plugin profile setup se il profilo è stato rimosso o modificato.
POLL_TIMEOUT
L’Action ha raggiunto timeout-minutes prima che fossero completate l’approvazione del workflow, l’approvazione della release o la pubblicazione. Controlla lo stato dell’intent nella dashboard delle release prima di rieseguire. Una riesecuzione della stessa esecuzione di GitHub Actions riusa la sua chiave di idempotenza.
Revocare la pubblicazione automatica
Seleziona Turn off automated publishing nella dashboard delle release. La revoca cancella la delega di release trattenuta. I profili di pacchetto esistenti, le release, le etichette di moderazione, i plugin installati e l’accesso alla dashboard non cambiano.
Ricollega la pubblicazione e approva di nuovo il workflow prima della prossima release automatica.
Documentazione correlata
- Bundling and publishing tratta la pubblicazione locale e la validazione dei bundle.
- The plugin manifest definisce i metadati del pacchetto e l’accesso dichiarato.
- Capabilities and security spiega i permessi esaminati durante l’approvazione della release e l’installazione.
- The plugin registry spiega discovery, moderazione e verifica dell’installazione.