👷 Add Gitea release page to CI
The publish job now opens a Gitea release for the tag, using the matching Keep-a-Changelog section as the body via scripts/release-notes.sh. It runs before npm publish so a broken page fails CI without burning an npm version; npm publish stays the last step. Uses the first-party gitea-release-action (the older actions/release-action is deprecated and requires asset files) and contents: write for the run's automatic token.
This commit is contained in:
1 parent
7216c418d0
commit
a865b466bd
4 files changed
+85
-3
No files matched your search
Executable
+64
@@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
# Print the Keep-a-Changelog section for a release tag, so CI can use it as the
|
||||
# body of the Gitea release page without re-implementing CHANGELOG parsing.
|
||||
#
|
||||
# Run as `scripts/release-notes.sh <tag>`. A leading `v` is tolerated so both
|
||||
# `v1.2.3` and `1.2.3` match the `## [1.2.3]` heading. Prints to stdout and
|
||||
# exits non-zero when the tag has no section, so a release can never publish
|
||||
# with an empty body.
|
||||
|
||||
TAG="${1:-}"
|
||||
CHANGELOG="${CHANGELOG:-CHANGELOG.md}"
|
||||
|
||||
if [ -z "${TAG}" ]; then
|
||||
echo "Error: usage: $0 <tag>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${CHANGELOG}" ]; then
|
||||
echo "Error: ${CHANGELOG} not found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# `v1.2.3` and `1.2.3` are the same release; the heading only ever uses the
|
||||
# bare version.
|
||||
VERSION="${TAG#v}"
|
||||
|
||||
awk -v version="${VERSION}" '
|
||||
# A new section ends the one we are printing (or is the one we want).
|
||||
/^## \[/ {
|
||||
if (found) exit
|
||||
heading = $0
|
||||
sub(/^## \[/, "", heading)
|
||||
sub(/\].*$/, "", heading)
|
||||
if (heading == version) found = 1
|
||||
next
|
||||
}
|
||||
|
||||
# Link-reference definitions live at the bottom of the file and are never
|
||||
# part of the section body. Stopping here keeps the last release notes
|
||||
# from picking them up (there is no following heading to stop at).
|
||||
/^\[[^]]+\]:/ { exit }
|
||||
|
||||
found {
|
||||
if ($0 ~ /^[[:space:]]*$/) {
|
||||
# Buffer blank lines so trailing ones at the end of the section
|
||||
# are dropped instead of leaking into the release body.
|
||||
if (started) pending = pending $0 "\n"
|
||||
} else {
|
||||
printf "%s%s\n", pending, $0
|
||||
pending = ""
|
||||
started = 1
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
if (!found) {
|
||||
printf "Error: no CHANGELOG section for [%s].\n", version > "/dev/stderr"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
' "${CHANGELOG}"
|
||||
Reference in new issue
Block a user