Files
caprover/release/validate-version.sh
T

53 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
set -e
set -o pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$SCRIPT_DIR/release.conf"
if ! command -v curl >/dev/null 2>&1; then
echo "curl is required to validate the release version." >&2
exit 1
fi
if [[ ! "$CAPROVER_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid CapRover version: $CAPROVER_VERSION" >&2
exit 1
fi
ESCAPED_CAPROVER_VERSION="${CAPROVER_VERSION//./\\.}"
if ! grep --extended-regexp --quiet "^## \[$ESCAPED_CAPROVER_VERSION\]( |$)" CHANGELOG.md; then
echo "CHANGELOG.md is missing the heading ## [$CAPROVER_VERSION]." >&2
exit 1
fi
GIT_TAG="v$CAPROVER_VERSION"
if git ls-remote --exit-code --tags origin "refs/tags/$GIT_TAG" >/dev/null 2>&1; then
echo "Tag $GIT_TAG already exists in GitHub." >&2
exit 1
else
TAG_LOOKUP_STATUS=$?
if [ "$TAG_LOOKUP_STATUS" -ne 2 ]; then
echo "Could not check whether tag $GIT_TAG exists." >&2
exit "$TAG_LOOKUP_STATUS"
fi
fi
TAG_URL="https://hub.docker.com/v2/repositories/${CAPROVER_IMAGE_NAME}/tags/${CAPROVER_VERSION}"
HTTP_STATUS="$(curl --silent --show-error --location --output /dev/null --write-out '%{http_code}' "$TAG_URL")"
case "$HTTP_STATUS" in
200)
echo "Version $CAPROVER_VERSION already exists on Docker Hub." >&2
exit 1
;;
404)
echo "Version $CAPROVER_VERSION is available."
;;
*)
echo "Docker Hub returned HTTP $HTTP_STATUS while validating version $CAPROVER_VERSION." >&2
exit 1
;;
esac