Go-native v0.26.3 · Latest Apache 2.0 Open for Contributors

semrel

Semantic Releases. Fully Automated. Fully Open.

semrel ist die zero-dependency Alternative zu semantic-release: eine statische Go-Binärdatei, die Conventional Commits auswertet, SemVer berechnet und Releases automatisiert, reproduzierbar und supply-chain-gesichert ausliefert.

Kernversprechen & Neuerungen in v0.26.3

  • Kein Node.js, keine node_modules, kein Runtime-Overhead — eine einzige statische Go-Binärdatei.
  • Reproduzierbar & Air-Gap ready: .semrel.lock mit SHA256-Prüfsummen und semrel plugin restore ohne ausgehende Netzwerkzugriffe.
  • Supply-Chain Security by Default: Sigstore Cosign v3 (--bundle), CycloneDX/SPDX SBOM und SLSA Level 1 Provenance.
  • 8-stufige Pipeline (Condition, Analyzer, Generator, Updater, Packager, Publisher, Provider, Hook) inkl. Env-Var-Interpolation & Monorepo-Workspace.
Cosign v3 · SBOM · SLSA
30+ Plugins (.semrel.lock)
Monorepo Workspace
Air-Gap Ready
OpenSSF Scorecard
Enterprise Adopters

Warum semrel?

Release-Automation auf Enterprise-Level

Go-native, zero-dependency und für regulierte CI/CD-Umgebungen gebaut.

Warum semrel statt semantic-release oder reinem Packaging-Tooling?

  • Keine Node.js Runtime: eine statische Go-Binärdatei statt npm-Abhängigkeitsbaum.
  • Automatisches SemVer + Changelog aus Conventional Commits statt manueller Release-Entscheidungen.
  • Air-gap-fähig: Plugin-Cache ermöglicht Releases ohne ausgehende Netzwerkverbindungen.
  • Supply-chain Security by default mit Cosign, CycloneDX/SPDX SBOM und SLSA Provenance.
Core

Conventional Commits

Analysiert euren Commit-Verlauf und entscheidet automatisch ob ein major, minor oder patch-Bump nötig ist. Konfigurierbare Bump-Rules per .semrel.yaml.

Plugin System

Pluggable Pipeline

Jeder Schritt ist ein austauschbares Subprocess-Plugin. GitHub gegen GitLab tauschen, Changelog-Renderer wechseln oder Slack-Notifications — ohne Core zu ändern.

Workspace

Monorepo Ready

Mehrere unabhängige Module in einem Repository — jedes mit eigener Tag-Serie, Config und Changelog. Dependency Graph und topologische Release-Reihenfolge.

Ecosystem

Language Agnostic

Plugins kommunizieren via subprocess-Protokoll und können in Go, Python, Rust, Node.js oder jeder anderen Sprache geschrieben werden.

Security

Supply Chain Security

Signierte Releases mit Sigstore Cosign, CycloneDX/SPDX SBOM, SLSA Level 1 Provenance. DCO Sign-off und REUSE/SPDX Compliance auf jedem PR.

Safety

Dry-Run Mode

Vorschau was semrel tun würde, ohne etwas anzufassen. Ideal für CI-Validierung: semrel release --dry-run vor dem tatsächlichen Release.

Changelog

Multi-Format Changelog

Keep-a-Changelog Markdown, GitHub/GitLab Release Notes, ArtifactHub Annotations, OCI Labels, NuGet, PyPI, RSS/Atom — alles aus einem strukturierten ReleaseNotes-Modell.

Pipeline

8-Phase Pipeline (v0.18+)

Condition, Analyzer, Generator, Updater, Packager (.deb/.rpm via nfpm), Publisher (OCI/HTTP), Provider & Hook — vollständig modular steuerbar.

Reliability

Lockfile & Doctor (v0.21+)

Reproduzierbare Plugin-Versionen mit SHA256-Prüfsummen in .semrel.lock, automatisches semrel plugin restore und Pre-Flight-Checks per semrel doctor.

