Automatisierte Releases bauen und veröffentlichen ein sandboxed Plugin, wenn Sie einen Versions-Tag pushen oder einen GitHub-Actions-Workflow manuell starten. Ihr Atmosphere-Konto bleibt Eigentümer des Paketprofils und der Release-Datensätze. GitHub identifiziert den genehmigten Workflow, und der Release-Dienst prüft den Build und schreibt den Release über eine enge Delegation. Das Repository speichert keine Atmosphere-Kontodaten.
Verwenden Sie emdash-plugin publish für einen Release, der von Ihrem Computer gestartet wird. Verwenden Sie diesen Leitfaden, wenn GitHub Actions Releases bauen und veröffentlichen soll.
Voraussetzungen
Bereiten Sie Folgendes vor dem Start vor:
- Ein öffentliches GitHub-Repository mit einem sandboxed EmDash-Plugin.
@emdash-cms/plugin-clials Entwicklungsabhängigkeit installiert. Mit der CLI erstellte Plugins enthalten es bereits.- Eine gültige
emdash-plugin.jsoncmitslug,publisher,license, einem Autor und einem Sicherheitskontakt. Setzen Sierepoauf die kanonische GitHub-URL, oder bestätigen Sie die erkannte GitHub-Remote während der interaktiven Einrichtung. - Eine Version in
package.jsonoder inemdash-plugin.jsoncfür ein nur im Registry vorhandenes Plugin. - Das durch
publisherbenannte Atmosphere-Konto. - Einen Browser, der Passkeys unterstützt. Die Release-Freigabe erfordert Benutzerverifizierung.
Führen Sie die Manifest-Prüfung aus, bevor Sie den Workflow konfigurieren:
pnpm exec emdash-plugin validate
Automatisierte Releases einrichten
-
Melden Sie sich bei der Plugin-CLI mit dem Atmosphere-Konto an, dem das Paket gehört.
pnpm exec emdash-plugin login alice.example.comDie CLI speichert diese lokale Veröffentlichungssitzung außerhalb des Projekts. GitHub Actions erhält sie nie.
-
Bereiten Sie das Paketprofil vor und generieren Sie den Workflow aus dem Plugin-Verzeichnis.
pnpm exec emdash-plugin release setupDer Befehl liest die Paketmetadaten aus
emdash-plugin.jsonc. Fehlt das Paketprofil, bietet er an, es zu erstellen. Existiert das Profil ohne Delegated-Release-Einstellungen, bietet er an, sie hinzuzufügen und die vorhandenen Paketmetadaten beizubehalten.In einem Monorepo führen Sie den Befehl im Plugin-Paket aus oder übergeben Sie
--dir <plugin-directory>. Enthält das Manifest keinrepo, erkennt Setup die GitHub-origin-Remote und füllt die Repository-Eingabeaufforderung vor.Setup fragt, wann ein Release eine Freigabe braucht:
- When plugin permissions increase ist die Standardeinstellung. Ein Release wartet auf Freigabe, wenn sein deklarierter Zugriff gegenüber dem neuesten Release erweitert wird.
- For every release erfordert eine Freigabe für jede Version.
Setup fragt auch, ob Releases überprüfbare Provenance benötigen. Require provenance ist die Standardeinstellung für automatisierte Releases. Wählen Sie Allow releases without provenance nur, wenn dasselbe Profil auch Releases akzeptieren muss, die direkt aus einer vertrauenswürdigen lokalen Umgebung veröffentlicht werden.
Das angemeldete Atmosphere-Konto wird zum ersten Genehmiger. Das Profil bindet das Paket an die kanonische GitHub-Repository-URL und speichert die gewählte Provenance-Richtlinie.
Führen Sie nur den Profilschritt aus, wenn bereits eine Workflow-Datei existiert:
pnpm exec emdash-plugin profile setupNach dem Veröffentlichen des Paketprofils zeigt dieser Befehl die manuellen und GitHub-Actions-Release-Befehle.
In einem nicht interaktiven Terminal übergeben Sie
--yes, um die Standardrichtlinien zu akzeptieren. Übergeben Sie--repository <https-url>, wenn weder Manifest noch Git-Remote das Repository liefern,--provenance optional, um Releases ohne Provenance zuzulassen, und--confirmation always, um für jeden Release eine Freigabe zu verlangen. -
Prüfen und committen Sie den generierten Workflow.
Der Befehl erstellt
.github/workflows/emdash-release.yml. Er pusht die Datei nicht und ersetzt einen vorhandenen Workflow nicht, es sei denn, Sie übergeben--force.Enthält das Repository
.changeset/config.json, bietet die interaktive Einrichtung Follow Changesets releases an. Wenn Changesets ein Paket mitemdash-plugin.jsoncveröffentlicht, veröffentlicht der wiederverwendbare EmDash-Workflow dieselbe Version. Verbinden Sie ihn wie unten beschrieben mit dem vorhandenen Changesets-Workflow. Andernfalls läuft der generierte Workflow für Paket-Tags, die<slug>@<version>entsprechen. Beide Varianten unterstützen manuelle Läufe und können explizit mit--trigger changesets|tags|manualausgewählt werden.Der Workflow gewährt jedem Job nur die erforderlichen
contents-,id-token- undattestations-Berechtigungen; pinnt Drittanbieter-Actions auf vollständige Commit-IDs; führt die genaue Plugin-CLI-Version aus, die die Datei generiert hat; löst jedes Paket aus seinem Manifest auf; baut ein Plugin-Bundle; erstellt GitHub-Build-Provenance für genau diese Bytes; und übergibt beide Dateien an die EmDash-Release-Action.Der Workflow liegt im Repository-Stamm und wird von jedem Plugin-Paket in diesem Repository gemeinsam genutzt. Das Ausführen von
release setupaus einem verschachtelten Paket schreibt.github/workflows/emdash-release.ymlweiterhin im Stamm. -
Öffnen Sie das Release-Service-Dashboard und melden Sie sich mit demselben Atmosphere-Konto an.
Wählen Sie Authorize publishing. Ihr Kontenanbieter zeigt die genaue delegierte Berechtigung. Die aufbewahrte Freigabe kann Paket-Release-Datensätze erstellen und Paket- oder Listing-Bild-Blobs hochladen. Sie kann keine Paketprofile erstellen oder bearbeiten, Releases aktualisieren oder löschen oder in eine andere Collection schreiben.
-
Starten Sie den Release-Workflow.
Mit Changesets mergen Sie den Versions-Pull-Request und lassen Sie dessen Publish-Job abschließen. Die Changesets-Action übergibt die von ihr veröffentlichten Pakete an den wiederverwendbaren EmDash-Workflow. Gewöhnliche npm-Pakete werden ignoriert; Pakete mit
emdash-plugin.jsoncveröffentlichen dieselbe Version bei EmDash.Mit dem Paket-Tag-Trigger aktualisieren Sie die Paketversion, bevor Sie den Versions-Tag erstellen. Die folgenden Befehle starten einen
1.2.3-Release:git tag gallery@1.2.3 git push origin gallery@1.2.3Sie können auch Run workflow auf der GitHub-Actions-Seite des Repositories auswählen.
-
Genehmigen Sie jeden Repository-Ref-Scope beim ersten Lauf.
Der Dienst prüft, dass das initiierende Paketprofil das GitHub-Repository benennt, bevor er eine Verbindungsanfrage erstellt. Die Action schreibt einen Link in die GitHub-Job-Zusammenfassung und wartet. Öffnen Sie den Link und bestätigen Sie Repository, Workflow-Datei, Branch oder Tag sowie Umgebung.
Für einen tag-ausgelösten Lauf wählen Sie All package version tags oder Only this tag. Ein manueller Lauf fordert die Freigabe beim ersten Gebrauch seines Branches an. Das Bestätigen eines weiteren Tag- oder Branch-Scopes fügt ihn der Repository-Verbindung hinzu, ohne vorhandene Scopes zu entfernen. Der Dienst speichert die GitHub-Repository- und Eigentümer-IDs sowie die genehmigten Refs und Umgebungen. Spätere Pakete nutzen diese Scopes nur wieder, wenn ihre signierten Profile dasselbe Repository benennen.
Von älteren generierten Workflows erstellte Paketfreigaben bleiben auf ihre ursprünglichen Pakete beschränkt. Das erste nicht übereinstimmende Paket oder Ref fordert eine Repository-Verbindung an; der Dienst erweitert eine vorhandene Paketfreigabe nicht automatisch.
-
Genehmigen Sie den Release, wenn erforderlich.
Ein Release, der Plugin-Berechtigungen erweitert, oder ein Profil, das für Freigabe bei jedem Release konfiguriert ist, wechselt in Awaiting approval. Öffnen Sie die Freigabe-URL aus der Action-Ausgabe oder dem Release-Dashboard. Registrieren Sie einen Passkey, falls das genehmigende Konto noch keinen hat, prüfen Sie die Berechtigungsänderung und genehmigen oder lehnen Sie den Release ab.
Die Standard-Action-Einstellung kehrt erfolgreich zurück, wenn der Release Awaiting approval erreicht. Der Service-Workflow wartet weiter auf die Browser-Entscheidung und veröffentlicht nach der Freigabe.
Einen Changesets-Workflow verbinden
Die generierte .github/workflows/emdash-release.yml akzeptiert das von der Changesets-Action veröffentlichte Paket-JSON über workflow_call. Fügen Sie dem vorhandenen Changesets-Job eine Ausgabe hinzu und rufen Sie den EmDash-Workflow dann aus einem abhängigen Job auf. Ersetzen Sie release und changesets, wenn der vorhandene Job oder Schritt eine andere ID verwendet.
Changesets Action v2 verwendet die Ausgabe published-packages. Fügen Sie die folgende Job-Ausgabe und den Caller zu einem Workflow hinzu, der Changesets CLI v3 verwendet:
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 verwendet die camel-case-Ausgabe publishedPackages des Schritts. Verwenden Sie diesen Ausdruck für einen Workflow mit 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
Lassen Sie Changesets für seinen Versions-Pull-Request und die Paketveröffentlichung verantwortlich. Der EmDash-Caller läuft nur, wenn Changesets published: true meldet. Für private nur-EmDash-Pakete setzen Sie sowohl privatePackages.version als auch privatePackages.tag in .changeset/config.json auf true. Fügen Sie unrelated private Anwendungen und Test-Fixtures zu ignore hinzu.
Ein weiteres Paket hinzufügen
Bereiten Sie das Paketprofil aus seinem Quellverzeichnis vor. Der vorhandene Root-Workflow und die Repository-Verbindung werden wiederverwendet:
pnpm exec emdash-plugin profile setup --dir packages/comments
Mit Changesets fügen Sie das Paket einem Changeset hinzu und mergen Sie seinen Versions-Pull-Request. Mit dem Paket-Tag-Trigger aktualisieren Sie die Paketversion und pushen Sie seinen Tag:
git tag comments@1.0.0
git push origin comments@1.0.0
Der Workflow löst comments zu einer emdash-plugin.jsonc auf, prüft die gewählte Version und verifiziert, dass das signierte Profil das verbundene Repository benennt, bevor Artefakt-Uploads akzeptiert werden. Doppelte Paket-IDs und Versionsabweichungen scheitern vor der Attestierung.
Was der Release-Dienst prüft
Der Dienst schließt diese Prüfungen ab, bevor er einen Release schreibt:
- Das GitHub-OpenID-Connect-(OIDC)-Token benennt ein autorisiertes Repository, einen Eigentümer, Workflow, Ref, Umgebung, Commit, Run und einen von GitHub gehosteten Runner.
- Das Paketprofil existiert, ist vom Publisher signiert, enthält Delegated-Release-Einstellungen und benennt dasselbe kanonische GitHub-Repository.
- Das angeforderte Paket und die Version stimmen mit dem gebauten Plugin-Bundle überein.
- Die Paket-Prüfsumme stimmt mit den hochgeladenen Bytes überein.
- Die GitHub-Provenance deckt dasselbe Bundle, Repository, denselben Workflow, Commit und Run ab.
- Der deklarierte Zugriff des Release-Datensatzes stimmt mit dem Bundle-Manifest überein.
- Der Versionsdatensatz existiert noch nicht.
- Jede erforderliche Passkey-Freigabe deckt das genaue Prüfergebnis und die aktuelle Profilrevision ab.
Die Action fordert für jeden Dienstaufruf ein frisches GitHub-OIDC-Token an. Bundle- und Provenance-Dateien gelangen erst nach Autorisierung des Workflows in privaten transienten Speicher. Der Dienst lädt geprüfte Paket- und Bild-Bytes auf den Personal Data Server (PDS) des Publishers hoch, erstellt dort den Release-Datensatz und stellt die geprüfte Provenance über eine unveränderliche, prüfsummenadressierte URL bereit.
Autoritätsgrenzen
Jede Anmeldedatenart hat eine Aufgabe:
| 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. |
Der Dienst speichert Publisher- und Genehmiger-Zustand getrennt. Die Anmeldung zum Anzeigen Ihrer Releases gewährt keinen Operatorzugriff, und eine Operatoridentität kann keinen Release als Publisher genehmigen.
Action-Verhalten
Der generierte Workflow verwendet die Action aus apps/release-action. Die Action akzeptiert entweder ein gebautes Bundle plus rohe Sigstore-Provenance oder eine Kompatibilitäts-release-file mit prüfsummengebundenen HTTPS-Artefaktquellen. Kombinieren Sie release-file nicht mit Bundle- oder Provenance-Eingaben.
Der standardmäßig generierte Workflow liefert diese Eingaben. Sie werden hier gezeigt, damit Sie die generierte Datei prüfen können, ohne ableiten zu müssen, was jeder Wert autorisiert:
| 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. |
Die Action liefert diese Ausgaben:
| 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. |
Siehe die Action-Referenz für optionale Eingaben, benutzerdefinierte URL-Quellen-Workflows, Polling-Steuerung und genaues Ausgabe-Verhalten.
Fehlerbehebung
PACKAGE_PROFILE_REQUIRED
Das Paketprofil fehlt, enthält keine Delegated-Release-Einstellungen, verwendet eine nicht kanonische Repository-URL oder benennt ein anderes Repository als der GitHub-Workflow.
Führen Sie die Profileinrichtung lokal mit dem Publisher-Konto aus und starten Sie den Workflow erneut:
pnpm exec emdash-plugin profile setup
Diese Prüfung läuft, bevor der Dienst Bundle- oder Provenance-Uploads akzeptiert.
Öffentliches Repository erforderlich
GitHub verwendet für private und interne Repositories eine private Sigstore-Vertrauenswurzel. Der Release-Verifier vertraut derzeit nur öffentlicher GitHub-Provenance. Verschieben Sie den Release-Workflow in ein öffentliches Repository oder veröffentlichen Sie lokal mit emdash-plugin publish.
WORKLOAD_NOT_ALLOWED
Das GitHub-Repository, der Eigentümer, die Workflow-Datei, der Ref oder die Umgebung stimmt nicht mit der genehmigten Workflow-Richtlinie überein. Öffnen Sie das Release-Dashboard und genehmigen Sie eine neue Workflow-Verbindung mit dem beabsichtigten Scope.
PROFILE_FETCH_FAILED
Der Dienst konnte das Profil vom PDS des Publishers nicht verifizieren. Versuchen Sie es erneut, nachdem der Kontenanbieter verfügbar ist. Führen Sie emdash-plugin profile setup aus, wenn das Profil entfernt oder geändert wurde.
POLL_TIMEOUT
Die Action hat timeout-minutes erreicht, bevor Workflow-Freigabe, Release-Freigabe oder Veröffentlichung abgeschlossen waren. Prüfen Sie im Release-Dashboard den Intent-Zustand, bevor Sie erneut ausführen. Ein erneuter Lauf desselben GitHub-Actions-Runs verwendet seinen Idempotenzschlüssel erneut.
Automatisierte Veröffentlichung widerrufen
Wählen Sie Turn off automated publishing im Release-Dashboard. Der Widerruf löscht die aufbewahrte Release-Delegation. Vorhandene Paketprofile, Releases, Moderationslabels, installierte Plugins und die Dashboard-Anmeldung ändern sich nicht.
Verbinden Sie die Veröffentlichung erneut und genehmigen Sie den Workflow erneut vor dem nächsten automatisierten Release.
Verwandte Dokumentation
- Bundling and publishing behandelt lokales Veröffentlichen und Bundle-Validierung.
- The plugin manifest definiert Paketmetadaten und deklarierten Zugriff.
- Capabilities and security erklärt die bei Release-Freigabe und Installation geprüften Berechtigungen.
- The plugin registry erklärt Discovery, Moderation und Installationsverifizierung.