Files
nvm/test/fast/Unit tests/nvm_get_arch alpine
T
Jesse ZhuandJordan Harband ce157c1171 [Fix] support arm64-musl on Alpine Linux
Node.js unofficial-builds publishes linux-arm64-musl binaries since v20.20.1 / v22.21.1 / v24+.
Map NVM_ARCH=arm64 to arm64-musl on Alpine so `nvm install`
resolves to the correct tarball instead of the glibc-linked arm64 build that won't run against musl.

[Tests] `nvm_get_arch`: expect arm64-musl on Alpine

Co-authored-by: Jesse Zhu <jesse@itjesse.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2026-05-23 01:35:12 +09:00

49 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
ORIG_PATH="${PATH}"
cleanup() {
rm -f ./uname
export PATH="${ORIG_PATH}"
}
die () { cleanup; echo "$@" ; exit 1; }
: nvm.sh
\. ../../../nvm.sh
MOCKS_DIR="$(pwd)/../../mocks"
export PATH=".:${PATH}"
# On Alpine (where /etc/alpine-release exists), both x64 and arm64 should get
# the -musl suffix, since unofficial-builds publishes musl binaries for both.
# On non-Alpine, neither should get -musl.
if [ -f "/etc/alpine-release" ]; then
# x64 on Alpine should produce x64-musl
ln -sf "${MOCKS_DIR}/uname_linux_x86_64" ./uname
OUTPUT="$(nvm_get_arch)"
rm -f ./uname
[ "_${OUTPUT}" = "_x64-musl" ] || die "x64 on Alpine should be x64-musl, got ${OUTPUT}"
# aarch64 on Alpine should produce arm64-musl
ln -sf "${MOCKS_DIR}/uname_linux_aarch64" ./uname
OUTPUT="$(nvm_get_arch)"
rm -f ./uname
[ "_${OUTPUT}" = "_arm64-musl" ] || die "aarch64 on Alpine should be arm64-musl, got ${OUTPUT}"
else
# x64 on non-Alpine should produce x64 (no musl suffix)
ln -sf "${MOCKS_DIR}/uname_linux_x86_64" ./uname
OUTPUT="$(nvm_get_arch)"
rm -f ./uname
[ "_${OUTPUT}" = "_x64" ] || die "x64 on non-Alpine should be x64, got ${OUTPUT}"
# aarch64 on non-Alpine should produce arm64
ln -sf "${MOCKS_DIR}/uname_linux_aarch64" ./uname
OUTPUT="$(nvm_get_arch)"
rm -f ./uname
[ "_${OUTPUT}" = "_arm64" ] || die "aarch64 on non-Alpine should be arm64, got ${OUTPUT}"
fi
cleanup