Zum Inhalt springen

Changesets

pubm nutzt Changesets als dauerhafte Aufzeichnung dafür, was als Nächstes veröffentlicht werden soll. Statt Versionen aus Commit-Meldungen oder Branch-Namen abzuleiten, liest es versionierte Dateien aus .pubm/changesets/ und wandelt sie in Versionssprünge und Changelog-Einträge um.

  • ein prüfbarer Release-Plan in jedem Pull Request
  • eine deterministische Berechnung von Versionsspruengen über mehrere Pakete hinweg
  • Changelog-Inhalte, die vor dem Release-Tag geschrieben werden, nicht erst danach

Ausstehende Changesets liegen hier:

.pubm/changesets/

Initialisiere dieses Verzeichnis mit dem interaktiven Setup-Wizard:

Terminal-Fenster
pubm init

Während des Setups fragt pubm init, ob der Changesets-Workflow aktiviert werden soll. Bei Ja erstellt es das Verzeichnis .pubm/changesets/, erzeugt .github/workflows/changeset-check.yml für die PR-Durchsetzung und aktualisiert .gitignore, damit Changeset-Dateien nachverfolgt und andere .pubm/-Inhalte ignoriert werden.

Terminal-Fenster
pubm changesets add

In einem Monorepo fragt pubm auch ab, welche Pakete betroffen sind und welchen Versionssprung jedes Paket bekommen soll.

Für die nicht-interaktive Nutzung:

Terminal-Fenster
pubm changesets add \
--packages @acme/core,@acme/react \
--bump minor \
--message "Add token-based auth to the public client."
---
"@acme/core": minor
"@acme/react": patch
---
Add token-based auth to the public client.

Die Metadaten steuern die Versionsberechnung. Der Inhalt wird zur Changelog-Zusammenfassung.

Bevor du Changesets verarbeitest, solltest du sie prüfen:

Terminal-Fenster
pubm changesets status
pubm changesets status --verbose
pubm changesets version --dry-run

Wenn du die normale Release-Pipeline mit pubm startest, werden ausstehende Changesets während des Versionsschritts verarbeitet.

Der Ablauf sieht so aus:

  1. liest ausstehende .pubm/changesets/*.md-Dateien
  2. berechnet die resultierenden Paketversionen
  3. aktualisiert Manifest-Versionen
  4. erzeugt Changelog-Eintraege
  5. löscht verbrauchte Changeset-Dateien
  6. erstellt den Release-Commit und die Tags

Wenn du nur den Versionsschritt vorab ausführen möchtest, kannst du weiterhin dies laufen lassen:

Terminal-Fenster
pubm changesets version

Der Befehl ist für redaktionelle oder kontrollierte Workflows nützlich, aber nicht nötig vor pubm oder pubm --mode ci --phase publish.

Wenn du Changelog-Text erzeugen willst, ohne die Versionen schon zu verbrauchen:

Terminal-Fenster
pubm changesets changelog --dry-run
pubm changesets changelog --version 1.8.0

Wenn versionSources "all" ist (der Standard), fällt pubm changesets version automatisch auf Conventional Commits zurück, wenn ein Paket keine ausstehenden Changeset-Dateien hat. Dadurch können Teams Changesets schrittweise einführen: Pakete mit Changesets verwenden diese; Pakete ohne Changesets greifen auf die Commit-Historie zurück.

Commit-TypBump
featminor
fixpatch
perfpatch

Ein BREAKING CHANGE-Footer oder ein !-Suffix (z. B. feat!:) erzeugt immer einen major-Bump.

Überschreibe die Standard-Zuordnung in pubm.config.ts:

export default defineConfig({
versionSources: "all",
conventionalCommits: {
types: {
feat: "minor",
fix: "patch",
perf: "patch",
docs: "patch",
},
},
});

Setze versionSources: "commits", um nur Conventional Commits zu verwenden und Changeset-Dateien vollständig zu ignorieren. Setze versionSources: "changesets", um den Fallback zu deaktivieren und nur Changeset-Dateien zu verwenden.

Terminal-Fenster
pubm changesets migrate

Damit werden ausstehende Dateien von .changeset/ nach .pubm/ migriert.