#!/bin/bash
# Taking this init script from https://github.com/envoyproxy/envoy-mobile/blob/main/bazelw, have used this in the past
# to conveniently bootstrap Bazel.

set -euo pipefail

readonly bazelisk_version="1.20.0"

if [[ $OSTYPE == darwin* ]]; then
  readonly bazel_os="darwin"
else
  readonly bazel_os="linux"
fi

raw_arch="$(uname -m)"
readonly raw_arch
if [[ "$raw_arch" == "aarch64" || "$raw_arch" == "arm64" ]]; then
  readonly bazel_arch="arm64"
else
  readonly bazel_arch="amd64"
fi

bazel_platform="$bazel_os-$bazel_arch"
case "$bazel_platform" in
  darwin-arm64)
    readonly bazel_version_sha="29753341c0ddc35931fb240e247fbba0b83ef81bccc2433dd075363ec02a67a6"
    ;;
  linux-arm64)
    readonly bazel_version_sha="467ec3821aca5e278c8570b7c25e0dfc1a061d2873be89e4a266aaf488148426"
    ;;
  linux-amd64)
    readonly bazel_version_sha="d9af1fa808c0529753c3befda75123236a711d971d3485a390507122148773a3"
    ;;

  *)
    echo "Unsupported platform $OSTYPE $raw_arch" >&2
    exit 1
esac

readonly bazel_version_url="https://github.com/bazelbuild/bazelisk/releases/download/v$bazelisk_version/bazelisk-$bazel_platform"
script_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly bazelisk="$script_root/tmp/bazel/versions/bazelisk-$bazelisk_version-$bazel_platform"

if [[ ! -x "$bazelisk" ]]; then
  echo "Installing bazelisk..." >&2
  mkdir -p "$(dirname "$bazelisk")"

  download_bazelisk() {
    curl --fail -L --retry 5 --retry-connrefused --silent --progress-bar \
      --output "$bazelisk" "$bazel_version_url"
  }

  download_bazelisk || download_bazelisk
  if echo "$bazel_version_sha  $bazelisk" | shasum --check --status; then
    chmod +x "$bazelisk"
  else
    echo "Bazelisk sha mismatch" >&2
    rm -f "$bazelisk"
    exit 1
  fi
fi

exec "$bazelisk" "$@"
