mirror of https://github.com/databricks/cli.git
Add script to make testing of code on branches easier (#1844)
## Changes Convenience script to exec into a shell where a CLI build for a specific branch is made available. ## Tests Manually from `/tmp` with `bash <([path]) demo-dashboards`.
This commit is contained in:
parent
ffdbec87cc
commit
ca45e53f42
|
@ -0,0 +1,13 @@
|
|||
# Bugbash
|
||||
|
||||
The script in this directory can be used to conveniently exec into a shell
|
||||
where a CLI build for a specific branch is made available.
|
||||
|
||||
## Usage
|
||||
|
||||
This script prompts if you do NOT have at least Bash 5 installed,
|
||||
but works without command completion with earlier versions.
|
||||
|
||||
```shell
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/databricks/cli/main/internal/bugbash/exec.sh) my-branch
|
||||
```
|
|
@ -0,0 +1,139 @@
|
|||
#!/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
|
Loading…
Reference in New Issue