Add consumer-facing CHANGELOG.md maintained by release CI.
PR Title Check / check-title (pull_request) Successful in 8s
Test Python Package / unit-tests (pull_request) Successful in 12s
Code Quality Pipeline / code-quality (pull_request) Failing after 23s
Test Python Package / integration-tests (pull_request) Successful in 45s
Test Python Package / coverage-report (pull_request) Successful in 11s
PR Title Check / check-title (pull_request) Successful in 8s
Test Python Package / unit-tests (pull_request) Successful in 12s
Code Quality Pipeline / code-quality (pull_request) Failing after 23s
Test Python Package / integration-tests (pull_request) Successful in 45s
Test Python Package / coverage-report (pull_request) Successful in 11s
Backfill version history from git tags and update CHANGELOG automatically on each release alongside Gitea release notes. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
co-authored by
Cursor
parent
683ee332d3
commit
0a5bd39801
Executable
+63
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# shellcheck source=common.sh
|
||||
source "${SCRIPT_DIR}/common.sh"
|
||||
|
||||
VERSION="${1:-}"
|
||||
SUMMARY="${2:-}"
|
||||
PREV_TAG="${3:-}"
|
||||
DATE="${4:-$(date -u +%Y-%m-%d)}"
|
||||
CHANGELOG="CHANGELOG.md"
|
||||
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
echo "Usage: update-changelog.sh <version> <summary> <prev-tag> [date]" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f "$CHANGELOG" ]] && grep -qF "## [${VERSION}]" "$CHANGELOG"; then
|
||||
echo "CHANGELOG already contains version ${VERSION}; skipping." >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ -n "$SUMMARY" ]]; then
|
||||
SUMMARY_TEXT=$(strip_bump_prefix "$SUMMARY")
|
||||
else
|
||||
SUMMARY_TEXT="Automated release v${VERSION}."
|
||||
fi
|
||||
|
||||
COMMITS=$(commits_since "$PREV_TAG")
|
||||
SECTION=$(changelog_section "$VERSION" "$DATE" "$SUMMARY_TEXT" "$COMMITS")
|
||||
|
||||
if [[ ! -f "$CHANGELOG" ]]; then
|
||||
changelog_header > "$CHANGELOG"
|
||||
printf '\n%s\n' "$SECTION" >> "$CHANGELOG"
|
||||
else
|
||||
UNRELEASED_MARKER='## [Unreleased]'
|
||||
if ! grep -qF "$UNRELEASED_MARKER" "$CHANGELOG"; then
|
||||
echo "CHANGELOG.md exists but is missing ${UNRELEASED_MARKER}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TMP=$(mktemp)
|
||||
SECTION_FILE=$(mktemp)
|
||||
printf '%s\n' "$SECTION" > "$SECTION_FILE"
|
||||
|
||||
awk -v section_file="$SECTION_FILE" '
|
||||
/^## \[Unreleased\]/ {
|
||||
print
|
||||
print ""
|
||||
while ((getline line < section_file) > 0) {
|
||||
print line
|
||||
}
|
||||
close(section_file)
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "$CHANGELOG" > "$TMP"
|
||||
rm -f "$SECTION_FILE"
|
||||
mv "$TMP" "$CHANGELOG"
|
||||
fi
|
||||
|
||||
echo "Updated ${CHANGELOG} with version ${VERSION}." >&2
|
||||
Reference in New Issue
Block a user