Monorepo-Unterstützung
semrel unterstützt Repositories mit mehreren unabhängig versionierten Packages. Es gibt zwei Ansätze — wähle den, der zu deinem Workflow passt.
Option A — pro Package (Matrix)
Abschnitt betitelt „Option A — pro Package (Matrix)“Jedes Package hat seine eigene .semrel.yaml und wird von einem eigenen CI-Job oder Matrix-Step releast.
Ordnermy-monorepo/
Ordnerpackages/
Ordnerapi/
- .semrel.yaml
- go.mod
Ordnerui/
- .semrel.yaml
- package.json
Ordnerworker/
- .semrel.yaml
- go.mod
- .semrel.yaml Root-Konfiguration (optional, gemeinsame Basis)
Tagging-Konvention
Abschnitt betitelt „Tagging-Konvention“semrel präfigiert jeden Tag mit dem Package-Pfad, wenn tagPrefix den Pfad enthält:
packages/api@v1.4.0packages/ui@v3.2.0packages/worker@v0.9.1Per-Package-Konfiguration
Abschnitt betitelt „Per-Package-Konfiguration“schemaVersion: 1tagPrefix: "packages/api@v"branches: - name: mainplugins: - uses: @semrel/provider-githubReleases ausführen (CI-Matrix)
Abschnitt betitelt „Releases ausführen (CI-Matrix)“jobs: release: strategy: matrix: package: [packages/api, packages/ui, packages/worker] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Release ${{ matrix.package }} run: semrel release --config ./${{ matrix.package }}/.semrel.yaml env: SEMREL_PLUGIN_TOKEN: ${{ secrets.GITHUB_TOKEN }}Option B — Workspace (ein einziger Befehl)
Abschnitt betitelt „Option B — Workspace (ein einziger Befehl)“Alle Packages in der Root-.semrel.yaml konfigurieren und mit einem Befehl releasen. Packages werden in Abhängigkeitsreihenfolge releast; Packages ohne Neues werden automatisch übersprungen.
Root-Konfiguration
Abschnitt betitelt „Root-Konfiguration“schemaVersion: 1branches: - name: mainplugins: - uses: @semrel/provider-github # gemeinsames Plugin für alle Packages
workspace: strategy: independent # jedes Package bekommt sein eigenes Semver
# Option 1: explizite Liste mit optionaler Abhängigkeitsreihenfolge packages: - path: packages/api tagPrefix: "packages/api@v" - path: packages/ui tagPrefix: "packages/ui@v" dependsOn: [packages/api] # wird erst nach api releast - path: packages/worker tagPrefix: "packages/worker@v"
# Option 2: alle Package-Verzeichnisse automatisch entdecken # pattern: "packages/*"
fail_fast: false # Fehler sammeln (Standard: bei Fehler weitermachen)Jedes Package-Verzeichnis kann eine eigene .semrel.yaml haben, die die Root-Konfiguration überschreibt (branches, rules, plugins, tagPrefix).
Workspace-Unterbefehle
Abschnitt betitelt „Workspace-Unterbefehle“# Alle konfigurierten Packages auflistensemrel workspace list
# Vorschau (dry-run, keine Änderungen)semrel workspace release --dry-run
# Alle Packages in Abhängigkeitsreihenfolge releasensemrel workspace release
# Unabhängige Packages gleichzeitig releasensemrel workspace release --parallel
# Bei erstem Fehler sofort stoppensemrel workspace release --fail-fastAusgabe
Abschnitt betitelt „Ausgabe“[packages/api] releasing…Current version: v1.2.0 → v1.3.0 (minor)✓ Committed CHANGELOG.md ✓ Created tag packages/api@v1.3.0[packages/api] ✓ released
[packages/ui] releasing…No commits since last release — nothing to release.[packages/ui] – skipped (nothing to release)
[packages/worker] releasing…Current version: v0.8.0 → v0.9.0 (minor)[packages/worker] ✓ releasedCI-Beispiel
Abschnitt betitelt „CI-Beispiel“jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: semrel-Plugins wiederherstellen run: semrel plugin restore - name: Workspace releasen run: semrel workspace release env: SEMREL_PLUGIN_TOKEN: ${{ secrets.GITHUB_TOKEN }}release: stage: release script: - semrel plugin restore - semrel workspace release variables: SEMREL_PLUGIN_TOKEN: $CI_JOB_TOKENOption A vs. Option B
Abschnitt betitelt „Option A vs. Option B“| Merkmal | Option A (Matrix) | Option B (Workspace) |
|---|---|---|
| Config-Ort | Pro-Package .semrel.yaml | Root .semrel.yaml |
| CI-Jobs | Ein Job pro Package | Ein Job insgesamt |
| Abhängigkeitsreihenfolge | Manuell (Stage-Abhängigkeiten) | Automatisch (dependsOn) |
| Parallelisierung | Native CI-Parallelisierung | --parallel-Flag |
| Gemeinsame Plugins | Pro Package duplizieren | Einmalig auf Root-Ebene |
| Package-Isolation | Vollständig | Packages teilen Git-Repo-Kontext |