#!/bin/bash # Check for the "final" flag in command line arguments finalFlag=false for arg in "$@"; do if [[ "$arg" == "final" ]]; then finalFlag=true break fi done # Get tags sorted by creation date tags=$(git tag --sort=creatordate) # Convert tags into an array if [[ $(echo "$BASH_VERSION" | cut -d. -f1) -ge 4 ]]; then readarray -t tagArray <<< "$tags" else IFS=$'\n' read -d '' -ra tagArray <<< "$tags" fi # Determine the number of tags len=${#tagArray[@]} # Find the last tag or the last "final" tag based on the flag if $finalFlag; then for (( i=len-1; i>=0; i-- )); do if [[ "${tagArray[i]}" == *"final"* ]]; then latestTag="${tagArray[i]}" break fi done if [ -z "$latestTag" ]; then echo "No 'final' tag found." exit 1 fi else if [ "$len" -gt 0 ]; then latestTag="${tagArray[$len-1]}" else echo "No tags found." exit 1 fi fi # Print release notes echo "" echo "Release Notes from $latestTag to HEAD:" echo "" # 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) updatedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'update:' | sed 's/update:/* /g' | sort | uniq) fixedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'fix:' | sed 's/fix:/* /g' | sort | uniq) deletedfeatures=$(git log "$latestTag"..HEAD --pretty=format:"%s" | grep 'delete:' | sed 's/delete:/* /g' | sort | uniq) # Output formatted commit lists echo "New Features:" if [ -z "$newfeatures" ]; then echo "* No new features." else echo "$newfeatures" fi echo "" echo "Updated Features:" if [ -z "$updatedfeatures" ]; then echo "* No updated features." else echo "$updatedfeatures" fi echo "" echo "Fixed Features:" if [ -z "$fixedfeatures" ]; then echo "* No fixed features." else echo "$fixedfeatures" fi echo "" echo "Deleted Features:" if [ -z "$deletedfeatures" ]; then echo "* No deleted features." else echo "$deletedfeatures" fi echo ""