#!/usr/bin/env bash

#  Copyright 2020 The Kubernetes Authors.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

set -o errexit
set -o pipefail

# Turn colors in this script off by setting the NO_COLOR variable in your
# environment to any value:
#
# $ NO_COLOR=1 test.sh
NO_COLOR=${NO_COLOR:-""}
if [ -z "$NO_COLOR" ]; then
  header=$'\e[1;33m'
  reset=$'\e[0m'
else
  header=''
  reset=''
fi

function header_text {
  echo "$header$*$reset"
}

function setup_envtest_env {
  header_text "setting up env vars"

  # Setup env vars
  KUBEBUILDER_ASSETS=${KUBEBUILDER_ASSETS:-""}
  if [[ -z "${KUBEBUILDER_ASSETS}" ]]; then
    export KUBEBUILDER_ASSETS=$1/bin
  fi
}

# fetch k8s API gen tools and make it available under envtest_root_dir/bin.
#
# Skip fetching and untaring the tools by setting the SKIP_FETCH_TOOLS variable
# in your environment to any value:
#
# $ SKIP_FETCH_TOOLS=1 ./check-everything.sh
#
# If you skip fetching tools, this script will use the tools already on your
# machine.
function fetch_envtest_tools {
  SKIP_FETCH_TOOLS=${SKIP_FETCH_TOOLS:-""}
  if [ -n "$SKIP_FETCH_TOOLS" ]; then
    return 0
  fi

  tmp_root=/tmp
  envtest_root_dir=$tmp_root/envtest

  k8s_version="${ENVTEST_K8S_VERSION:-1.19.2}"
  goarch="$(go env GOARCH)"
  goos="$(go env GOOS)"

  if [[ "$goos" != "linux" && "$goos" != "darwin" ]]; then
    echo "OS '$goos' not supported. Aborting." >&2
    return 1
  fi

  local dest_dir="${1}"

  # use the pre-existing version in the temporary folder if it matches our k8s version
  if [[ -x "${dest_dir}/bin/kube-apiserver" ]]; then
    version=$("${dest_dir}"/bin/kube-apiserver --version)
    if [[ $version == *"${k8s_version}"* ]]; then
      header_text "Using cached envtest tools from ${dest_dir}"
      return 0
    fi
  fi

  header_text "fetching envtest tools@${k8s_version} (into '${dest_dir}')"
  envtest_tools_archive_name="kubebuilder-tools-$k8s_version-$goos-$goarch.tar.gz"
  envtest_tools_download_url="https://storage.googleapis.com/kubebuilder-tools/$envtest_tools_archive_name"

  envtest_tools_archive_path="$tmp_root/$envtest_tools_archive_name"
  if [ ! -f $envtest_tools_archive_path ]; then
    curl --fail --show-error -sL ${envtest_tools_download_url} -o "$envtest_tools_archive_path"
  fi

  mkdir -p "${dest_dir}"
  tar -C "${dest_dir}" --strip-components=1 -zvxf "$envtest_tools_archive_path"
}
