mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-14 12:00:40 +00:00
fix: fix current version comparison logic for pre-releases (#7946)
Signed-off-by: liyang <daviderli614@gmail.com>
This commit is contained in:
69
.github/scripts/check-version.sh
vendored
69
.github/scripts/check-version.sh
vendored
@@ -30,13 +30,72 @@ CLEAN_LATEST=$(echo "$LATEST_VERSION" | sed 's/^v//' | sed 's/-nightly-.*//')
|
||||
echo "Current version: $CLEAN_CURRENT"
|
||||
echo "Latest release version: $CLEAN_LATEST"
|
||||
|
||||
# Use sort -V to compare versions
|
||||
HIGHER_VERSION=$(printf "%s\n%s" "$CLEAN_CURRENT" "$CLEAN_LATEST" | sort -V | tail -n1)
|
||||
# Function to extract base version (without pre-release suffix)
|
||||
get_base_version() {
|
||||
echo "$1" | sed -E 's/-(alpha|beta|rc|pre).*//'
|
||||
}
|
||||
|
||||
if [ "$HIGHER_VERSION" = "$CLEAN_CURRENT" ]; then
|
||||
# Function to check if a version is pre-release
|
||||
is_prerelease() {
|
||||
[[ "$1" =~ -(alpha|beta|rc|pre) ]]
|
||||
}
|
||||
|
||||
# Compare versions properly considering pre-release
|
||||
compare_versions() {
|
||||
local current=$1
|
||||
local latest=$2
|
||||
|
||||
# Extract base versions
|
||||
local current_base=$(get_base_version "$current")
|
||||
local latest_base=$(get_base_version "$latest")
|
||||
|
||||
# Compare base versions first
|
||||
HIGHER_BASE=$(printf "%s\n%s" "$current_base" "$latest_base" | sort -V | tail -n1)
|
||||
|
||||
if [ "$HIGHER_BASE" = "$latest_base" ] && [ "$current_base" != "$latest_base" ]; then
|
||||
# Latest has higher base version
|
||||
echo "current_older"
|
||||
return
|
||||
elif [ "$HIGHER_BASE" = "$current_base" ] && [ "$current_base" != "$latest_base" ]; then
|
||||
# Current has higher base version
|
||||
echo "current_newer"
|
||||
return
|
||||
fi
|
||||
|
||||
# Base versions are equal, compare pre-release status
|
||||
if [ "$current_base" = "$latest_base" ]; then
|
||||
# If current is pre-release and latest is not, current is older
|
||||
if is_prerelease "$current" && ! is_prerelease "$latest"; then
|
||||
echo "current_older"
|
||||
return
|
||||
fi
|
||||
|
||||
# If latest is pre-release and current is not, current is newer
|
||||
if ! is_prerelease "$current" && is_prerelease "$latest"; then
|
||||
echo "current_newer"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Both are same type or different base versions already handled, use sort -V
|
||||
HIGHER_VERSION=$(printf "%s\n%s" "$current" "$latest" | sort -V | tail -n1)
|
||||
if [ "$HIGHER_VERSION" = "$current" ]; then
|
||||
echo "current_newer_or_equal"
|
||||
else
|
||||
echo "current_older"
|
||||
fi
|
||||
}
|
||||
|
||||
RESULT=$(compare_versions "$CLEAN_CURRENT" "$CLEAN_LATEST")
|
||||
|
||||
if [ "$RESULT" = "current_newer" ] || [ "$RESULT" = "current_newer_or_equal" ]; then
|
||||
echo "Current version ($CLEAN_CURRENT) is NEWER than or EQUAL to latest ($CLEAN_LATEST)"
|
||||
echo "is-current-version-latest=true" >> $GITHUB_OUTPUT
|
||||
if [ -n "$GITHUB_OUTPUT" ]; then
|
||||
echo "is-current-version-latest=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
else
|
||||
echo "Current version ($CLEAN_CURRENT) is OLDER than latest ($CLEAN_LATEST)"
|
||||
echo "is-current-version-latest=false" >> $GITHUB_OUTPUT
|
||||
if [ -n "$GITHUB_OUTPUT" ]; then
|
||||
echo "is-current-version-latest=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user