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 <cursoragent@cursor.com>
64 lines
1.5 KiB
Bash
Executable File
64 lines
1.5 KiB
Bash
Executable File
#!/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
|