ci(release): generate release notes from changelog
This commit is contained in:
82
scripts/atlas/generate-release-body.sh
Executable file
82
scripts/atlas/generate-release-body.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
CHANGELOG_FILE="$ROOT_DIR/CHANGELOG.md"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./scripts/atlas/generate-release-body.sh <version> <packaging-mode> [output-file]
|
||||
|
||||
Examples:
|
||||
./scripts/atlas/generate-release-body.sh 1.0.3 development
|
||||
./scripts/atlas/generate-release-body.sh 1.0.3 developer-id /tmp/RELEASE_BODY.md
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ $# -lt 2 || $# -gt 3 ]]; then
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION="$1"
|
||||
PACKAGING_MODE="$2"
|
||||
OUTPUT_FILE="${3:-$ROOT_DIR/RELEASE_BODY.md}"
|
||||
|
||||
if [[ ! -f "$CHANGELOG_FILE" ]]; then
|
||||
echo "Missing changelog: $CHANGELOG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$PACKAGING_MODE" != "development" && "$PACKAGING_MODE" != "developer-id" ]]; then
|
||||
echo "Unsupported packaging mode: $PACKAGING_MODE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
extract_changelog_section() {
|
||||
local version="$1"
|
||||
awk -v version="$version" '
|
||||
$0 ~ "^## \\[" version "\\] - " {
|
||||
printing = 1
|
||||
}
|
||||
printing {
|
||||
if ($0 ~ "^## \\[" version "\\] - ") {
|
||||
print "# Atlas for Mac " version
|
||||
print ""
|
||||
next
|
||||
}
|
||||
if ($0 ~ "^## \\[" && $0 !~ "^## \\[" version "\\] - ") {
|
||||
exit
|
||||
}
|
||||
print
|
||||
}
|
||||
' "$CHANGELOG_FILE"
|
||||
}
|
||||
|
||||
CHANGELOG_SECTION="$(extract_changelog_section "$VERSION")"
|
||||
|
||||
if [[ -z "${CHANGELOG_SECTION//[$'\n\r\t ']}" ]]; then
|
||||
{
|
||||
echo "# Atlas for Mac $VERSION"
|
||||
echo
|
||||
echo "Release notes for this version were not found in CHANGELOG.md."
|
||||
} > "$OUTPUT_FILE"
|
||||
else
|
||||
printf '%s\n' "$CHANGELOG_SECTION" > "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
{
|
||||
echo
|
||||
echo "## Packaging Status"
|
||||
echo
|
||||
if [[ "$PACKAGING_MODE" == "development" ]]; then
|
||||
echo "Native macOS assets in this tag were packaged in development mode because Developer ID release-signing credentials were not configured for this run."
|
||||
echo
|
||||
echo "These \`.zip\`, \`.dmg\`, and \`.pkg\` files are intended for internal testing or developer use. macOS Gatekeeper may require \`Open Anyway\` or a right-click \`Open\` flow before launch."
|
||||
else
|
||||
echo "Native macOS assets in this tag were packaged in CI using Developer ID signing and notarization, then uploaded alongside the existing command-line release artifacts."
|
||||
fi
|
||||
} >> "$OUTPUT_FILE"
|
||||
|
||||
printf 'Generated release body for %s (%s) at %s\n' "$VERSION" "$PACKAGING_MODE" "$OUTPUT_FILE"
|
||||
Reference in New Issue
Block a user