v0.26.3

Env-Config & Scopes (v0.26.3)

Umgebungsvariablen-Interpolation in .semrel.yaml, Scope-basierte Bump-Regeln, taglose Release-Metadaten-Auflösung und idempotente Docker-Tag-Retries.

CI/CD & DX

GitHub Actions & Schema

Native action.yml Composite Action, offizielles JSON Schema (registry.semrel.io) für VS Code / JetBrains Autocomplete und Self-Update via semrel update.

Insights

Release Analytics & Commitlint

Append-only NDJSON Release-History, Contributor-Metadaten für Plugins, Jira/GitHub Issue-Extraktion und semrel commitlint (--commit-msg-file, Range, stdin).

Plugin Ecosystem

30+ Plugins für jeden Stack

Installiert per semrel plugin install <name> — jedes Plugin lebt in eigenem Repository und released unabhängig.

Conditions

  • github-actions Nur auf GitHub Actions CI
  • gitlab-ci Nur auf GitLab CI
  • gitea-actions Nur auf Gitea Actions
  • generic Generische CI-Umgebung

Analyzers

  • conventional Conventional Commits Parser
  • default Standard Commit Analyzer

Generators

  • changelog-md Markdown (Keep a Changelog)
  • changelog-html HTML Changelog
  • release-notes Release Notes Generator

Providers

  • github GitHub Releases & Tags
  • gitlab GitLab Releases & Tags
  • gitea Gitea / Forgejo
  • bitbucket Bitbucket
  • git Nur lokale Git-Tags

Updaters

  • npm package.json Version
  • docker Docker Images bauen & pushen
  • helm Helm Chart Version
  • cargo Rust / Cargo Crate
  • python PyPI Package
  • gradle Gradle Version
  • maven Maven Artifact
  • nuget NuGet Package
  • gobinary Go Version Variable
  • homebrew Homebrew Formula
  • terraform Terraform Module Version

Packagers

  • nfpm .deb / .rpm Paketierung

Publishers

  • oci OCI Registry Publishing
  • generic-http HTTP Upload Targets

Hooks

  • slack Slack Notifications
  • teams Microsoft Teams
  • matrix Matrix / Element
  • email E-Mail Benachrichtigungen
  • jira Jira Issues schließen
  • gitplugin Git-Operationen post-release

Quick Start

In 5 Minuten zum ersten Release

Empfohlen: zuerst mit --dry-run validieren, danach produktiv releasen.

1 Installieren
terminal
go install github.com/SemRels/semrel/cmd/semrel@latest
semrel --version

# Konfiguration initialisieren (inkl. JSON-Schema)
semrel config init

# Plugins installieren & in .semrel.lock pinnen
semrel plugin install @semrel/conventional
semrel plugin install @semrel/github
semrel plugin install @semrel/npm
semrel plugin restore
2 Konfigurieren (.semrel.yaml)
.semrel.yaml
# yaml-language-server: $schema=https://registry.semrel.io/schemas/core/v1.json
branches:
  - name: main
  - name: next
    prerelease: true

commit_changelog: false

plugins:
  - uses: "@semrel/conventional" # Analyzer
  - uses: "@semrel/changelog-md" # Generator
  - uses: "@semrel/npm"          # Updater
  - uses: "@semrel/nfpm"         # Packager (optional)
  - uses: "@semrel/oci"          # Publisher (optional)
  - uses: "@semrel/github"       # Provider
  - uses: "@semrel/slack"        # Hook
    args:
      channel: "${RELEASE_CHANNEL:-#releases}"
3 Releasen
terminal
# Pre-Flight Check (Config, Plugins, Git-Status & Tokens)
semrel doctor

# Commit-Messages validieren (Range, Datei oder Stdin)
semrel commitlint --commit-msg-file .git/COMMIT_EDITMSG
semrel lint

# Erst Dry-Run — kein Tag, kein Release, volle Vorschau
semrel release --dry-run

