Files
2026-07-13 12:32:21 +08:00

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