diff --git a/setup-asdf.bash b/setup-asdf.bash new file mode 100644 index 000000000..36b8617cb --- /dev/null +++ b/setup-asdf.bash @@ -0,0 +1,114 @@ +#!/usr/bin/env bash + +# +# Setup ASDF and Plugins +# +# @example +# +# ASDF_PLUGIN_URL_nodejs=https://someurl \ +# ./setup.bash +# + +set -e + +[ $(command -v git) ] || { + echo "==> ๐Ÿ“›๐Ÿ“ฆ Missing git" + exit 1 +} +[ $(command -v curl) ] || { + echo "==> ๐Ÿ“›๐Ÿ“ฆ Missing curl" + exit 1 +} + +# Local vars +ASDF_VERSION=${ASDF_VERSION:-v0.9.0} +ASDF_HOME=$HOME/.asdf +ASDF_BIN=$ASDF_HOME/asdf.sh + +## +# Helper to idempotently add strings to target files +# +append_uniquely() { + # this is a more correct way to test for presence of strings in files + # and then act on the outcome. + cat "${1}" | grep -zqv "${2}" && { + echo "==> โœ Writing \"$2\" into \"$1\" " + echo "${2}" >>$1 + } || { + echo "==> โœ… '${2}' already exists in ${1}" + } +} + +get_processor() { + [[ $(sysctl -e -n machdep.cpu.brand_string) =~ "Apple" ]] && { + echo 'M1' + } || uname -m +} +get_platform() { + uname -s +} + +case "${SHELL}" in +/bin/bash) + SHELL_PROFILE=~/.bashrc + SHELL_NAME="bash" + ;; +/bin/zsh) + SHELL_PROFILE=~/.zshrc + SHELL_NAME="zsh" + ;; +esac + +echo "==> ๐Ÿ’ [ASDF] install with plugins" + +if [ ! -f "$ASDF_BIN" ]; then + echo "===> โคต๏ธ ASDF not detected ... installing" + git clone https://github.com/asdf-vm/asdf.git "$ASDF_HOME" --branch $ASDF_VERSION + [ ! command -v asdf ] &>/dev/null && { + echo "====> โš•๏ธ adding to shell profile" + append_uniquely "$SHELL_PROFILE" ". $ASDF_HOME/asdf.sh" + append_uniquely "$SHELL_PROFILE" ". $ASDF_HOME/completions/asdf.bash" + } +fi + +source "$ASDF_BIN" + +for plugin in $(cut -d' ' -f1 ./.tool-versions); do + echo "==> ๐Ÿ’ [ASDF] Ensure ${plugin} plugin" + if [ -d "$ASDF_HOME/plugins/${plugin}" ]; then + echo "===> ๐Ÿ“ฆ attempting upgrade" + asdf plugin-update "${plugin}" + else + echo "===> โคต๏ธ installing" + plugin_url_var=ASDF_PLUGIN_URL_${plugin//-/_} + plugin_url="${!plugin_url_var}" + + if [ ${!plugin_url_var+x} ]; then + echo "====> ๐Ÿ’ [${plugin}] installed from ${plugin_url}" + fi + + asdf plugin-add "${plugin}" "${plugin_url}" + fi +done + +PROCESSOR=$(get_processor) + +echo "==> ๐Ÿ’ [ASDF] install tools" +case $PROCESSOR in +M1) + echo "===> ๐Ÿ’ [ASDF] install for M1" + RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC \ + arch -arm64 \ + asdf install + ;; + +x86_64) + echo "===> ๐Ÿ’ [ASDF] install for x86_64" + asdf install + ;; +esac + +echo "==> ๐Ÿ’ [ASDF] reshim globals" +asdf reshim + +echo "==> ๐Ÿ’ [ASDF] Done โœ…"