From bad7c5c99a7694ac7051a59e636b2346651a3fad Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 30 Aug 2026 10:12:29 +0200 Subject: [PATCH] .github: unwrap ChangeLog paragraphs in release notes The ChangeLog is hard-wrapped at 72 columns, which the GitHub releases page renders verbatim as a ragged right edge. Join the continuation lines of each paragraph and list item, as already done in Infix, and let the browser do the wrapping. Signed-off-by: Joachim Wiberg --- .github/scripts/extract-changelog.sh | 29 ++++++++++++++++++++++++++++ .github/workflows/release.yml | 3 +-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100755 .github/scripts/extract-changelog.sh diff --git a/.github/scripts/extract-changelog.sh b/.github/scripts/extract-changelog.sh new file mode 100755 index 00000000..a5982039 --- /dev/null +++ b/.github/scripts/extract-changelog.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Extract the topmost release entry from doc/ChangeLog.md and unwrap +# its paragraphs, so the GitHub releases page can wrap them to the +# browser width instead of showing the hard 72-column breaks. +# +# Usage: .github/scripts/extract-changelog.sh < doc/ChangeLog.md > release.md +# +set -e + +# The entry sits between the first two underlines, minus the blank +# line separating it from the next heading. +awk '/^-----*$/{if (x == 1) exit; x=1;next}x' | head -n -1 | + +# Blank lines, headings, blockquotes, tables, and list items (at any +# indent) start a new block, everything else continues the current one. +awk ' +function flush() { if (buf) print buf; buf = "" } +{ + if (/^$/) { flush(); print; blank = 1; next } + if (/^ *([-*] |[0-9]+\. |[>#|])/ || blank || !buf || brk) + { flush(); buf = $0 } + else + { sub(/^ +/, ""); buf = buf " " $0 } + blank = 0 + brk = / $/ +} +END { flush() } +' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9b3063a2..328c6910 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,8 +69,7 @@ jobs: path: finit-*/_build/sub/test/*.log - name: Extract ChangeLog entry ... run: | - awk '/-----*/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \ - |head -n -1 > release.md + .github/scripts/extract-changelog.sh < doc/ChangeLog.md > release.md cat release.md - uses: ncipollo/release-action@v1 with: