Automatisierte Release-Notes: Release-Drafter-Äquivalent für Gitea Actions prüfen #46
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Worum es geht
Release-Notes entstehen heute von Hand:
wikitool version bumplegt das Heading an, die Prosa schreibt der Autor,version notesschneidet den Eintrag fürrelease.ymlheraus. Das funktioniert und soll vorerst so bleiben. Dieses Issue hält nur die Frage fest, ob es sich automatisieren lässt — und unter welcher Bedingung sie überhaupt beantwortet werden muss.Der Auslöser
Dieses Issue wird bearbeitbar, sobald PRs in diesem Repo eingeführt sind. Vorher nicht, und das ist keine Formalie: die einzige bekannte Bauform (GitHub Release Drafter) zieht ihre Notizen aus gemergten Pull Requests. Ohne PRs gibt es keine Quelle, aus der ein Drafter etwas ziehen könnte.
Der Stand dazu, entschieden 2026-09-02: PRs werden nicht grundsätzlich eingeführt, sondern erst, wenn sie CI/CD-seitig einen echten Vorteil bringen. Automatisierte Release-Notes sind genau so ein möglicher Vorteil — und damit ist die Abhängigkeit zirkulär, wenn man sie falsch herum liest. Die Auflösung: die PR-Frage wird an anderen Kriterien entschieden, und dieses Issue ist eines der Argumente, die dann auf dem Tisch liegen. Es treibt die Entscheidung nicht, es wartet auf sie.
Bis dahin bleibt der direkte
tools/wikitool publish-Workflow unverändert (AGENTS.md Invariante 5).Zu klären, wenn der Auslöser gefeuert hat
release-drafter/release-drafterist eine JavaScript-Action;act_runnerführt solche aus (actions/checkout@v7läuft hier), aber die Action spricht die GitHub-API in Details, die Gitea nicht zwingend deckt. Ungeprüft.version notesschneidet den Changelog-Eintrag bereits mechanisch heraus, undrelease.ymlverarbeitet ihn schon. Ein Skript, das PR-Titel gegenCHANGES.mdhält, wäre möglicherweise weniger Fläche als eine fremde Action.CHANGES.mdist die kuratierte Fassung; PR-Titel sind Rohmaterial. Ein Drafter, der den Changelog ersetzt, ist nicht gewollt — allenfalls einer, der ihn vorschlägt.Berührungspunkt mit #42
#42 stellt das Versionsmodell auf einen laufenden Kandidaten mit
-beta.num und führt einen explizitenversion release-Vorgang ein. Danach gibt es erstmals einen klar benannten Zeitpunkt, an dem Release-Notes fällig sind — vorher war jeder Bump potenziell ein Release. Das macht eine Automatisierung eher leichter, ist aber keine Abhängigkeit in beide Richtungen: #42 wartet nicht auf dieses Issue.Akzeptanzkriterien
release.ymlangepasst,tools/CONTRACT.mdundCHANGES.md-Kopf nachgezogenVorgeschichte
Ausgegliedert aus #42 am 2026-09-03. Dort stand die Frage als offener Punkt und später als bewusst zurückgestellter Nicht-Umfang; sie hängt an einem anderen Auslöser als #42 selbst und blockiert dessen Umsetzung nicht.
Recherche-Spike (Auslöser noch nicht gefeuert, PRs weiterhin offen)
Da der Auslöser laut Issue nicht an eine Ja/Nein-Entscheidung, sondern an den tatsächlichen Bedarf für PRs gekoppelt ist, hier die technische Vorabklärung für beide Zweige (mit PRs / ohne PRs).
Quellen
GET /repos/{owner}/{repo}/pulls)Befund
release-drafter/release-drafterläuft nicht unter Gitea. Die Action spricht die GitHub-REST/GraphQL-API fest an; selbst mitGHE_HOST-Override bleibt die Release-API zwischen Gitea und GitHub inkompatibel. Die Gitea-Community verweist deshalb grundsätzlich auf eigene Actions statt auf GitHub-Release-Actions.ChristianSch/gitea-release-drafter, ab Version 1.19.0 kompatibel). Es deckt nur einen Ausschnitt des Original-Featuresets ab:name-template,tag-template, ein einfacherversion-resolverüber PR-Labels (major/minor/patch). Eine Kategorisierung wie beim Original (Features/Fixes/Docs als Abschnitte) ist dort nicht dokumentiert. Wartungsstand ist dünn (1 Star, letzte sichtbare Aktivität am Ursprungsrepo 2023, Mirror-Sync 2025) — Wartungsrisiko für Produktivbetrieb.pull_request-Events unterstützen die Activity-Typesopened, edited, closed, reopened, assigned, unassigned, synchronize, labeled, unlabeled; der Event-Payload liefert Titel, Body, Labels, Autor undmerged-Flag direkt als Kontextvariablen (gitea.event.pull_request.*), ohne zusätzlichen API-Call. Alternativ liefertGET /repos/{owner}/{repo}/pulls?state=closed&sort=recentclosedieselben Daten nachgelagert.contents: write(Release anlegen/ändern) undpull-requests: read(Metadaten lesen). Gitea Actions kennt dieselben granularen Scopes und clampt sie auf ein konfigurierbares Maximum pro Repo.Optionen
release-drafter/release-draftergitea-release-drafter(Fremd-Action, Gitea-nativ)CHANGES.md/version notes/release.ymlzuschneidbarEinschätzung
Solange PRs nicht eingeführt sind, ändert der Spike nichts an der Grundentscheidung: von Hand bleibt richtig. Für den Fall, dass PRs kommen: eigenes schlankes Skript vor
gitea-release-drafter. Der Fremd-Fork ist funktional dünner und schwächer gepflegt, spart aber keine Integrationsarbeit — die Anbindung anCHANGES.md/version notes/release.ymlfällt in beiden Fällen an. Ein eigenes Skript hat dafür keine Fremdabhängigkeit und lässt sich exakt auf den bestehenden-beta.n-Versionsprozess (#42) zuschneiden. Die GitHub-Originalaction ist keine Option.Offene Fragen
gitea.event.pull_request-Payload aus demclosed-Trigger, oder soll zusätzlich über die PR-API rückwirkend aggregiert werden (z. B. bei nachträglichen Label-Änderungen)?