release.sh: auto-generate notes from git log, prompt to accept/edit/quit
This commit is contained in:
43
release.sh
43
release.sh
@@ -29,16 +29,45 @@ fi
|
|||||||
VERSION="$1"
|
VERSION="$1"
|
||||||
TAG="v${VERSION}"
|
TAG="v${VERSION}"
|
||||||
|
|
||||||
# Release notes: from argument or prompt
|
# Release notes: from argument, or auto-generate from git log
|
||||||
if [ $# -ge 2 ]; then
|
if [ $# -ge 2 ]; then
|
||||||
NOTES="$2"
|
NOTES="$2"
|
||||||
else
|
else
|
||||||
echo "Enter release notes (press Enter twice when done):"
|
# Auto-generate from git log since last tag (or all commits if no tags yet)
|
||||||
NOTES=""
|
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
||||||
while IFS= read -r line; do
|
if [ -n "$LAST_TAG" ]; then
|
||||||
[[ -z "$line" ]] && break
|
RAW_LOG=$(git log "${LAST_TAG}..HEAD" --oneline --no-merges)
|
||||||
NOTES="${NOTES}${line}\n"
|
LOG_RANGE="since $LAST_TAG"
|
||||||
done
|
else
|
||||||
|
RAW_LOG=$(git log --oneline --no-merges | head -30)
|
||||||
|
LOG_RANGE="all commits"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Auto-generated release notes ($LOG_RANGE):"
|
||||||
|
echo "──────────────────────────────────────────"
|
||||||
|
echo "$RAW_LOG"
|
||||||
|
echo "──────────────────────────────────────────"
|
||||||
|
echo ""
|
||||||
|
echo "Accept these as release notes? [y=yes, e=edit, q=quit]"
|
||||||
|
read -r CHOICE
|
||||||
|
|
||||||
|
case "$CHOICE" in
|
||||||
|
y|Y)
|
||||||
|
NOTES="$RAW_LOG"
|
||||||
|
;;
|
||||||
|
e|E)
|
||||||
|
TMPFILE=$(mktemp /tmp/photophetch-release-notes.XXXXXX.md)
|
||||||
|
echo "$RAW_LOG" > "$TMPFILE"
|
||||||
|
${EDITOR:-nano} "$TMPFILE"
|
||||||
|
NOTES=$(cat "$TMPFILE")
|
||||||
|
rm -f "$TMPFILE"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Aborted."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Gitea token
|
# Gitea token
|
||||||
|
|||||||
Reference in New Issue
Block a user