mirror of https://github.com/linkerd/linkerd2.git
153 lines
3.7 KiB
Bash
Executable File
153 lines
3.7 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
|
|
|
|
cluster=''
|
|
is_kind=false
|
|
is_k3d=false
|
|
|
|
# Read script flags and arguments
|
|
while :
|
|
do
|
|
case $1 in
|
|
-h|--help)
|
|
echo "Install Linkerd with the changes made in a GitHub Pull Request.
|
|
|
|
Usage:
|
|
--cluster: The name of the cluster to use
|
|
|
|
# Install Linkerd into the current cluster
|
|
bin/install-pr 1234
|
|
|
|
# Install Linkerd into the current k3d cluster
|
|
bin/install-pr --k3d 1234
|
|
|
|
# Install Linkerd into the current KinD cluster
|
|
bin/install-pr --kind 1234
|
|
|
|
# Install Linkerd into the 'pr-1234' k3d cluster
|
|
bin/install-pr --k3d --cluster pr-1234 1234"
|
|
exit 0
|
|
;;
|
|
--cluster)
|
|
cluster=$2
|
|
shift
|
|
;;
|
|
--kind)
|
|
is_kind=true
|
|
;;
|
|
--k3d)
|
|
is_k3d=true
|
|
;;
|
|
-?*)
|
|
echo "Error: Unknown option: $1" >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
break
|
|
esac
|
|
shift
|
|
done
|
|
|
|
pr=$1
|
|
|
|
if [ -z "$pr" ]; then
|
|
echo "Error: ${0##*/} accepts 1 argument
|
|
Usage:
|
|
${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'
|
|
|
|
bindir=$( cd "${BASH_SOURCE[0]%/*}" && pwd )
|
|
|
|
# Get the URL for downloading the artifacts archive
|
|
auth="Authorization: token $GITHUB_TOKEN"
|
|
branch=$("$bindir"/scurl -H "$auth" "$linkerd2_pulls_url/$pr" | jq -r '.head.ref')
|
|
artifacts=$("$bindir"/scurl -H "$auth" "$linkerd2_integration_url/runs?branch=$branch" | jq -r '.workflow_runs[0].artifacts_url')
|
|
archive=$("$bindir"/scurl -H "$auth" "$artifacts" | jq -r '.artifacts[0].archive_download_url')
|
|
|
|
dir=$(mktemp -d -t "linkerd-pr-$pr.XXXXXXXXXX")
|
|
|
|
# shellcheck source=_docker.sh
|
|
. "$bindir"/_docker.sh
|
|
|
|
cd "$dir" || exit
|
|
|
|
echo '### Downloading images ###'
|
|
|
|
"$bindir"/scurl -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 ":")
|
|
|
|
for image in "${DOCKER_IMAGES[@]}"
|
|
do
|
|
docker load -i "image-archives/$image.tar"
|
|
done
|
|
|
|
if [ "$is_kind" = true ] || [ "$is_k3d" = true ]; then
|
|
# When importing into k3d or kind, the images must be renamed to use the
|
|
# proper registry so that users don't have to change the default install
|
|
# output.
|
|
docker_rename_registry "$tag" 'ghcr.io/linkerd' 'cr.l5d.io/linkerd'
|
|
distro=k3d
|
|
if [ "$is_kind" = true ]; then
|
|
distro=kind
|
|
fi
|
|
export TAG=$tag
|
|
"$bindir"/image-load --"$distro" --cluster "$cluster"
|
|
else
|
|
# The images were built with the ghcr.io registry so when pushing to a
|
|
# remote cluster for testing, no renaming needs to occur.
|
|
for image in "${DOCKER_IMAGES[@]}"
|
|
do
|
|
docker push "$image"
|
|
done
|
|
fi
|
|
|
|
cd -
|
|
|
|
rm -rf "$dir"
|
|
|
|
case $(uname) in
|
|
Darwin)
|
|
platform=darwin
|
|
;;
|
|
Linux)
|
|
platform=linux
|
|
;;
|
|
*)
|
|
platform=windows
|
|
;;
|
|
esac
|
|
|
|
# Images created based off PRs use the ghcr.io registry, so override the
|
|
# default here when pulling the binary.
|
|
export DOCKER_REGISTRY=ghcr.io/linkerd
|
|
linkerd=$("$bindir"/docker-pull-binaries "$tag" | awk -v platform=$platform '$0 ~ platform')
|
|
|
|
echo "
|
|
Linkerd CLI available:
|
|
$linkerd"
|