fix: awk-Range-Pattern liefert immer leeren Release-Body (jeder Forgejo-Release betroffen) #1

Open
opened 2026-06-01 23:46:37 +02:00 by holm · 0 comments
Owner
Dimension Bewertung Einschätzung
Aufwand ██░░░░░░░░ Niedrig — awk-Pattern in einer Zeile fixen
Nutzen █████████░ Sehr hoch — Release-Body ist das, was Anwender im Forgejo-Release-View lesen
Bruchhäufigkeit ██████████ Maximal — jeder Release ist betroffen, immer
Nachhaltigkeit █████████░ Sehr hoch — einmal gefixt, dauerhaft sauber
Dringlichkeit ███████░░░ Hoch — jeder weitere Release leidet darunter

Problem

release.sh Zeile 56 (vor dem Forgejo-Release-POST):

notes="$(awk "/^## \\[${next#v}\\]/,/^## \\[/" CHANGELOG.md | sed '$d')"

Der awk-Range-Operator /start/,/end/ matched inklusive Start- und End-Zeile. Die Start-Zeile ist ## [0.1.0] – 2026-06-01, die End-Pattern ist ^## \[ — beide Patterns matchen dieselbe Zeile (die Start-Zeile). awk gibt also nur diese eine Zeile aus, sed '$d' löscht sie wieder → notes ist leer.

Konsequenz: Jeder Forgejo-Release-Eintrag wird mit leerem Body angelegt (HTTP 200, aber body_len: 0). Anwender, die auf den Release-View gehen, sehen nur den Tag-Namen, keine Changelog-Notes.

Reproduktion

In jedem Repo mit CHANGELOG.md:

next="v0.1.0"
awk "/^## \\[${next#v}\\]/,/^## \\[/" CHANGELOG.md
# → liefert nur die erste Zeile, nicht die ganze Sektion

Fix-Vorschlag

awk mit Flag-Variable statt Range:

notes="$(awk -v ver="${next#v}" '
  $0 ~ "^## \\["ver"\\]" {flag=1; next}
  /^## \[/                 {flag=0}
  /^<!-- generated/        {flag=0}
  flag
' CHANGELOG.md)"
  • Startet das Sammeln nach der Versions-Header-Zeile (next skipt sie)
  • Stoppt bei nächster Versions-Header-Zeile ODER beim git-cliff-Footer
  • Keine Inklusiv-Falle, kein nachträgliches sed '$d' mehr nötig

Acceptance

  • Test in einem Repo mit CHANGELOG: notes enthält die komplette Section minus den Header
  • Forgejo-Release-Body nach API-POST: body_len > 0, enthält die Listen-Einträge
  • Verifiziert mit z.B. holm.tools.secret/mikrotik-captive-demo v0.1.0 (manuell via PATCH gefixt am 2026-06-01)

Hinweis zum Forgejo-is_empty-Quirk

Beim Erst-Release in einem mit auto_init=false angelegten Repo schlägt der Release-POST mit HTTP 422 „repo is empty" fehl (is_empty-Quirk-Memory — Workaround: Repo einmal in Web-UI öffnen oder Template-Repo verwenden). Dieser Bug ist separat vom awk-Bug, aber tritt oft zusammen auf, weil der erste Release häufig der erste API-Call ist.

| Dimension | Bewertung | Einschätzung | |---|---|---| | Aufwand | `██░░░░░░░░` | Niedrig — awk-Pattern in einer Zeile fixen | | Nutzen | `█████████░` | Sehr hoch — Release-Body ist das, was Anwender im Forgejo-Release-View lesen | | Bruchhäufigkeit | `██████████` | Maximal — jeder Release ist betroffen, immer | | Nachhaltigkeit | `█████████░` | Sehr hoch — einmal gefixt, dauerhaft sauber | | Dringlichkeit | `███████░░░` | Hoch — jeder weitere Release leidet darunter | ## Problem `release.sh` Zeile 56 (vor dem Forgejo-Release-POST): ```bash notes="$(awk "/^## \\[${next#v}\\]/,/^## \\[/" CHANGELOG.md | sed '$d')" ``` Der awk-Range-Operator `/start/,/end/` matched **inklusive Start- und End-Zeile**. Die Start-Zeile ist `## [0.1.0] – 2026-06-01`, die End-Pattern ist `^## \[` — beide Patterns matchen **dieselbe Zeile** (die Start-Zeile). awk gibt also nur diese eine Zeile aus, `sed '$d'` löscht sie wieder → `notes` ist leer. **Konsequenz:** Jeder Forgejo-Release-Eintrag wird mit leerem Body angelegt (HTTP 200, aber `body_len: 0`). Anwender, die auf den Release-View gehen, sehen nur den Tag-Namen, keine Changelog-Notes. ## Reproduktion In jedem Repo mit CHANGELOG.md: ```bash next="v0.1.0" awk "/^## \\[${next#v}\\]/,/^## \\[/" CHANGELOG.md # → liefert nur die erste Zeile, nicht die ganze Sektion ``` ## Fix-Vorschlag `awk` mit Flag-Variable statt Range: ```bash notes="$(awk -v ver="${next#v}" ' $0 ~ "^## \\["ver"\\]" {flag=1; next} /^## \[/ {flag=0} /^<!-- generated/ {flag=0} flag ' CHANGELOG.md)" ``` - Startet das Sammeln **nach** der Versions-Header-Zeile (`next` skipt sie) - Stoppt bei nächster Versions-Header-Zeile ODER beim git-cliff-Footer - Keine Inklusiv-Falle, kein nachträgliches `sed '$d'` mehr nötig ## Acceptance - Test in einem Repo mit CHANGELOG: `notes` enthält die komplette Section minus den Header - Forgejo-Release-Body nach API-POST: `body_len > 0`, enthält die Listen-Einträge - Verifiziert mit z.B. `holm.tools.secret/mikrotik-captive-demo` v0.1.0 (manuell via PATCH gefixt am 2026-06-01) ## Hinweis zum Forgejo-`is_empty`-Quirk Beim Erst-Release in einem mit `auto_init=false` angelegten Repo schlägt der Release-POST mit HTTP 422 „repo is empty" fehl ([is_empty-Quirk-Memory](https://forgejo.mueller.network/) — Workaround: Repo einmal in Web-UI öffnen oder Template-Repo verwenden). Dieser Bug ist **separat** vom awk-Bug, aber tritt oft zusammen auf, weil der erste Release häufig der erste API-Call ist.
Sign in to join this conversation.
No description provided.