Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Adds script to build release notes draft

AuthorDaveJarvis <email>
Date2025-08-27 19:38:27 GMT-0700
Commitb6117099c3384ae49561827ffaf94ff5f76b7bfa
Parent483d900
Delta68 lines added, 0 lines removed, 68-line increase
notes.sh
+#!/usr/bin/env bash
+release_notes() {
+ if [ -z "$1" ]; then
+ echo "Error: Provide a starting tag." >&2
+ return 1
+ fi
+ readonly TAG_BEGAN=$1
+ readonly TAG_ENDED=${2:-$(git describe --abbrev=0 --tags)}
+ readonly REPO_URL="https://repo.autonoma.ca/keenwrite.git"
+ readonly CURRENT_DATE=$(date +"%B %d, %Y")
+
+ if [ -z "$TAG_ENDED" ]; then
+ echo "Error: Could not determine end tag." >&2
+ return 1
+ fi
+
+ # Get all tags between the two specified tags (inclusive of end, exclusive of start)
+ local tags_between
+ tags_between=$(git tag --sort=-version:refname --merged="$TAG_ENDED" | \
+ awk "/$TAG_ENDED/{found=1; print} found && /$TAG_BEGAN/{exit} found")
+
+ cat << EOF
+# Release Notes
+
+$CURRENT_DATE
+
+Changes between $TAG_BEGAN and $TAG_ENDED.
+
+EOF
+
+ # If no intermediate tags, show all changes as one section
+ if [ -z "$tags_between" ]; then
+ local commits
+ commits=$(git log --pretty=format:'* [%h]('$REPO_URL'/commit/%H) -- %s' --reverse "$TAG_BEGAN".."$TAG_ENDED")
+ if [ -n "$commits" ]; then
+ echo "## $TAG_ENDED"
+ echo
+ echo "$commits"
+ echo
+ fi
+ return 0
+ fi
+
+ # Process each version section (newest first)
+ local next_tag="$TAG_ENDED"
+
+ # Add the starting tag to the list to ensure we capture everything
+ tags_between=$(echo -e "$tags_between\n$TAG_BEGAN")
+
+ while IFS= read -r current_tag; do
+ [ -z "$current_tag" ] && continue
+
+ # Get commits between current_tag and next_tag
+ local commits
+ commits=$(git log --pretty=format:'* [%h]('$REPO_URL'/commit/%H) -- %s' --reverse "$current_tag".."$next_tag")
+
+ if [ -n "$commits" ]; then
+ echo "## $next_tag"
+ echo
+ echo "$commits"
+ echo
+ fi
+ next_tag="$current_tag"
+ done <<< "$tags_between"
+}
+
+release_notes "$@"
+