bin_dir='/usr/local/bin'
function abort() {
echo "${1:-'unexpected error'}" 1>&2
exit 1
}
function require_tool() {
local tool="${1:-}"
type "$tool" &>/dev/null || abort "$tool must be installed to run this script"
}
function verify_supported_os() {
local os="$(uname)"
if [[ "$os" == "Darwin" ]]; then
echo "Installing RN for MacOS"
elif [[ "$os" == "Linux" ]]; then
echo "Installing RN for Linux"
else
abort "rn does not support $os at this time"
fi
}
function verify_required_tools() {
require_tool curl
require_tool unzip
}
function download_release() {
rm -rf /tmp/rn.zip
curl -sSL \
-o /tmp/rn.zip \
'https://gitlab.com/bff/rn/builds/artifacts/master/download?job=release_build'
}
function install_release() {
local shim_dir="$HOME/.config/rn"
local tmp_dir='/tmp/rn'
rm -rf "$shim_dir" "$tmp_dir"
mkdir "$shim_dir" "$tmp_dir"
unzip -q -d /tmp/rn /tmp/rn.zip
mv /tmp/rn/bin/rn.sh "$shim_dir/"
echo 'Replacing the existing rn binary with the newly downloaded version. This requires root privileges.'
sudo rm -f "$bin_dir/rn"
case "$(uname)" in
'Linux')
sudo mv "$tmp_dir/bin/linux_x64/rn" "$bin_dir/"
;;
'Darwin')
sudo mv "$tmp_dir/bin/macos_x64/rn" "$bin_dir/"
;;
*)
abort 'Unsupported OS! Unable to install RN'
;;
esac
}
function setup_instructions() {
echo
echo "------------------------------------"
echo "Success! RN is installed in $bin_dir"
echo "------------------------------------"
(echo "$PATH" | grep "$bin_dir" &>/dev/null) || \
cat <<-EOF
Sadly, it looks like $bin_dir isn't in your PATH, so RN needs a little more setup.
Add this to your ~/.bashrc (or equivalent file):
export PATH="$bin_dir:\$PATH"
EOF
local init_script='if [[ -r "$HOME/.config/rn/rn.sh" ]]; then source "$HOME/.config/rn/rn.sh"; else echo "RN shim script is missing" fi'
grep "$init_script" ~/.bashrc &>/dev/null || \
cat <<-EOF
Your ~/.bashrc file doesn't appear to include the shim script which makes RN automatically run when you
cd into a new directory. To add the shim, add this to your ~/.bashrc (or equivalent file):
$init_script
EOF
echo
}
function main() {
verify_supported_os
verify_required_tools
download_release
install_release
setup_instructions
}
main