spring-petclinic/infra/scripts/setup-common-functions.sh
Jesse Houldsworth 00ed61ebb5 tf
2025-10-09 06:46:44 -07:00

88 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# Get Feast project repository root and scripts directory
export PROJECT_ROOT_DIR=$(git rev-parse --show-toplevel)
export SCRIPTS_DIR=${PROJECT_ROOT_DIR}/infra/scripts
install_test_tools() {
apt-get -qq update
apt-get -y install wget netcat kafkacat build-essential
}
print_banner() {
echo "
============================================================
$1
============================================================
"
}
wait_for_docker_image(){
# This script will block until a docker image is ready
[[ -z "$1" ]] && { echo "Please pass the docker image URI as the first parameter" ; exit 1; }
oldopt=$-
set +e
DOCKER_IMAGE=$1
poll_count=0
maximum_poll_count=150
# Wait for Feast Core to be available on GCR
until docker pull "$DOCKER_IMAGE"
do
# Exit when we have tried enough times
if [[ "$poll_count" -gt "$maximum_poll_count" ]]; then
set -$oldopt
exit 1
fi
# Sleep and increment counter on failure
echo "${DOCKER_IMAGE} could not be found";
sleep 5;
((poll_count++))
done
set -$oldopt
}
# Usage: TAG=$(get_tag_release [-ms])
# Parses the last release from git tags.
# Options:
# -m - Use only tags that are tagged on the current branch
# -s - Use only stable version tags. (ie no prerelease tags).
get_tag_release() {
local GIT_TAG_CMD="git tag -l"
# Match only Semver tags
# Regular expression should match MAJOR.MINOR.PATCH[-PRERELEASE[.IDENTIFIER]]
# eg. v0.7.1 v0.7.2-alpha v0.7.2-rc.1
local TAG_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$'
local OPTIND opt
while getopts "ms" opt; do
case "${opt}" in
m)
GIT_TAG_CMD="$GIT_TAG_CMD --merged"
;;
s)
# Match only stable version tags.
TAG_REGEX="^v[0-9]+\.[0-9]+\.[0-9]+$"
;;
*)
echo "get_tag_release(): Error: Bad arguments: $@"
return 1
;;
esac
done
shift $((OPTIND-1))
# Retrieve tags from git and filter as per regex.
local FILTERED_TAGS=$(bash -c "$GIT_TAG_CMD" | grep -P "$TAG_REGEX")
# Sort version tags in highest semver version first.
# To make sure that prerelease versions (ie versions vMAJOR.MINOR.PATCH-PRERELEASE suffix)
# are sorted after stable versions (ie vMAJOR.MINOR.PATCH), we append '_' after
# eachustable version as '_' is after '-' found in prerelease version
# alphanumerically and remove after sorting.
local SEMVER_SORTED_TAGS=$(echo "$FILTERED_TAGS" | sed -e '/-/!{s/$/_/}' | sort -rV \
| sed -e 's/_$//')
echo $(echo "$SEMVER_SORTED_TAGS" | head -n 1)
}