mirror of https://github.com/databricks/cli.git
140 lines
3.3 KiB
Bash
140 lines
3.3 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -euo pipefail
|
||
|
|
||
|
# Set the GitHub repository for the Databricks CLI.
|
||
|
export GH_REPO="databricks/cli"
|
||
|
|
||
|
# Synthesize the directory name for the snapshot build.
|
||
|
function cli_snapshot_directory() {
|
||
|
dir="cli"
|
||
|
|
||
|
# Append OS
|
||
|
case "$(uname -s)" in
|
||
|
Linux)
|
||
|
dir="${dir}_linux"
|
||
|
;;
|
||
|
Darwin)
|
||
|
dir="${dir}_darwin"
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unknown operating system: $os"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Append architecture
|
||
|
case "$(uname -m)" in
|
||
|
x86_64)
|
||
|
dir="${dir}_amd64_v1"
|
||
|
;;
|
||
|
i386|i686)
|
||
|
dir="${dir}_386"
|
||
|
;;
|
||
|
arm64|aarch64)
|
||
|
dir="${dir}_arm64"
|
||
|
;;
|
||
|
armv7l|armv8l)
|
||
|
dir="${dir}_arm_6"
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unknown architecture: $arch"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
echo $dir
|
||
|
}
|
||
|
|
||
|
BRANCH=$1
|
||
|
shift
|
||
|
|
||
|
# Default to main branch if branch is not specified.
|
||
|
if [ -z "$BRANCH" ]; then
|
||
|
BRANCH=main
|
||
|
fi
|
||
|
|
||
|
if [ -z "$BRANCH" ]; then
|
||
|
echo "Please specify which branch to bugbash..."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check if the "gh" command is available.
|
||
|
if ! command -v gh &> /dev/null; then
|
||
|
echo "The GitHub CLI (gh) is required to download the snapshot build."
|
||
|
echo "Install and configure it with:"
|
||
|
echo ""
|
||
|
echo " brew install gh"
|
||
|
echo " gh auth login"
|
||
|
echo ""
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
echo "Looking for a snapshot build of the Databricks CLI on branch $BRANCH..."
|
||
|
|
||
|
# Find last successful build on $BRANCH.
|
||
|
last_successful_run_id=$(
|
||
|
gh run list -b "$BRANCH" -w release-snapshot --json 'databaseId,conclusion' |
|
||
|
jq 'limit(1; .[] | select(.conclusion == "success")) | .databaseId'
|
||
|
)
|
||
|
if [ -z "$last_successful_run_id" ]; then
|
||
|
echo "Unable to find last successful build of the release-snapshot workflow for branch $BRANCH."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Determine artifact name with the right binaries for this runner.
|
||
|
case "$(uname -s)" in
|
||
|
Linux)
|
||
|
artifact="cli_linux_snapshot"
|
||
|
;;
|
||
|
Darwin)
|
||
|
artifact="cli_darwin_snapshot"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Create a temporary directory to download the artifact.
|
||
|
dir=$(mktemp -d)
|
||
|
|
||
|
# Download the artifact.
|
||
|
echo "Downloading the snapshot build..."
|
||
|
gh run download "$last_successful_run_id" -n "$artifact" -D "$dir/.bin"
|
||
|
dir="$dir/.bin/$(cli_snapshot_directory)"
|
||
|
if [ ! -d "$dir" ]; then
|
||
|
echo "Directory does not exist: $dir"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Make CLI available on $PATH.
|
||
|
chmod +x "$dir/databricks"
|
||
|
export PATH="$dir:$PATH"
|
||
|
|
||
|
# Set the prompt to indicate the bugbash environment and exec.
|
||
|
export PS1="(bugbash $BRANCH) \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
|
||
|
|
||
|
# Display completion instructions.
|
||
|
echo ""
|
||
|
echo "=================================================================="
|
||
|
|
||
|
if [[ ${BASH_VERSINFO[0]} -lt 5 ]]; then
|
||
|
echo -en "\033[31m"
|
||
|
echo "You have Bash version < 5 installed... completion won't work."
|
||
|
echo -en "\033[0m"
|
||
|
echo ""
|
||
|
echo "Install it with:"
|
||
|
echo ""
|
||
|
echo " brew install bash bash-completion"
|
||
|
echo ""
|
||
|
echo "=================================================================="
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
echo "To load completions in your current shell session:"
|
||
|
echo ""
|
||
|
echo " source /opt/homebrew/etc/profile.d/bash_completion.sh"
|
||
|
echo " source <(databricks completion bash)"
|
||
|
echo ""
|
||
|
echo "=================================================================="
|
||
|
echo ""
|
||
|
|
||
|
# Exec into a new shell.
|
||
|
# Note: don't use zsh because on macOS it _always_ overwrites PS1.
|
||
|
exec /usr/bin/env bash
|