154 lines
3.7 KiB
Bash
Executable File
154 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script is currently used by .github/workflows/release.yml to release Kong to Pulp.
|
|
set -eo pipefail
|
|
|
|
source .requirements
|
|
|
|
KONG_VERSION=$(bash scripts/grep-kong-version.sh)
|
|
KONG_RELEASE_LABEL=${KONG_RELEASE_LABEL:-$KONG_VERSION}
|
|
|
|
# allow package name (from .requirements) to be overridden by ENV
|
|
KONG_PACKAGE_NAME="${KONG_PACKAGE_NAME_OVERRIDE:-${KONG_PACKAGE_NAME}}"
|
|
|
|
RELEASE_SCRIPT_DOCKER_IMAGE="kong/release-script"
|
|
|
|
# Variables used by the release script
|
|
ARCHITECTURE=${ARCHITECTURE:-amd64}
|
|
PACKAGE_TYPE=${PACKAGE_TYPE:-deb}
|
|
ARTIFACT_TYPE=${ARTIFACT_TYPE:-debian}
|
|
|
|
ARTIFACT_PREFIX=${ARTIFACT_PREFIX:-"bazel-bin/pkg"}
|
|
ARTIFACT=${ARTIFACT:-"kong.deb"}
|
|
ARTIFACT_VERSION=${ARTIFACT_VERSION:-}
|
|
|
|
KONG_ARTIFACT=$ARTIFACT_PREFIX/$ARTIFACT
|
|
|
|
# Retries a command a configurable number of times with backoff.
|
|
#
|
|
# The retry count is given by ATTEMPTS (default 5), the initial backoff
|
|
# timeout is given by TIMEOUT in seconds (default 1.)
|
|
#
|
|
# Successive backoffs double the timeout.
|
|
function with_backoff {
|
|
local max_attempts=${ATTEMPTS-5}
|
|
local timeout=${TIMEOUT-5}
|
|
local attempt=1
|
|
local exitCode=0
|
|
|
|
while (( $attempt < $max_attempts ))
|
|
do
|
|
if "$@"
|
|
then
|
|
return 0
|
|
else
|
|
exitCode=$?
|
|
fi
|
|
|
|
echo "Failure! Retrying in $timeout.." 1>&2
|
|
sleep $timeout
|
|
attempt=$(( attempt + 1 ))
|
|
timeout=$(( timeout * 2 ))
|
|
done
|
|
|
|
if [[ $exitCode != 0 ]]
|
|
then
|
|
echo "You've failed me for the last time! ($*)" 1>&2
|
|
fi
|
|
|
|
return $exitCode
|
|
}
|
|
|
|
# TODO: remove this once we have a better way to determine if we are releasing
|
|
case "$ARTIFACT_TYPE" in
|
|
debian|ubuntu)
|
|
OUTPUT_FILE_SUFFIX=".$ARTIFACT_VERSION.$ARCHITECTURE.deb"
|
|
;;
|
|
rhel)
|
|
OUTPUT_FILE_SUFFIX=".rhel$ARTIFACT_VERSION.$ARCHITECTURE.rpm"
|
|
;;
|
|
alpine)
|
|
OUTPUT_FILE_SUFFIX=".$ARCHITECTURE.apk.tar.gz"
|
|
;;
|
|
amazonlinux)
|
|
OUTPUT_FILE_SUFFIX=".aws.$ARCHITECTURE.rpm"
|
|
;;
|
|
src)
|
|
OUTPUT_FILE_SUFFIX=".tar.gz"
|
|
;;
|
|
esac
|
|
|
|
|
|
DIST_FILE="$KONG_PACKAGE_NAME-$KONG_RELEASE_LABEL$OUTPUT_FILE_SUFFIX"
|
|
|
|
function push_package () {
|
|
|
|
local dist_version="--dist-version $ARTIFACT_VERSION"
|
|
|
|
# TODO: CE gateway-src
|
|
|
|
if [ "$ARTIFACT_VERSION" == "18.04" ]; then
|
|
dist_version="--dist-version bionic"
|
|
fi
|
|
if [ "$ARTIFACT_VERSION" == "20.04" ]; then
|
|
dist_version="--dist-version focal"
|
|
fi
|
|
if [ "$ARTIFACT_VERSION" == "22.04" ]; then
|
|
dist_version="--dist-version jammy"
|
|
fi
|
|
if [ "$ARTIFACT_VERSION" == "24.04" ]; then
|
|
dist_version="--dist-version noble"
|
|
fi
|
|
|
|
# test for sanitized github actions input
|
|
if [[ -n "$(echo "$PACKAGE_TAGS" | tr -d 'a-zA-Z0-9._,')" ]]; then
|
|
echo 'invalid characters in PACKAGE_TAGS'
|
|
echo "passed to script: ${PACKAGE_TAGS}"
|
|
tags=''
|
|
else
|
|
tags="$PACKAGE_TAGS"
|
|
fi
|
|
|
|
set -x
|
|
release_args=''
|
|
|
|
if [ -n "${tags:-}" ]; then
|
|
release_args="${release_args} --tags ${tags}"
|
|
fi
|
|
|
|
release_args="${release_args} --package-type gateway"
|
|
if [[ "$EDITION" == "enterprise" ]]; then
|
|
release_args="${release_args} --enterprise"
|
|
fi
|
|
|
|
# pre-releases go to `/internal/`
|
|
if [[ "$OFFICIAL_RELEASE" == "true" ]]; then
|
|
release_args="${release_args} --publish"
|
|
else
|
|
release_args="${release_args} --internal"
|
|
fi
|
|
|
|
docker run \
|
|
-e VERBOSE \
|
|
-e CLOUDSMITH_API_KEY \
|
|
-e CLOUDSMITH_DRY_RUN \
|
|
-e IGNORE_CLOUDSMITH_FAILURES \
|
|
-e USE_CLOUDSMITH \
|
|
-v "$(pwd)/$KONG_ARTIFACT:/files/$DIST_FILE" \
|
|
-i $RELEASE_SCRIPT_DOCKER_IMAGE \
|
|
--file "/files/$DIST_FILE" \
|
|
--dist-name "$ARTIFACT_TYPE" $dist_version \
|
|
--major-version "${KONG_VERSION%%.*}.x" \
|
|
$release_args
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
with_backoff push_package
|
|
|
|
echo -e "\nReleasing Kong '$KONG_RELEASE_LABEL' of '$ARTIFACT_TYPE $ARTIFACT_VERSION' done"
|
|
|
|
exit 0
|