asdf-nodejs/bin/install

120 lines
3.2 KiB
Plaintext
Raw Normal View History

2015-05-24 12:26:04 +08:00
#!/usr/bin/env bash
set -eu -o pipefail
# shellcheck source=../lib/utils.sh
source "$(dirname "$0")/../lib/utils.sh"
2015-05-24 12:26:04 +08:00
install_nodejs() {
local install_type="$1" version_query="$2" install_path="$3"
local version=
version="$(resolve_version_query "$version_query")"
2015-05-24 12:26:04 +08:00
if [ "$version" != "$version_query" ]; then
install_aliased_version "$version" "$version_query" "$install_path"
else
install_canon_version "$install_type" "$version" "$install_path"
fi
}
2021-11-30 02:00:39 +08:00
try_to_update_nodebuild() {
local exit_code=0
"$ASDF_NODEJS_PLUGIN_DIR/lib/commands/command-update-nodebuild.bash" 2> /dev/null || exit_code=$?
if [ "$exit_code" != 0 ]; then
printf "
2021-12-07 11:03:28 +08:00
$(colored $YELLOW WARNING): Updating node-build failed with exit code %s. The installation will
2021-11-30 02:00:39 +08:00
try to continue with already installed local defintions. To debug what went
wrong, try to manually update node-build by running: \`asdf %s update nodebuild\`
2021-12-07 11:03:28 +08:00
\n" "$exit_code" "$ASDF_NODEJS_PLUGIN_NAME"
2021-11-30 02:00:39 +08:00
fi
}
install_canon_version() {
local install_type="$1" version="$2" install_path="$3"
local args=()
2022-02-10 07:12:37 +08:00
if [ "$install_type" = ref ] || [ "${ASDF_NODEJS_FORCE_COMPILE-}" ]; then
args+=(-c)
fi
2021-11-30 02:00:39 +08:00
try_to_update_nodebuild
Don't set `NODE_BUILD_BUILD_PATH` If not set, [node-build defaults to a timestamped subdirectory of `TMPDIR`](https://github.com/nodenv/node-build#custom-build-configuration), which is exactly what we need. This fixes https://github.com/asdf-vm/asdf-nodejs/issues/289 With this change, I see repeated builds fail in the exact same way (see https://github.com/asdf-vm/asdf-nodejs/issues/289 for a detailed explanation of what used to happen): $ PATH="$PWD:$PATH" ASDF_NODEJS_FORCE_COMPILE=1 asdf install nodejs 14.18.1 Trying to update node-build... ok WARNING: node-v14.18.1 is in LTS Maintenance mode and nearing its end of life. It only receives *critical* security updates, *critical* bug fixes and documentation updates. Installing node-v14.18.1... BUILD FAILED (Arch rolling using node-build 4.9.69) Inspect or clean up the working tree at /tmp/node-build.20220216023317.178521.tZF5cV Results logged to /tmp/node-build.20220216023317.178521.log Last 10 log lines: /tmp/node-build.20220216023317.178521.tZF5cV ~/tmp/demoing /tmp/node-build.20220216023317.178521.tZF5cV/node-v14.18.1 /tmp/node-build.20220216023317.178521.tZF5cV ~/tmp/demoing Node.js configure: Found Python 3.9.6... WARNING: C compiler (CC=gcc, 0.0.0) too old, need gcc 4.2 or clang 3.2 WARNING: Could not recognize `gas`: ERROR: Did not find a new enough assembler, install one or build with --openssl-no-asm. Please refer to BUILDING.md $ PATH="$PWD:$PATH" ASDF_NODEJS_FORCE_COMPILE=1 asdf install nodejs 14.18.1 Trying to update node-build... ok WARNING: node-v14.18.1 is in LTS Maintenance mode and nearing its end of life. It only receives *critical* security updates, *critical* bug fixes and documentation updates. Installing node-v14.18.1... BUILD FAILED (Arch rolling using node-build 4.9.69) Inspect or clean up the working tree at /tmp/node-build.20220216023335.178790.u0kcPV Results logged to /tmp/node-build.20220216023335.178790.log Last 10 log lines: /tmp/node-build.20220216023335.178790.u0kcPV ~/tmp/demoing /tmp/node-build.20220216023335.178790.u0kcPV/node-v14.18.1 /tmp/node-build.20220216023335.178790.u0kcPV ~/tmp/demoing Node.js configure: Found Python 3.9.6... WARNING: C compiler (CC=gcc, 0.0.0) too old, need gcc 4.2 or clang 3.2 WARNING: Could not recognize `gas`: ERROR: Did not find a new enough assembler, install one or build with --openssl-no-asm. Please refer to BUILDING.md
2022-02-16 18:34:24 +08:00
NODE_BUILD_CACHE_PATH="${NODE_BUILD_CACHE_PATH:-$ASDF_DOWNLOAD_PATH}" \
nodebuild_wrapped ${args+"${args[@]}"} "$version" "$install_path"
}
install_aliased_version() {
local version=$1
local version_query=$2
local install_path=$3
# install the true version and only symlink it to the alias
>&2 echo "Installing alias $version_query as $version"
asdf install "$(plugin_name)" "$version" \
|| die "Could not install version $version"
if [ -L "$install_path" ]; then
rm "$install_path"
else
rmdir "$install_path"
fi
>&2 echo "Linking \"$version_query\" to \"$version\""
ln -s "$(asdf where "$(plugin_name)" "$version")" "$install_path"
2015-05-24 12:26:04 +08:00
}
2020-09-24 08:09:50 +08:00
resolve_version_query() {
local version_query="$1"
local canon_version="$(
2020-09-24 08:09:50 +08:00
# Find the first candidate which the alias match, then print it version
print_index_tab \
| awk -F'\t' -v "alias=$version_query" '$1 == alias { print $2; exit }'
)"
if [ -z "$canon_version" ]; then
echo "$version_query"
else
echo "$canon_version"
fi
}
2015-05-24 12:26:04 +08:00
2020-09-24 08:09:50 +08:00
install_default_npm_packages() {
local default_npm_packages_file="${ASDF_NPM_DEFAULT_PACKAGES_FILE:=$HOME/.default-npm-packages}" filtered_packages=
if ! [ -f "$default_npm_packages_file" ]; then
return 0
fi
filtered_packages=$(grep -vE "^\s*#" < "$default_npm_packages_file")
if [ "${filtered_packages-}" ]; then
printf "$(colored $CYAN "Installing the following default packages globally: ")"
xargs printf "%s, " <<< "$filtered_packages"
printf "\x8\x8 \n" # Cleanup last comma
2021-11-30 02:00:39 +08:00
(
if [ -r "$ASDF_NODEJS_PLUGIN_DIR/bin/exec-env" ]; then
. "$ASDF_NODEJS_PLUGIN_DIR/bin/exec-env"
2021-11-30 02:00:39 +08:00
fi
xargs env PATH="$ASDF_INSTALL_PATH/bin:$PATH" npm install -g <<< "$filtered_packages"
2021-11-30 02:00:39 +08:00
)
fi
}
install_nodejs "$ASDF_INSTALL_TYPE" "$ASDF_INSTALL_VERSION" "$ASDF_INSTALL_PATH"
install_default_npm_packages \
|| printf "\n$(colored $YELLOW WARNING:) An error occurred when installing the default npm packages, but Node's installation succeeded\n"
asdf reshim "$(plugin_name)" "$ASDF_INSTALL_VERSION"