new: Release script order of commits can now be specified.

This commit is contained in:
Jan Jambor 2024-06-06 23:28:16 +02:00
parent 8883eabe1e
commit e69d6d60eb

View file

@ -1,14 +1,46 @@
#!/bin/bash #!/bin/bash
# Check for the "final" flag in command line arguments # Usage function to display help
finalFlag=false usage() {
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -f, --final Use the last 'final' tag as the start point."
echo " -n, --newest Display commits from newest to oldest."
echo " -h, --help Display this help and exit."
echo ""
echo "This script generates release notes from git commits based on tags."
echo "By default, it lists commits from the last tag to HEAD, sorted from oldest to newest."
}
# Check for command line arguments
for arg in "$@"; do for arg in "$@"; do
if [[ "$arg" == "final" ]]; then case "$arg" in
-f|--final)
finalFlag=true finalFlag=true
break ;;
fi -n|--newest)
newestFirst=true
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown option: $arg"
usage
exit 1
;;
esac
done done
# Adjust sort order based on the flag
if [ "${newestFirst}" = true ]; then
sortOrder="tail -r"
else
sortOrder="cat"
fi
# Get tags sorted by creation date # Get tags sorted by creation date
tags=$(git tag --sort=creatordate) tags=$(git tag --sort=creatordate)
@ -23,7 +55,7 @@ fi
len=${#tagArray[@]} len=${#tagArray[@]}
# Find the last tag or the last "final" tag based on the flag # Find the last tag or the last "final" tag based on the flag
if $finalFlag; then if [ "${finalFlag}" = true ]; then
for (( i=len-1; i>=0; i-- )); do for (( i=len-1; i>=0; i-- )); do
if [[ "${tagArray[i]}" == *"final"* ]]; then if [[ "${tagArray[i]}" == *"final"* ]]; then
latestTag="${tagArray[i]}" latestTag="${tagArray[i]}"
@ -48,10 +80,10 @@ echo "## Release Notes from $latestTag to this release"
echo "" echo ""
# Fetch commit logs from the latest tag to HEAD and categorize them # Fetch commit logs from the latest tag to HEAD and categorize them
newfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'new:' | sed 's/new:/-/g' | sort | uniq) newfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'new:' | sed 's/new:/- /g' | sort | uniq | $sortOrder)
updatedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'update:' | sed 's/update:/-/g' | sort | uniq) updatedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'update:' | sed 's/update:/- /g' | sort | uniq | $sortOrder)
fixedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'fix:' | sed 's/fix:/-/g' | sort | uniq) fixedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'fix:' | sed 's/fix:/- /g' | sort | uniq | $sortOrder)
deletedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'delete:' | sed 's/delete:/-/g' | sort | uniq) deletedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'delete:' | sed 's/delete:/- /g' | sort | uniq | $sortOrder)
# Output formatted commit lists # Output formatted commit lists
echo "New Features:" echo "New Features:"
@ -88,3 +120,4 @@ if [ -z "$deletedfeatures" ]; then
else else
echo "$deletedfeatures" echo "$deletedfeatures"
fi fi
echo ""