linkerd2/bin/install-pr

135 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
### Install PR ###
#
# This script takes a GitHub pull request number as an argument and loads the
# images into a local Kubernetes cluster. It then installs the CLI so that it
# can be used to install with any specific configuration needed.
#
# It requires a GitHub personal access token in the $GITHUB_TOKEN environment
# variable.
set -eo pipefail
# Read script flags and arguments
while :
do
case $1 in
-h|--help)
echo "Install Linkerd with the changes made in a GitHub Pull Request."
echo ""
echo "Usage:"
echo " --cluster: The name of the cluster to use"
echo ""
echo " # Install Linkerd into the current cluster"
echo " bin/install-pr 1234"
echo ""
echo " # Install Linkerd into the current k3d cluster"
echo " bin/install-pr --k3d 1234"
echo ""
echo " # Install Linkerd into the current KinD cluster"
echo " bin/install-pr --kind 1234"
echo ""
echo " # Install Linkerd into the 'pr-1234' k3d cluster"
echo " bin/install-pr --k3d --cluster pr-1234 1234"
exit 0
;;
--cluster)
cluster=$2
shift
;;
--kind)
is_kind=1
;;
--k3d)
is_k3d=1
;;
-?*)
echo "Error: Unknown option: $1" >&2
exit 1
;;
*)
break
esac
shift
done
pr=$1
if [ -z "$pr" ]
then
echo "Error: ${0##*/} accepts 1 argument" >&2
echo "Usage:" >&2
echo " ${0##*/} ####" >&2
exit 1
fi
if [ -z "$GITHUB_TOKEN" ]
then
# shellcheck disable=SC2016
echo 'Error: Generate a personal access token at https://github.com/settings/tokens and set it in the $GITHUB_TOKEN env var'
exit 1
fi
linkerd2_pulls_url="https://api.github.com/repos/linkerd/linkerd2/pulls"
linkerd2_integration_url="https://api.github.com/repos/linkerd/linkerd2/actions/workflows/integration_tests.yml"
# Get the URL for downloading the artifacts archive
auth="Authorization: token $GITHUB_TOKEN"
branch=$(curl -sL -H "$auth" "$linkerd2_pulls_url/$pr" | jq -r '.head.ref')
artifacts=$(curl -sL -H "$auth" "$linkerd2_integration_url/runs?branch=$branch" | jq -r '.workflow_runs[0].artifacts_url')
archive=$(curl -sL -H "$auth" "$artifacts" | jq -r '.artifacts[0].archive_download_url')
bindir=$( cd "${BASH_SOURCE[0]%/*}" && pwd )
dir=$(mktemp -d -t "linkerd-pr-$pr.XXXXXXXXXX")
cd "$dir" || exit
echo "### Downloading images ###"
curl -L -o archive.zip -H "$auth" "$archive"
unzip -o archive.zip -d image-archives/
echo "### Loading images into Docker ###"
image=$(docker load -i image-archives/cli-bin.tar | sed 's/Loaded image: //')
tag=$(echo "$image" | cut -f 2 -d ":")
if [ $is_kind ] || [ $is_k3d ]
then
distro="k3d"
if [ $is_kind ]
then
distro="kind"
fi
"$bindir"/image-load --"$distro" --archive "$cluster"
else
for image in cni-plugin controller debug grafana proxy web
do
image=$(docker load -i "image-archives/$image.tar" | sed 's/Loaded image: //')
docker push "$image"
done
fi
cd -
rm -rf "$dir"
case $(uname) in
Darwin)
platform="darwin"
;;
Linux)
platform="linux"
;;
*)
platform="windows"
;;
esac
linkerd=$("$bindir"/docker-pull-binaries "$tag" | awk -v platform=$platform '$0 ~ platform')
echo ""
echo "Linkerd CLI available:"
echo "$linkerd"