Der CHANGELOG-Header lautet ## v0.1.0 — 2026-05-28 (em-dash —, U+2014). Trotz (?:\s+.*)? matcht der Regex den Block nicht — vermutlich weil das Match an $\n direkt am Header-Ende stranded. Konsistente Beobachtung: Pre-Flight-Check „Changelog-Header" findet die Zeile (separate Regex), aber der Body-Extraktor liefert 0 Zeichen.
Reproduktion
ideenfabrik/idf-quest Release v0.1.0 (Build-Run #266). CHANGELOG.md Header wie oben.
Erwartet
Der Block ab ### Hinzugefügt bis zum nächsten ## v… oder EOF wird extrahiert und als Release-Body verwendet.
Fix-Vorschlag
Regex robust gegen alles in der Header-Zeile machen, z.B.:
**Symptom**
Beim Release `idf-quest v0.1.0` (2026-05-28) lief `release-plugin.yml@v1` zwar grün durch, aber im Workflow-Log stand:
```
Changelog-Block extrahiert (0 Zeichen).
```
Folge: das Gitea-Release wurde mit leerem Body angelegt.
**Ursache (vermutlich)**
Der Python-Regex im Step „Changelog-Block aus CHANGELOG.md extrahieren":
```python
pat = re.compile(
r"^##\s+v" + re.escape(version) + r"(?:\s+.*)?$\n(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
re.MULTILINE | re.DOTALL,
)
```
Der CHANGELOG-Header lautet `## v0.1.0 — 2026-05-28` (em-dash `—`, U+2014). Trotz `(?:\s+.*)?` matcht der Regex den Block nicht — vermutlich weil das Match an `$\n` direkt am Header-Ende stranded. Konsistente Beobachtung: Pre-Flight-Check „Changelog-Header" findet die Zeile (separate Regex), aber der Body-Extraktor liefert 0 Zeichen.
**Reproduktion**
`ideenfabrik/idf-quest` Release v0.1.0 (Build-Run #266). CHANGELOG.md Header wie oben.
**Erwartet**
Der Block ab `### Hinzugefügt` bis zum nächsten `## v…` oder EOF wird extrahiert und als Release-Body verwendet.
**Fix-Vorschlag**
Regex robust gegen alles in der Header-Zeile machen, z.B.:
```python
pat = re.compile(
r"^##\s+v" + re.escape(version) + r"[^\n]*\n+(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
re.MULTILINE | re.DOTALL,
)
```
(`[^\n]*\n+` statt `(?:\s+.*)?$\n` toleriert Trennzeichen und optionale Leerzeilen direkt nach dem Header.)
**Refs**
- Plugin: `ideenfabrik/idf-quest` v0.1.0
- Workflow-Run: https://git.ihre-ideenfabrik.de/ideenfabrik/idf-quest/actions/runs/266
- Release mit leerem Body: https://git.ihre-ideenfabrik.de/ideenfabrik/idf-quest/releases/tag/v0.1.0
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Symptom
Beim Release
idf-quest v0.1.0(2026-05-28) liefrelease-plugin.yml@v1zwar grün durch, aber im Workflow-Log stand:Folge: das Gitea-Release wurde mit leerem Body angelegt.
Ursache (vermutlich)
Der Python-Regex im Step „Changelog-Block aus CHANGELOG.md extrahieren":
Der CHANGELOG-Header lautet
## v0.1.0 — 2026-05-28(em-dash—, U+2014). Trotz(?:\s+.*)?matcht der Regex den Block nicht — vermutlich weil das Match an$\ndirekt am Header-Ende stranded. Konsistente Beobachtung: Pre-Flight-Check „Changelog-Header" findet die Zeile (separate Regex), aber der Body-Extraktor liefert 0 Zeichen.Reproduktion
ideenfabrik/idf-questRelease v0.1.0 (Build-Run #266). CHANGELOG.md Header wie oben.Erwartet
Der Block ab
### Hinzugefügtbis zum nächsten## v…oder EOF wird extrahiert und als Release-Body verwendet.Fix-Vorschlag
Regex robust gegen alles in der Header-Zeile machen, z.B.:
(
[^\n]*\n+statt(?:\s+.*)?$\ntoleriert Trennzeichen und optionale Leerzeilen direkt nach dem Header.)Refs
ideenfabrik/idf-questv0.1.0