diff --git a/.gitignore b/.gitignore index f38630c..3ac0283 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,5 @@ $RECYCLE.BIN/ *.lnk # End of https://www.toptal.com/developers/gitignore/api/linux,macos,windows + +.node-build diff --git a/lib/commands/command-nodebuild.bash b/lib/commands/command-nodebuild.bash new file mode 100644 index 0000000..aa46936 --- /dev/null +++ b/lib/commands/command-nodebuild.bash @@ -0,0 +1,32 @@ +#! /usr/bin/env bash + +set -eu -o pipefail + +source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../utils.sh" + +: "${ASDF_NODEJS_NODEBUILD_HOME=$ASDF_NODEJS_PLUGIN_DIR/.node-build}" + +# node-build environment variables being overriden by asdf-nodejs +export NODE_BUILD_CACHE_PATH="${NODE_BUILD_CACHE_PATH:-$ASDF_NODEJS_CACHE_DIR/node-build}" + +if [ "$NODEJS_ORG_MIRROR" ]; then + export NODE_BUILD_MIRROR_URL="$NODEJS_ORG_MIRROR" +fi + +if [ "${ASDF_CONCURRENCY-}" ]; then + export MAKE_OPTS="${MAKE_OPTS:-} -j \"$ASDF_CONCURRENCY\"" +fi + +nodebuild="${ASDF_NODEJS_NODEBUILD:-$ASDF_NODEJS_NODEBUILD_HOME/bin/node-build}" + +if ! [ -x "$nodebuild" ]; then + printf "Binary for node-build not found\n" + + if ! [ "$ASDF_NODEJS_NODEBUILD" ]; then + printf "Are you sure it was installed? Try running \`asdf %s update-nodebuild\` to do a local update or install\n" "$(plugin_name)" + fi + + exit 1 +fi + +exec "$nodebuild" "$@" diff --git a/lib/commands/command-update-nodebuild.bash b/lib/commands/command-update-nodebuild.bash new file mode 100755 index 0000000..e1137a0 --- /dev/null +++ b/lib/commands/command-update-nodebuild.bash @@ -0,0 +1,28 @@ +#! /usr/bin/env bash + +set -eu -o pipefail + +source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../utils.sh" + +: "${ASDF_NODEJS_NODEBUILD_HOME=$ASDF_NODEJS_PLUGIN_DIR/.node-build}" +: "${ASDF_NODEJS_NODEBUILD_REPOSITORY=https://github.com/nodenv/node-build.git}" + +ensure_updated_project() { + local pull_exit_code= + + if ! [ -d "$ASDF_NODEJS_NODEBUILD_HOME" ]; then + printf "Cloning node-build...\n" + git clone "$ASDF_NODEJS_NODEBUILD_REPOSITORY" "$ASDF_NODEJS_NODEBUILD_HOME" + else + printf "Trying to update node-build...\n" + git -C "$ASDF_NODEJS_NODEBUILD_HOME" pull origin master || pull_exit_code=$? + + if [ "$pull_exit_code" ]; then + printf "ERROR: Updating the node-build repository exited with code %s\n" "$pull_exit_code" + printf "Please check if the git repository at %s doesn't have any changes or anything that might not allow a git pull\n" "$ASDF_NODEJS_NODEBUILD_REPOSITORY" + exit 1 + fi + fi +} + +ensure_updated_project diff --git a/lib/utils.sh b/lib/utils.sh index 4540575..5b3dd46 100644 --- a/lib/utils.sh +++ b/lib/utils.sh @@ -10,15 +10,17 @@ fi ASDF_NODEJS_KEYRING=asdf-nodejs.gpg -ASDF_NODEJS_PLUGIN_NAME="$(basename "$(dirname "$(dirname "$0")")")" +export ASDF_NODEJS_PLUGIN_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) + # TODO: Replace with an asdf variable once asdf starts providing the plugin name # as a variable +export ASDF_NODEJS_PLUGIN_NAME=$(basename "$ASDF_NODEJS_PLUGIN_DIR") plugin_name() { printf "%s\n" "$ASDF_NODEJS_PLUGIN_NAME" } -ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}" -export ASDF_NODEJS_PLUGIN_NAME ASDF_DIR +export ASDF_NODEJS_CACHE_DIR="${ASDF_DATA_DIR:-${ASDF_DIR:-$HOME/.asdf}}/tmp/$ASDF_NODEJS_PLUGIN_NAME/cache" +export ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}" die() { >&2 echo "$@" @@ -61,7 +63,7 @@ filter_version_candidates() { done } -versions_cache_dir="${ASDF_DATA_DIR:-${ASDF_HOME:-$HOME/.asdf}}/tmp/$(plugin_name)/cache" +versions_cache_dir="$ASDF_NODEJS_CACHE_DIR/versions-tab" mkdir -p "$versions_cache_dir" etag_file="$versions_cache_dir/etag"