3838 LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
3939 NEW_VERSION=""
4040
41+ # Function to compare version numbers
42+ version_gt() {
43+ test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"
44+ }
45+
4146 # Check each project for changes and update versions
4247 for proj in $(find . -name "*.csproj"); do
4348 PROJECT_NAME=$(basename "$proj")
4651 # Get current version from csproj
4752 CURRENT_VERSION=$(grep -oP '(?<=<Version>).*(?=</Version>)' "$proj" || echo "0.0.0")
4853
54+ if [ -z "$CURRENT_VERSION" ]; then
55+ echo "Warning: Could not find version in $proj"
56+ continue
57+ fi
58+
4959 # Split version into parts
5060 IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION"
5161 MAJOR="${VERSION_PARTS[0]}"
@@ -57,24 +67,37 @@ jobs:
5767 # Calculate new version based on release type
5868 case "${{ github.event.inputs.release_type }}" in
5969 "major")
60- NEW_VERSION ="$((MAJOR + 1)).0.0"
70+ PROJECT_NEW_VERSION ="$((MAJOR + 1)).0.0"
6171 ;;
6272 "minor")
63- NEW_VERSION ="${MAJOR}.$((MINOR + 1)).0"
73+ PROJECT_NEW_VERSION ="${MAJOR}.$((MINOR + 1)).0"
6474 ;;
6575 "patch")
66- NEW_VERSION ="${MAJOR}.${MINOR}.$((PATCH + 1))"
76+ PROJECT_NEW_VERSION ="${MAJOR}.${MINOR}.$((PATCH + 1))"
6777 ;;
6878 esac
6979
7080 # Update version in csproj
71- sed -i "s/<Version>.*<\/Version>/<Version>${NEW_VERSION }<\/Version>/g" "$proj"
81+ sed -i "s/<Version>.*<\/Version>/<Version>${PROJECT_NEW_VERSION }<\/Version>/g" "$proj"
7282
73- CHANGED_PROJECTS="$CHANGED_PROJECTS$PROJECT_NAME -> $NEW_VERSION \n"
83+ CHANGED_PROJECTS="$CHANGED_PROJECTS$PROJECT_NAME -> $PROJECT_NEW_VERSION \n"
7484 SHOULD_RELEASE="true"
85+
86+ # Update NEW_VERSION if this project's version is higher
87+ if [ -z "$NEW_VERSION" ] || version_gt "$PROJECT_NEW_VERSION" "$NEW_VERSION"; then
88+ NEW_VERSION="$PROJECT_NEW_VERSION"
89+ echo "New highest version: $NEW_VERSION from $PROJECT_NAME"
90+ fi
7591 fi
7692 done
7793
94+ if [ -z "$NEW_VERSION" ]; then
95+ echo "No version changes detected"
96+ exit 0
97+ fi
98+
99+ echo "Final highest version will be: v$NEW_VERSION"
100+
78101 # Set environment variables for next steps
79102 echo "CHANGED_PROJECTS<<EOF" >> $GITHUB_ENV
80103 echo -e "$CHANGED_PROJECTS" >> $GITHUB_ENV
@@ -146,11 +169,18 @@ jobs:
146169
147170 # Commit version updates and create tag
148171 - name : Commit version updates
149- if : env.SHOULD_RELEASE == 'true'
172+ if : env.SHOULD_RELEASE == 'true' && env.NEW_VERSION != ''
150173 run : |
174+ if [ -z "${{ env.NEW_VERSION }}" ]; then
175+ echo "Error: NEW_VERSION is not set"
176+ exit 1
177+ fi
178+
179+ echo "Creating release for version v${{ env.NEW_VERSION }}"
180+
151181 git config --local user.email "action@github.com"
152182 git config --local user.name "GitHub Action"
153183 git add .
154- git commit -m "Update project versions"
184+ git commit -m "Update project versions to v${{ env.NEW_VERSION }} "
155185 git tag -a "v${{ env.NEW_VERSION }}" -m "Release v${{ env.NEW_VERSION }}"
156186 git push --follow-tags
0 commit comments