ci(release): don't let an empty changelog section abort the release (bash -e)
The changelog step runs under 'bash -e'. section() returned non-zero when a commit category was empty (grep no-match / empty [ -n ] test), aborting the script before the closing heredoc delimiter — so any release whose range lacked a whole category (e.g. 1.5.2: only feat, no fix) failed to attach binaries. Add '|| true' + 'return 0' so section() always succeeds.
This commit is contained in:
@@ -152,9 +152,16 @@ jobs:
|
|||||||
# Group commit subjects by conventional-commit type so the notes are
|
# Group commit subjects by conventional-commit type so the notes are
|
||||||
# scannable ("what's new / what's fixed") instead of a flat dev log.
|
# scannable ("what's new / what's fixed") instead of a flat dev log.
|
||||||
LOG="$(git log "$RANGE" --no-merges --pretty='%s' | grep -v '^chore(release)' || true)"
|
LOG="$(git log "$RANGE" --no-merges --pretty='%s' | grep -v '^chore(release)' || true)"
|
||||||
|
# NOTE: the job runs under `bash -e`. grep returning 1 (no match) and
|
||||||
|
# the `[ -n "$body" ]` test returning 1 (empty section) must NOT abort
|
||||||
|
# the script — otherwise a release whose commit range lacks a whole
|
||||||
|
# category (e.g. only `feat`, no `fix`) dies before writing the closing
|
||||||
|
# heredoc delimiter and the whole release step fails. `|| true` +
|
||||||
|
# `return 0` keep section() always-succeeding.
|
||||||
section() { # $1=header $2=grep-pattern
|
section() { # $1=header $2=grep-pattern
|
||||||
local body; body="$(printf '%s\n' "$LOG" | grep -E "$2" | sed 's/^/- /')"
|
local body; body="$(printf '%s\n' "$LOG" | grep -E "$2" | sed 's/^/- /' || true)"
|
||||||
[ -n "$body" ] && { printf '\n### %s\n%s\n' "$1" "$body"; }
|
[ -n "$body" ] && printf '\n### %s\n%s\n' "$1" "$body"
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
echo "notes<<__NOTES_EOF__"
|
echo "notes<<__NOTES_EOF__"
|
||||||
|
|||||||
Reference in New Issue
Block a user