-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* change bun to download from us * make it use branch
- Loading branch information
1 parent
50911b1
commit 7806c12
Showing
2 changed files
with
313 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,311 @@ | ||
#!/usr/bin/env bash | ||
set -euo pipefail | ||
|
||
platform=$(uname -ms) | ||
|
||
if [[ ${OS:-} = Windows_NT ]]; then | ||
if [[ $platform != MINGW64* ]]; then | ||
powershell -c "irm bun.sh/install.ps1|iex" | ||
exit $? | ||
fi | ||
fi | ||
|
||
# Reset | ||
Color_Off='' | ||
|
||
# Regular Colors | ||
Red='' | ||
Green='' | ||
Dim='' # White | ||
|
||
# Bold | ||
Bold_White='' | ||
Bold_Green='' | ||
|
||
if [[ -t 1 ]]; then | ||
# Reset | ||
Color_Off='\033[0m' # Text Reset | ||
|
||
# Regular Colors | ||
Red='\033[0;31m' # Red | ||
Green='\033[0;32m' # Green | ||
Dim='\033[0;2m' # White | ||
|
||
# Bold | ||
Bold_Green='\033[1;32m' # Bold Green | ||
Bold_White='\033[1m' # Bold White | ||
fi | ||
|
||
error() { | ||
echo -e "${Red}error${Color_Off}:" "$@" >&2 | ||
exit 1 | ||
} | ||
|
||
info() { | ||
echo -e "${Dim}$@ ${Color_Off}" | ||
} | ||
|
||
info_bold() { | ||
echo -e "${Bold_White}$@ ${Color_Off}" | ||
} | ||
|
||
success() { | ||
echo -e "${Green}$@ ${Color_Off}" | ||
} | ||
|
||
command -v unzip >/dev/null || | ||
error 'unzip is required to install bun' | ||
|
||
if [[ $# -gt 2 ]]; then | ||
error 'Too many arguments, only 2 are allowed. The first can be a specific tag of bun to install. (e.g. "bun-v0.1.4") The second can be a build variant of bun to install. (e.g. "debug-info")' | ||
fi | ||
|
||
case $platform in | ||
'Darwin x86_64') | ||
target=darwin-x64 | ||
;; | ||
'Darwin arm64') | ||
target=darwin-aarch64 | ||
;; | ||
'Linux aarch64' | 'Linux arm64') | ||
target=linux-aarch64 | ||
;; | ||
'MINGW64'*) | ||
target=windows-x64 | ||
;; | ||
'Linux x86_64' | *) | ||
target=linux-x64 | ||
;; | ||
esac | ||
|
||
if [[ $target = darwin-x64 ]]; then | ||
# Is this process running in Rosetta? | ||
# redirect stderr to devnull to avoid error message when not running in Rosetta | ||
if [[ $(sysctl -n sysctl.proc_translated 2>/dev/null) = 1 ]]; then | ||
target=darwin-aarch64 | ||
info "Your shell is running in Rosetta 2. Downloading bun for $target instead" | ||
fi | ||
fi | ||
|
||
GITHUB=${GITHUB-"https://github.com"} | ||
|
||
github_repo="$GITHUB/oven-sh/bun" | ||
|
||
if [[ $target = darwin-x64 ]]; then | ||
# If AVX2 isn't supported, use the -baseline build | ||
if [[ $(sysctl -a | grep machdep.cpu | grep AVX2) == '' ]]; then | ||
target=darwin-x64-baseline | ||
fi | ||
fi | ||
|
||
if [[ $target = linux-x64 ]]; then | ||
# If AVX2 isn't supported, use the -baseline build | ||
if [[ $(cat /proc/cpuinfo | grep avx2) = '' ]]; then | ||
target=linux-x64-baseline | ||
fi | ||
fi | ||
|
||
exe_name=bun | ||
|
||
if [[ $# = 2 && $2 = debug-info ]]; then | ||
target=$target-profile | ||
exe_name=bun-profile | ||
info "You requested a debug build of bun. More information will be shown if a crash occurs." | ||
fi | ||
|
||
if [[ $# = 0 ]]; then | ||
bun_uri=$github_repo/releases/latest/download/bun-$target.zip | ||
else | ||
bun_uri=$github_repo/releases/download/$1/bun-$target.zip | ||
fi | ||
|
||
install_env=BUN_INSTALL | ||
bin_env=\$$install_env/bin | ||
|
||
install_dir=${!install_env:-$HOME/.bun} | ||
bin_dir=$install_dir/bin | ||
exe=$bin_dir/bun | ||
|
||
if [[ ! -d $bin_dir ]]; then | ||
mkdir -p "$bin_dir" || | ||
error "Failed to create install directory \"$bin_dir\"" | ||
fi | ||
|
||
curl --fail --location --progress-bar --output "$exe.zip" "$bun_uri" || | ||
error "Failed to download bun from \"$bun_uri\"" | ||
|
||
unzip -oqd "$bin_dir" "$exe.zip" || | ||
error 'Failed to extract bun' | ||
|
||
mv "$bin_dir/bun-$target/$exe_name" "$exe" || | ||
error 'Failed to move extracted bun to destination' | ||
|
||
chmod +x "$exe" || | ||
error 'Failed to set permissions on bun executable' | ||
|
||
rm -r "$bin_dir/bun-$target" "$exe.zip" | ||
|
||
tildify() { | ||
if [[ $1 = $HOME/* ]]; then | ||
local replacement=\~/ | ||
|
||
echo "${1/$HOME\//$replacement}" | ||
else | ||
echo "$1" | ||
fi | ||
} | ||
|
||
success "bun was installed successfully to $Bold_Green$(tildify "$exe")" | ||
|
||
if command -v bun >/dev/null; then | ||
# Install completions, but we don't care if it fails | ||
IS_BUN_AUTO_UPDATE=true $exe completions &>/dev/null || : | ||
|
||
echo "Run 'bun --help' to get started" | ||
exit | ||
fi | ||
|
||
refresh_command='' | ||
|
||
tilde_bin_dir=$(tildify "$bin_dir") | ||
quoted_install_dir=\"${install_dir//\"/\\\"}\" | ||
|
||
if [[ $quoted_install_dir = \"$HOME/* ]]; then | ||
quoted_install_dir=${quoted_install_dir/$HOME\//\$HOME/} | ||
fi | ||
|
||
echo | ||
|
||
case $(basename "$SHELL") in | ||
fish) | ||
# Install completions, but we don't care if it fails | ||
IS_BUN_AUTO_UPDATE=true SHELL=fish $exe completions &>/dev/null || : | ||
|
||
commands=( | ||
"set --export $install_env $quoted_install_dir" | ||
"set --export PATH $bin_env \$PATH" | ||
) | ||
|
||
fish_config=$HOME/.config/fish/config.fish | ||
tilde_fish_config=$(tildify "$fish_config") | ||
|
||
if [[ -w $fish_config ]]; then | ||
{ | ||
echo -e '\n# bun' | ||
|
||
for command in "${commands[@]}"; do | ||
echo "$command" | ||
done | ||
} >>"$fish_config" | ||
|
||
info "Added \"$tilde_bin_dir\" to \$PATH in \"$tilde_fish_config\"" | ||
|
||
refresh_command="source $tilde_fish_config" | ||
else | ||
echo "Manually add the directory to $tilde_fish_config (or similar):" | ||
|
||
for command in "${commands[@]}"; do | ||
info_bold " $command" | ||
done | ||
fi | ||
;; | ||
zsh) | ||
# Install completions, but we don't care if it fails | ||
IS_BUN_AUTO_UPDATE=true SHELL=zsh $exe completions &>/dev/null || : | ||
|
||
commands=( | ||
"export $install_env=$quoted_install_dir" | ||
"export PATH=\"$bin_env:\$PATH\"" | ||
) | ||
|
||
zsh_config=$HOME/.zshrc | ||
tilde_zsh_config=$(tildify "$zsh_config") | ||
|
||
if [[ -w $zsh_config ]]; then | ||
{ | ||
echo -e '\n# bun' | ||
|
||
for command in "${commands[@]}"; do | ||
echo "$command" | ||
done | ||
} >>"$zsh_config" | ||
|
||
info "Added \"$tilde_bin_dir\" to \$PATH in \"$tilde_zsh_config\"" | ||
|
||
refresh_command="exec $SHELL" | ||
else | ||
echo "Manually add the directory to $tilde_zsh_config (or similar):" | ||
|
||
for command in "${commands[@]}"; do | ||
info_bold " $command" | ||
done | ||
fi | ||
;; | ||
bash) | ||
# Install completions, but we don't care if it fails | ||
IS_BUN_AUTO_UPDATE=true SHELL=bash $exe completions &>/dev/null || : | ||
|
||
commands=( | ||
"export $install_env=$quoted_install_dir" | ||
"export PATH=\"$bin_env:\$PATH\"" | ||
) | ||
|
||
bash_configs=( | ||
"$HOME/.bashrc" | ||
"$HOME/.bash_profile" | ||
) | ||
|
||
if [[ ${XDG_CONFIG_HOME:-} ]]; then | ||
bash_configs+=( | ||
"$XDG_CONFIG_HOME/.bash_profile" | ||
"$XDG_CONFIG_HOME/.bashrc" | ||
"$XDG_CONFIG_HOME/bash_profile" | ||
"$XDG_CONFIG_HOME/bashrc" | ||
) | ||
fi | ||
|
||
set_manually=true | ||
for bash_config in "${bash_configs[@]}"; do | ||
tilde_bash_config=$(tildify "$bash_config") | ||
|
||
if [[ -w $bash_config ]]; then | ||
{ | ||
echo -e '\n# bun' | ||
|
||
for command in "${commands[@]}"; do | ||
echo "$command" | ||
done | ||
} >>"$bash_config" | ||
|
||
info "Added \"$tilde_bin_dir\" to \$PATH in \"$tilde_bash_config\"" | ||
|
||
refresh_command="source $bash_config" | ||
set_manually=false | ||
break | ||
fi | ||
done | ||
|
||
if [[ $set_manually = true ]]; then | ||
echo "Manually add the directory to $tilde_bash_config (or similar):" | ||
|
||
for command in "${commands[@]}"; do | ||
info_bold " $command" | ||
done | ||
fi | ||
;; | ||
*) | ||
echo 'Manually add the directory to ~/.bashrc (or similar):' | ||
info_bold " export $install_env=$quoted_install_dir" | ||
info_bold " export PATH=\"$bin_env:\$PATH\"" | ||
;; | ||
esac | ||
|
||
echo | ||
info "To get started, run:" | ||
echo | ||
|
||
if [[ $refresh_command ]]; then | ||
info_bold " $refresh_command" | ||
fi | ||
|
||
info_bold " bun --help" |