Skip to content

Commit 6297034

Browse files
committed
improve release script
1 parent 3e54753 commit 6297034

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

.github/workflows/release.yml

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ jobs:
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")
@@ -46,6 +51,11 @@ jobs:
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

Comments
 (0)