# Vollständiger Release-Durchlauf (oder Monorepo: semrel workspace)
semrel release

Roadmap

Der Weg zu v1.0.0

semrel entwickelt sich kontinuierlich weiter. Fokus: Stabilität, Ecosystem-Ausbau und Enterprise-Readiness.

  1. v0.1 – v0.10 Zero-Dependency Core & Plugin Runtime shipped

    Statische Go-Binärdatei ohne Node.js-Abhängigkeiten, Subprocess-Plugin-Runtime und semrel doctor Empfehlungen.

  2. v0.11 – v0.13 Lockfile (.semrel.lock), Air-Gap & Monorepo Workspace shipped

    Reproduzierbare Plugin-Installationen mit SHA256-Prüfsummen, Air-Gap-Restore und Monorepo-Orchestrierung via semrel workspace.

  3. v0.14 – v0.18 8-Phase Pluggable Pipeline shipped

    Neue Generator-, Packager- und Publisher-Phasen plus semrel plugin update & restore Commands.

  4. v0.19 – v0.24 Scope-Versioning, Registry Analytics & Contributor Metadata shipped

    Scope-basierte Release-Regeln, Download-Tracking in der Registry, optimierte GitHub Actions Defaults und Contributor-Metadaten für Plugins.

  5. v0.25 – v0.26.3 Cosign v3 Bundle, Env-Interpolation & Tagless CI shipped

    Sigstore Cosign v3 (--bundle) Signierung, Env-Var-Interpolation in .semrel.yaml, --commit-msg-file für commitlint, taglose Release-Auflösung und idempotente Docker-Retries.

  6. v0.27+ Ecosystem & Enterprise Adopter Expansion in progress

    Ausbau des 30+ Plugin-Ökosystems, tiefere Enterprise-CI/CD-Integrationen und Onboarding weiterer Production Adopters.

  7. v1.0.0 v1.0 Stabilization & Long-Term Guarantees planned

    Langfristige API-, Plugin-Protokoll- und JSON-Schema-v1-Stabilitätsgarantien für kritische Enterprise-Infrastrukturen.

Mitmachen

Gesucht: Contributors!

semrel ist ein Community-Projekt von Markus Waldheim und Thomas Boerger — offen für alle, die mitmachen möchten, egal ob Go-Profi oder Einsteiger.

Plugins entwickeln

Schreibt neue Provider, Updater oder Hooks für eure bevorzugten Tools. Plugins sprechen ein einfaches subprocess-Protokoll und können in jeder Sprache implementiert werden.

Plugin Dev Guide

Bugs finden & fixen

Probiert semrel in euren Projekten aus und meldet Bugs. Gute Einstiegs-Issues sind gelabelt und neuen Contributoren wird beim ersten PR geholfen.

Issues ansehen

Dokumentation verbessern

Docs, Tutorials, Beispiel-Configs oder deutsche Übersetzungen — gute Dokumentation ist genauso wichtig wie Code.

Docs Repository

Monorepo & Workspace

Verbessert Workspace-Flows, Dependency-Graph-Releases und reale Enterprise-Monorepo-Szenarien.

Roadmap

Testing & CI

E2E-Tests schreiben, Edge Cases abdecken, CI-Workflows für neue Plattformen hinzufügen — jeder Beitrag bringt semrel näher an Produktionsreife.

Contributing Guide

Community & Feedback

Nutzt semrel in eurem Projekt und teilt euer Feedback. Zeigt, was ihr gebaut habt — Showcases und Use Cases sind herzlich willkommen.

GitHub Discussions

Owner & Maintainer

Markus Waldheim

Owner, Creator & Maintainer

@mwaldheim

Thomas Boerger

Owner, Creator & Maintainer

@tboerger

semrel ist ein offenes Community-Projekt unter Apache 2.0. Alle Contributions werden mit DCO Sign-off und Conventional Commits gerne angenommen.