Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for LTS versions [DI-258] #808

Merged
merged 13 commits into from
Oct 17, 2024
47 changes: 47 additions & 0 deletions .github/actions/check-if-latest-lts-release/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Check if latest EE LTS release
description: Check if latest EE LTS release
inputs:
release_version:
description: Version to be released
required: true
is_lts_override:
description: Override is LTS release or not
required: true
outputs:
is_latest_lts:
value: ${{ steps.is_latest_lts.outputs.is_latest_lts }}
description: Returns 'true' if the release if the latest LTS
runs:
using: "composite"
steps:
- name: Set Environment Variables
shell: bash
run: |
echo "IS_LTS_FILE=.github/lts" >> $GITHUB_ENV

- name: Check if EE LTS release
shell: bash
run: |
if [ -n "${{inputs.is_lts_override}}" ]; then
echo "IS_LTS overridden to '${{inputs.is_lts_override}}'"
echo "IS_LTS=${{inputs.is_lts_override}}" >> $GITHUB_ENV
elif [ -f $IS_LTS_FILE ]; then
echo "IS_LTS=true" >> $GITHUB_ENV
echo "File '$IS_LTS_FILE' exists. Assuming LTS release"
else
echo "File '$IS_LTS_FILE' does not exist. Assuming non-LTS release"
fi

- name: Check if latest EE LTS release
if: env.IS_LTS == 'true'
id: is_latest_lts
shell: bash
run: |
. .github/scripts/version.functions.sh
CURRENT_LATEST_LTS_VERSION=$(get_last_version_with_file "$IS_LTS_FILE")
RELEASE_VERSION="${{ inputs.release_version }}"
if version_less_or_equal "$CURRENT_LATEST_LTS_VERSION" "$RELEASE_VERSION"; then
echo "is_latest_lts=true" >> $GITHUB_OUTPUT
else
echo "is_latest_lts=false" >> $GITHUB_OUTPUT
fi
25 changes: 15 additions & 10 deletions .github/scripts/get-tags-to-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ function get_latest_version() {
find_last_matching_version ""
}

function verlte() {
function version_less_or_equal() {
[ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

function get_version_only_tags_to_push() {
local VERSION_TO_RELEASE=$1
local IS_LATEST_LTS=$2

if [ "$#" -ne 1 ]; then
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} VERSION_TO_RELEASE"
if [ "$#" -ne 2 ]; then
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} VERSION_TO_RELEASE IS_LATEST_LTS"
exit 1;
fi

Expand All @@ -35,33 +36,37 @@ function get_version_only_tags_to_push() {

local TAGS_TO_PUSH+=($VERSION_TO_RELEASE)

if verlte "$LATEST_FOR_MINOR" "$VERSION_TO_RELEASE"; then
if version_less_or_equal "$LATEST_FOR_MINOR" "$VERSION_TO_RELEASE"; then
TAGS_TO_PUSH+=($MINOR_VERSION_TO_RELEASE)
fi

if verlte "$LATEST_FOR_MAJOR" "$VERSION_TO_RELEASE"; then
if version_less_or_equal "$LATEST_FOR_MAJOR" "$VERSION_TO_RELEASE"; then
TAGS_TO_PUSH+=($MAJOR_VERSION_TO_RELEASE)
fi

if verlte "$LATEST" "$VERSION_TO_RELEASE"; then
TAGS_TO_PUSH+=(latest)
if version_less_or_equal "$LATEST" "$VERSION_TO_RELEASE"; then
TAGS_TO_PUSH+=("latest")
fi
if [ "$IS_LATEST_LTS" == "true" ] ; then
TAGS_TO_PUSH+=("latest-lts")
fi

echo "${TAGS_TO_PUSH[@]}"
}

function get_tags_to_push() {

if [ "$#" -ne 4 ]; then
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} VERSION_TO_RELEASE SUFFIX CURRENT_JDK DEFAULT_JDK"
if [ "$#" -ne 5 ]; then
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} VERSION_TO_RELEASE SUFFIX CURRENT_JDK DEFAULT_JDK IS_LATEST_LTS"
exit 1;
fi

local VERSION_TO_RELEASE=$1
local SUFFIX=$2
local CURRENT_JDK=$3
local DEFAULT_JDK=$4
local VERSION_ONLY_TAGS_TO_PUSH=$(get_version_only_tags_to_push "$VERSION_TO_RELEASE")
local IS_LATEST_LTS=$5
local VERSION_ONLY_TAGS_TO_PUSH=$(get_version_only_tags_to_push "$VERSION_TO_RELEASE" "$IS_LATEST_LTS")
augment_with_suffixed_tags "${VERSION_ONLY_TAGS_TO_PUSH[*]}" "$SUFFIX" "$CURRENT_JDK" "$DEFAULT_JDK"
}

