#!/usr/bin/env bash set -eo pipefail; [[ $TRACE ]] && set -x semver-parse-into() { declare VERSION="$1" local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)' local MAJOR="$(echo "$VERSION" | sed -e "s#$RE#\1#")" local MINOR="$(echo "$VERSION" | sed -e "s#$RE#\2#")" local PATCH="$(echo "$VERSION" | sed -e "s#$RE#\3#")" echo "${MAJOR} ${MINOR} ${PATCH}" } main() { declare MIN_VERSION="$1" CHECK_VERSION="$2" local IS_AT_LEAST_VERSION=false local MAJOR_MIN MINOR_MIN PATCH_MIN MAJOR_CHECK MINOR_CHECK PATCH_CHECK PARSED_MIN PARSED_CHECK PARSED_MIN="$(semver-parse-into "$MIN_VERSION")" PARSED_CHECK="$(semver-parse-into "$CHECK_VERSION")" MAJOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f1)" MINOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f2)" PATCH_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f3)" MAJOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f1)" MINOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f2)" PATCH_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f3)" if [[ "$MAJOR_CHECK" -gt "$MAJOR_MIN" ]]; then IS_AT_LEAST_VERSION=true elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -gt "$MINOR_MIN" ]]; then IS_AT_LEAST_VERSION=true elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -eq "$MINOR_MIN" ]] && [[ "$PATCH_CHECK" -ge "$PATCH_MIN" ]]; then IS_AT_LEAST_VERSION=true fi echo "$IS_AT_LEAST_VERSION" } main "$@"