Release-Workflows leicht gemacht mit Changesets
Das Veröffentlichen von npm-Paketen sollte keine benutzerdefinierten Skripte, manuellen Versionsaktualisierungen oder das Erinnern erfordern, welche Pakete sich seit Ihrer letzten Veröffentlichung geändert haben. Dennoch basteln viele Teams immer noch fragile Release-Prozesse zusammen, die zum ungünstigsten Zeitpunkt versagen.
Changesets löst dies, indem es die Release-Absicht zum Zeitpunkt des Beitrags erfasst und dann den Rest automatisiert. Dieser Artikel behandelt, wie Sie einen modernen Changesets-Release-Workflow aufbauen – einschließlich npm Trusted Publishing, Monorepo-Versionierung mit Changesets und GitHub Actions Package Releases – ohne die Wartungslast.
Wichtigste Erkenntnisse
- Changesets erfasst die Release-Absicht zum Zeitpunkt des Beitrags durch Markdown-Dateien, die betroffene Pakete und Semver-Bump-Typen spezifizieren
- npm Trusted Publishing mit OIDC-Tokens eliminiert langlebige Credentials und fügt Ihren Paketen kryptografische Herkunftsnachweise hinzu
- Monorepo-Versionierung wird durch Konfigurationsoptionen wie
linked,fixedundupdateInternalDependencieshandhabbar - Häufige CI-Fallstricke umfassen Berechtigungsprobleme, PR-Automatisierungskonflikte und vergessene Changesets
Der grundlegende Changesets-Release-Workflow
Der Workflow folgt drei Phasen:
- Mitwirkende fügen Changeset-Dateien hinzu, die beschreiben, was sich geändert hat und wie bedeutend es ist (patch, minor, major)
- CI erstellt einen Versionierungs-PR, der alle Changesets zu Versionserhöhungen und Changelog-Einträgen aggregiert
- Das Mergen des PR löst die Veröffentlichung auf npm mit ordnungsgemäßer Herkunftsnachweisführung aus
Jedes Changeset ist eine Markdown-Datei in .changeset/, die Frontmatter enthält, das betroffene Pakete und den Semver-Bump-Typ spezifiziert, plus eine menschenlesbare Zusammenfassung. Wenn mehrere Changesets existieren, berechnet Changesets die höchste notwendige Versionserhöhung pro Paket – zwei Minor-Änderungen werden nicht zu zwei Minor-Bumps.
Für Monorepos ist dies von erheblicher Bedeutung. Changesets behandelt automatisch interne Abhängigkeitsaktualisierungen, wenn ein Workspace-Paket von einem anderen abhängt, das veröffentlicht wird.
GitHub Actions Package Releases: Der moderne Ansatz
Die meisten Tutorials zeigen Workflows mit NPM_TOKEN-Secrets. Dieser Ansatz funktioniert, birgt aber Sicherheitsrisiken – langlebige Tokens können leaken und erfordern manuelle Rotation.
npm Trusted Publishing mit OIDC-Tokens ist jetzt die bevorzugte Methode. Anstatt Credentials zu speichern, fordert Ihr GitHub Actions Workflow während des Publish-Schritts direkt von npm einen kurzlebigen Token an. Der Token existiert nur für diesen Job und kann nicht extrahiert oder wiederverwendet werden.
Um dies zu aktivieren:
- Verknüpfen Sie Ihr npm-Paket mit Ihrem GitHub-Repository in den npm-Paketeinstellungen
- Konfigurieren Sie Ihren Workflow mit der Berechtigung
id-token: write - Stellen Sie sicher, dass Provenance aktiviert ist (npm kann es automatisch für vertrauenswürdige Publisher generieren oder über das Flag
--provenancebei neueren CLIs)
npm Provenance fügt eine kryptografische Attestierung hinzu, die beweist, dass das Paket aus einem bestimmten Commit in Ihrem Repository erstellt wurde. Benutzer können genau verifizieren, welcher Quellcode das veröffentlichte Artefakt produziert hat.
Aktuelle Einschränkungen, die Sie kennen sollten: npm Trusted Publishing erfordert öffentliche Repositories. Private Repos benötigen weiterhin den Legacy-Ansatz mit NPM_TOKEN. Zusätzlich hat die offizielle changesets/action eine sich entwickelnde Unterstützung für OIDC – prüfen Sie die aktuelle Dokumentation für die neuesten Integrationsmuster.
Discover how at OpenReplay.com.
Monorepo-Versionierung mit Changesets
Changesets wurde von Anfang an für Monorepos entwickelt. Wichtige Konfigurationsoptionen in .changeset/config.json steuern das Multi-Paket-Verhalten:
linked: Gruppiert Pakete, die immer die gleiche Versionsnummer teilen sollenfixed: Ähnlich wie linked, aber alle Pakete werden zusammen erhöht, auch wenn sich nur eines geändert hatupdateInternalDependencies: Steuert, ob abhängige Pakete Patch-Bumps erhalten, wenn ihre Abhängigkeiten aktualisiert werden
Wenn ein Mitwirkender die Changeset-CLI in einem Monorepo ausführt, wählt er aus, welche Pakete seine Änderung betrifft. Der Versionierungs-PR zeigt dann genau, welche Pakete in welchen Versionen veröffentlicht werden.
Häufige CI-Fallstricke
Berechtigungsprobleme verursachen die meisten Workflow-Fehler. Das GitHub-Token benötigt Schreibzugriff zum Erstellen von PRs und Pushen von Tags. Für npm-Publishing stellen Sie sicher, dass Ihr Token (oder Ihre OIDC-Konfiguration) Veröffentlichungsrechte für alle Pakete in Ihrem Scope hat.
PR-Automatisierungskonflikte treten auf, wenn Branch-Protection-Regeln den Bot daran hindern, Versions-Commits zu pushen. Erlauben Sie entweder dem GitHub Actions Bot, den Schutz zu umgehen, oder verwenden Sie ein dediziertes Bot-Konto mit entsprechenden Berechtigungen.
Multi-Paket-Veröffentlichungsreihenfolge ist wichtig, wenn Pakete voneinander abhängen. Changesets behandelt dies automatisch, aber Netzwerkfehler während der Veröffentlichung können Ihr Monorepo in einem inkonsistenten Zustand hinterlassen. Die changesets/action enthält Retry-Logik, aber das Verständnis dieses Fehlermodus hilft bei der Wiederherstellung.
Vergessene Changesets sind der häufigste Fehler von Mitwirkenden. Der Changeset-Bot kommentiert PRs, denen Changesets fehlen, aber Sie können auch CI-Checks hinzufügen, die fehlschlagen, wenn Changesets erforderlich, aber nicht vorhanden sind.
Strukturierung Ihres Workflows heute
Die meisten Teams führen die Changesets-Action bei jedem Push zu main aus. Die Action öffnet oder aktualisiert entweder einen “Version Packages”-PR, wenn unveröffentlichte Changesets existieren, oder veröffentlicht Pakete, wenn der Versions-PR gemergt wird.
Dies schafft einen natürlichen Release-Rhythmus: Mergen Sie Features während der Woche und mergen Sie dann den Versions-PR, wenn Sie bereit zum Ausliefern sind. Keine manuelle Versionsbearbeitung, kein Vergessen von Changelog-Updates, keine Veröffentlichung falscher Pakete.
Fazit
Ein gut konfigurierter Changesets-Release-Workflow entfernt den kognitiven Overhead von Paketveröffentlichungen. Mitwirkende deklarieren die Absicht im Voraus, CI übernimmt die Koordination, und npm Trusted Publishing gewährleistet sichere, verifizierbare Artefakte.
Beginnen Sie mit einem Single-Package-Setup, um den Ablauf zu verstehen, und erweitern Sie dann bei Bedarf auf Monorepos. Die anfängliche Konfigurationsinvestition zahlt sich schnell in reduzierter Release-Angst und weniger “Hoppla, falsche Version”-Momenten aus.
FAQs
Changesets funktioniert sowohl mit einzelnen Paketen als auch mit Monorepos gut. Für einzelne Pakete ist der Workflow einfacher, da Sie nur ein Paket verfolgen. Beginnen Sie mit einem Single-Package-Setup, um die Grundlagen zu lernen, und skalieren Sie dann bei Bedarf auf Monorepos. Der Kernworkflow des Hinzufügens von Changesets, Erstellens von Versions-PRs und Veröffentlichens bleibt unabhängig von der Paketanzahl gleich.
Der Changeset-Bot kommentiert automatisch Pull Requests, denen Changeset-Dateien fehlen. Sie können auch CI-Checks konfigurieren, die fehlschlagen, wenn Changesets erforderlich, aber nicht vorhanden sind. Dies verhindert, dass Änderungen ohne ordnungsgemäße Release-Dokumentation gemergt werden, obwohl Sie einige PRs als nicht changeset-erforderlich markieren können, z. B. für reine Dokumentationsaktualisierungen.
Wenn Sie ein Paket mit einem Major-Versions-Bump markieren, prüft Changesets, welche anderen Pakete davon abhängen. Die Konfigurationsoption updateInternalDependencies steuert, ob abhängige Pakete automatisch Patch-Bumps erhalten. Für eng gekoppelte Pakete verwenden Sie die Optionen linked oder fixed, um sicherzustellen, dass Versionsnummern über verwandte Pakete hinweg synchronisiert bleiben.
Nein, npm Trusted Publishing mit OIDC-Tokens erfordert derzeit öffentliche Repositories. Für private Repos müssen Sie den traditionellen NPM_TOKEN-Ansatz mit einem langlebigen Access-Token verwenden, der als Repository-Secret gespeichert wird. Halten Sie diese Tokens sicher und rotieren Sie sie regelmäßig, um Sicherheitsrisiken zu minimieren.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.