Expand Down
68 changes: 27 additions & 41 deletions .github/scripts/get-tags-to-push_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,7 @@

set -eu

function findScriptDir() {
CURRENT=$PWD

DIR=$(dirname "$0")
cd "$DIR" || exit
TARGET_FILE=$(basename "$0")

# Iterate down a (possible) chain of symlinks
while [ -L "$TARGET_FILE" ]
do
TARGET_FILE=$(readlink "$TARGET_FILE")
DIR=$(dirname "$TARGET_FILE")
cd "$DIR" || exit
TARGET_FILE=$(basename "$TARGET_FILE")
done

SCRIPT_DIR=$(pwd -P)
# Restore current directory
cd "$CURRENT" || exit
}

findScriptDir
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

# Source the latest version of assert.sh unit testing library and include in current shell
assert_script_content=$(curl --silent https://raw.githubusercontent.com/hazelcast/assert.sh/main/assert.sh)
Expand All @@ -35,9 +14,10 @@ TESTS_RESULT=0

function assert_get_version_only_tags_to_push {
local VERSION_TO_RELEASE=$1
local EXPECTED_TAGS_TO_PUSH=$2
local ACTUAL_TAGS_TO_PUSH=$(get_version_only_tags_to_push "$VERSION_TO_RELEASE")
local MSG="Tags to push for version $VERSION_TO_RELEASE should be equal to $EXPECTED_TAGS_TO_PUSH"
local IS_LTS=$2
local EXPECTED_TAGS_TO_PUSH=$3
local ACTUAL_TAGS_TO_PUSH=$(get_version_only_tags_to_push "$VERSION_TO_RELEASE" "$IS_LTS")
local MSG="Tags to push for version $VERSION_TO_RELEASE and is_lts = '$IS_LTS' should be equal to $EXPECTED_TAGS_TO_PUSH"
assert_eq "$EXPECTED_TAGS_TO_PUSH" "$ACTUAL_TAGS_TO_PUSH" "$MSG" && log_success "$MSG" || TESTS_RESULT=$?
}

Expand All @@ -57,22 +37,25 @@ function assert_get_tags_to_push {
local SUFFIX=$2
local CURRENT_JDK=$3
local DEFAULT_JDK=$4
local EXPECTED_TAGS_TO_PUSH=$5
local ACTUAL_TAGS_TO_PUSH=$(get_tags_to_push "$VERSION_TO_RELEASE" "$SUFFIX" "$CURRENT_JDK" "$DEFAULT_JDK")
local MSG="Tags to push for (version_to_release=$VERSION_TO_RELEASE suffix=$SUFFIX current_jdk=$CURRENT_JDK default_jdk=$DEFAULT_JDK) should be equal to: $EXPECTED_TAGS_TO_PUSH "
local IS_LATEST_LTS=$5
local EXPECTED_TAGS_TO_PUSH=$6
local ACTUAL_TAGS_TO_PUSH=$(get_tags_to_push "$VERSION_TO_RELEASE" "$SUFFIX" "$CURRENT_JDK" "$DEFAULT_JDK" "$IS_LATEST_LTS")
local MSG="Tags to push for (version_to_release=$VERSION_TO_RELEASE suffix=$SUFFIX current_jdk=$CURRENT_JDK default_jdk=$DEFAULT_JDK is_latest_lts=$IS_LATEST_LTS) should be equal to: $EXPECTED_TAGS_TO_PUSH "
assert_eq "$EXPECTED_TAGS_TO_PUSH" "$ACTUAL_TAGS_TO_PUSH" "$MSG" && log_success "$MSG" || TESTS_RESULT=$?
}

log_header "Tests for get_version_only_tags_to_push"
assert_get_version_only_tags_to_push "5.2.0" "5.2.0"
assert_get_version_only_tags_to_push "5.2.1" "5.2.1"
assert_get_version_only_tags_to_push "5.1.99" "5.1.99 5.1"
assert_get_version_only_tags_to_push "4.99.0" "4.99.0 4.99 4"
assert_get_version_only_tags_to_push "99.0.0" "99.0.0 99.0 99 latest"
assert_get_version_only_tags_to_push "5.3.0-BETA-1" "5.3.0-BETA-1"
assert_get_version_only_tags_to_push "5.4.0-DEVEL-9" "5.4.0-DEVEL-9"
assert_get_version_only_tags_to_push "5.99.0-BETA-1" "5.99.0-BETA-1"
assert_get_version_only_tags_to_push "99.0.0-BETA-1" "99.0.0-BETA-1"
assert_get_version_only_tags_to_push "5.2.0" "false" "5.2.0"
assert_get_version_only_tags_to_push "5.2.1" "false" "5.2.1"
assert_get_version_only_tags_to_push "5.1.99" "false" "5.1.99 5.1"
assert_get_version_only_tags_to_push "4.99.0" "false" "4.99.0 4.99 4"
assert_get_version_only_tags_to_push "99.0.0" "false" "99.0.0 99.0 99 latest"
assert_get_version_only_tags_to_push "5.3.0-BETA-1" "false" "5.3.0-BETA-1"
assert_get_version_only_tags_to_push "5.4.0-DEVEL-9" "false" "5.4.0-DEVEL-9"
assert_get_version_only_tags_to_push "5.99.0-BETA-1" "false" "5.99.0-BETA-1"
assert_get_version_only_tags_to_push "99.0.0-BETA-1" "false" "99.0.0-BETA-1"
assert_get_version_only_tags_to_push "99.0.0" "true" "99.0.0 99.0 99 latest latest-lts"
assert_get_version_only_tags_to_push "5.2.0" "true" "5.2.0 latest-lts"

log_header "Tests for augment_with_suffixed_tags"
assert_augment_with_suffixed_tags "1.2.3" "" "11" "11" "1.2.3 1.2.3-jdk11"
Expand All @@ -82,14 +65,17 @@ assert_augment_with_suffixed_tags "1.2.3 latest" "" "17" "11" "1.2.3-jdk17 lates
assert_augment_with_suffixed_tags "1.2.3" "-slim" "11" "11" "1.2.3-slim 1.2.3-slim-jdk11"
assert_augment_with_suffixed_tags "1.2.3" "-slim" "17" "11" "1.2.3-slim-jdk17"
assert_augment_with_suffixed_tags "1.2.3 latest" "-slim" "17" "11" "1.2.3-slim-jdk17 latest-slim-jdk17"
assert_augment_with_suffixed_tags "1.2.3 latest-lts" "-slim" "17" "11" "1.2.3-slim-jdk17 latest-lts-slim-jdk17"
tags_array=(1.2.3 latest)
assert_augment_with_suffixed_tags "${tags_array[*]}" "-slim" "17" "11" "1.2.3-slim-jdk17 latest-slim-jdk17"
assert_augment_with_suffixed_tags "1.2.3 1.2" "-slim" "17" "11" "1.2.3-slim-jdk17 1.2-slim-jdk17"

log_header "Tests for get_tags_to_push"
assert_get_tags_to_push "5.2.0" "" "11" "11" "5.2.0 5.2.0-jdk11"
assert_get_tags_to_push "99.0.0" "" "11" "11" "99.0.0 99.0.0-jdk11 99.0 99.0-jdk11 99 99-jdk11 latest latest-jdk11"
assert_get_tags_to_push "99.0.0-BETA-1" "" "17" "11" "99.0.0-BETA-1-jdk17"
assert_get_tags_to_push "5.4.0-DEVEL-9" "-slim" "17" "11" "5.4.0-DEVEL-9-slim-jdk17"
assert_get_tags_to_push "5.2.0" "" "11" "11" "false" "5.2.0 5.2.0-jdk11"
assert_get_tags_to_push "99.0.0" "" "11" "11" "false" "99.0.0 99.0.0-jdk11 99.0 99.0-jdk11 99 99-jdk11 latest latest-jdk11"
assert_get_tags_to_push "99.0.0-BETA-1" "" "17" "11" "false" "99.0.0-BETA-1-jdk17"
assert_get_tags_to_push "5.4.0-DEVEL-9" "-slim" "17" "false" "11" "5.4.0-DEVEL-9-slim-jdk17"
assert_get_tags_to_push "5.2.0" "" "11" "11" "true" "5.2.0 5.2.0-jdk11 latest-lts latest-lts-jdk11"
assert_get_tags_to_push "99.0.0" "" "11" "11" "true" "99.0.0 99.0.0-jdk11 99.0 99.0-jdk11 99 99-jdk11 latest latest-jdk11 latest-lts latest-lts-jdk11"

assert_eq 0 "$TESTS_RESULT" "All tests should pass"
37 changes: 37 additions & 0 deletions .github/scripts/version.functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,40 @@ function get_latest_patch_versions() {
done
echo "${LATEST_PATCH_VERSIONS[@]}"
}

function version_less_or_equal() {
[ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
nishaatr marked this conversation as resolved.
Show resolved Hide resolved
}

function get_tags_descending() {
git tag -l "v*" | sort -V -r | grep -v '-'
nishaatr marked this conversation as resolved.
Show resolved Hide resolved
}

function file_exists_in_tag() {
local file=$1
local tag=$2
if [ "$#" -ne 2 ]; then
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} <file> <tag>"
exit 1
fi
# subshell to wrap directory change
(
set -e
cd -- "$(git rev-parse --show-toplevel)"
nishaatr marked this conversation as resolved.
Show resolved Hide resolved
git ls-tree -r "$tag" --name-only | grep "^$file$" | grep -q "^$file$"
nishaatr marked this conversation as resolved.
Show resolved Hide resolved
)
}

function get_last_version_with_file() {
local file=$1
if [ "$#" -ne 1 ]; then
nishaatr marked this conversation as resolved.
Show resolved Hide resolved
echo "Error: Incorrect number of arguments. Usage: ${FUNCNAME[0]} <file>"
exit 1
fi
for tag in $(get_tags_descending); do
if file_exists_in_tag "$file" "$tag"; then
echo "$tag" | cut -c2-
return
fi
done
}
35 changes: 13 additions & 22 deletions .github/scripts/version.functions_tests.sh
Original file line number Diff line number Diff line change
@@ -1,27 +1,6 @@
#!/usr/bin/env bash

function findScriptDir() {
CURRENT=$PWD

DIR=$(dirname "$0")
cd "$DIR" || exit
TARGET_FILE=$(basename "$0")

# Iterate down a (possible) chain of symlinks
while [ -L "$TARGET_FILE" ]
do
TARGET_FILE=$(readlink "$TARGET_FILE")
DIR=$(dirname "$TARGET_FILE")
cd "$DIR" || exit
TARGET_FILE=$(basename "$TARGET_FILE")
done

SCRIPT_DIR=$(pwd -P)
# Restore current directory
cd "$CURRENT" || exit
}

findScriptDir
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

# Source the latest version of assert.sh unit testing library and include in current shell
assert_script_content=$(curl --silent https://raw.githubusercontent.com/hazelcast/assert.sh/main/assert.sh)
Expand Down Expand Up @@ -72,6 +51,13 @@ function assert_latest_patch_versions_not_contain {
assert_not_contain "$ACTUAL_LATEST_PATCH_VERSIONS" "$EXPECTED_VERSION" "$MSG" && log_success "$MSG" || TESTS_RESULT=$?
}

function assert_get_last_version_with_file {
local FILE=$1
local EXPECTED_LAST_VERSION=$2
local ACTUAL_LAST_VERSION=$(get_last_version_with_file "$FILE")
assert_eq "$ACTUAL_LAST_VERSION" "$EXPECTED_LAST_VERSION" "Last version of $FILE should be ${EXPECTED_LAST_VERSION:-<none>} " || TESTS_RESULT=$?
}

log_header "Tests for get_latest_patch_version"
assert_latest_patch_version "4.2.1" "4.2.8"
assert_latest_patch_version "4.2" "4.2.8"
Expand Down Expand Up @@ -103,4 +89,9 @@ assert_latest_patch_versions_not_contain "4.2" "4.1.10"
LATEST_5_4_DEVEL="$(git tag | sort -V | grep 'v5.4.0-DEVEL-' | tail -n 1 | cut -c2-)"
assert_latest_patch_versions_not_contain "5.3" "$LATEST_5_4_DEVEL"

log_header "Tests for get_last_version_with_file"
assert_get_last_version_with_file ".github/containerscan/allowedlist.yaml" "5.3.1" # it was removed in 5.3.2
assert_get_last_version_with_file ".github/actions/install-xmllint/action.yml" "5.4.1" # it was removed in 5.4.2
assert_get_last_version_with_file "dummy-non-existing-file" ""

assert_eq 0 "$TESTS_RESULT" "All tests should pass"
Loading