Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
python 3.10.10
114 changes: 114 additions & 0 deletions setup-asdf.bash
Original file line number Diff line number Diff line change
@@ -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 ✅"