[Fix] `nvm_get_arch`: proper value for alpine linux
parent
b64e5474ea
commit
ef7fc2f2c0
|
@ -126,9 +126,6 @@ jobs:
|
||||||
distribution: ${{ matrix.wsl-distrib }}
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
additional-packages: bash git curl ca-certificates wget
|
additional-packages: bash git curl ca-certificates wget
|
||||||
- name: Retrieve nvm on WSL
|
- name: Retrieve nvm on WSL
|
||||||
env:
|
|
||||||
C: /usr/bin/gcc-8
|
|
||||||
CXX: /usr/bin/g++-8
|
|
||||||
run: |
|
run: |
|
||||||
if [ -z "${{ matrix.method }}" ]; then
|
if [ -z "${{ matrix.method }}" ]; then
|
||||||
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | bash
|
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | bash
|
||||||
|
@ -139,6 +136,47 @@ jobs:
|
||||||
nvm install ${{ matrix.npm-node-version }}
|
nvm install ${{ matrix.npm-node-version }}
|
||||||
node -v
|
node -v
|
||||||
|
|
||||||
|
wsl_matrix_unofficial:
|
||||||
|
name: 'WSL nvm install'
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: wsl-bash {0}
|
||||||
|
runs-on: windows-latest
|
||||||
|
env:
|
||||||
|
WSLENV: NVM_INSTALL_GITHUB_REPO:NVM_INSTALL_VERSION:/p
|
||||||
|
NVM_NODEJS_ORG_MIRROR: https://unofficial-builds.nodejs.org/download/release
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
wsl-distrib:
|
||||||
|
- Alpine
|
||||||
|
npm-node-version:
|
||||||
|
- '--lts'
|
||||||
|
- '21'
|
||||||
|
- '18'
|
||||||
|
- '16'
|
||||||
|
- '14'
|
||||||
|
- '12'
|
||||||
|
- '11'
|
||||||
|
- '10'
|
||||||
|
method:
|
||||||
|
- ''
|
||||||
|
- 'script'
|
||||||
|
steps:
|
||||||
|
- uses: Vampire/setup-wsl@v2
|
||||||
|
with:
|
||||||
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
|
additional-packages: bash git curl ca-certificates wget
|
||||||
|
- name: Retrieve nvm on WSL
|
||||||
|
run: |
|
||||||
|
if [ -z "${{ matrix.method }}" ]; then
|
||||||
|
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | bash
|
||||||
|
else
|
||||||
|
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | METHOD="${{matrix.method}}" bash
|
||||||
|
fi
|
||||||
|
. "$HOME/.nvm/nvm.sh"
|
||||||
|
NVM_NODEJS_ORG_MIRROR=${{ env.NVM_NODEJS_ORG_MIRROR }} nvm install ${{ matrix.npm-node-version }}
|
||||||
|
|
||||||
nvm_windows:
|
nvm_windows:
|
||||||
name: 'tests, on windows'
|
name: 'tests, on windows'
|
||||||
permissions:
|
permissions:
|
||||||
|
|
4
nvm.sh
4
nvm.sh
|
@ -1965,6 +1965,10 @@ nvm_get_arch() {
|
||||||
HOST_ARCH=armv7l
|
HOST_ARCH=armv7l
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f "/etc/alpine-release" ]; then
|
||||||
|
NVM_ARCH=x64-musl
|
||||||
|
fi
|
||||||
|
|
||||||
nvm_echo "${NVM_ARCH}"
|
nvm_echo "${NVM_ARCH}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Save the PATH as it was when the test started to restore it when it finishes
|
||||||
|
ORIG_PATH="${PATH}"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
# Restore the PATH as it was when the test started
|
||||||
|
export PATH="${ORIG_PATH}"
|
||||||
|
rm -rf "${TMP_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
cleanup
|
||||||
|
echo "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
. ../../../nvm.sh
|
||||||
|
|
||||||
|
# Sets the PATH for these tests to include the symlinks to the mocked binaries
|
||||||
|
export PATH=".:${PATH}"
|
||||||
|
|
||||||
|
TMP_DIR=$(mktemp -d)
|
||||||
|
CHROOT_WITH_ALPINE="$TMP_DIR/with_alpine"
|
||||||
|
CHROOT_WITHOUT_ALPINE="$TMP_DIR/without_alpine"
|
||||||
|
|
||||||
|
setup_chroot() {
|
||||||
|
chroot_dir=$1
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
mkdir -p "${chroot_dir}/etc"
|
||||||
|
mkdir -p "${chroot_dir}/bin"
|
||||||
|
mkdir -p "${chroot_dir}/usr/bin"
|
||||||
|
mkdir -p "${chroot_dir}/lib64"
|
||||||
|
mkdir -p "${chroot_dir}/dev"
|
||||||
|
|
||||||
|
# Files and binaries
|
||||||
|
cp ../../../nvm.sh "${chroot_dir}/"
|
||||||
|
cp /bin/sh /usr/bin/dirname "${chroot_dir}/bin/"
|
||||||
|
[ "${chroot_dir}" = "${CHROOT_WITH_ALPINE}" ] && touch "${chroot_dir}/etc/alpine-release"
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
for binary in /bin/sh /usr/bin/dirname; do
|
||||||
|
for lib in $(ldd $binary | awk '{print $3}' | grep "^/"); do
|
||||||
|
dir=$(dirname "${lib}")
|
||||||
|
mkdir -p "${chroot_dir}${dir}"
|
||||||
|
cp "${lib}" "${chroot_dir}${dir}/"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Dynamic linker
|
||||||
|
cp /lib64/ld-linux-x86-64.so.2 "${chroot_dir}/lib64/"
|
||||||
|
|
||||||
|
# /dev/null
|
||||||
|
sudo mknod "${chroot_dir}/dev/null" c 1 3
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_chroot "${CHROOT_WITH_ALPINE}"
|
||||||
|
setup_chroot "${CHROOT_WITHOUT_ALPINE}"
|
||||||
|
|
||||||
|
# Run tests in chroot environments
|
||||||
|
ARCH_WITH_ALPINE=$(sudo chroot "${CHROOT_WITH_ALPINE}" /bin/sh -c ". ./nvm.sh && nvm_get_arch")
|
||||||
|
[ "${ARCH_WITH_ALPINE}" = "x64-musl" ] || die "Expected x64-musl for alpine environment but got ${ARCH_WITH_ALPINE}"
|
||||||
|
|
||||||
|
ARCH_WITHOUT_ALPINE=$(sudo chroot "${CHROOT_WITHOUT_ALPINE}" /bin/sh -c ". ./nvm.sh && nvm_get_arch")
|
||||||
|
[ "${ARCH_WITHOUT_ALPINE}" != "x64-musl" ] || die "Did not expect x64-musl for non-alpine environment"
|
||||||
|
|
||||||
|
# Run tests for nvm ls-remote
|
||||||
|
test_default_ls_remote() {
|
||||||
|
mock_response='N/A'
|
||||||
|
result=$(NVM_NODEJS_ORG_MIRROR='http://nonexistent-url' nvm ls-remote 18)
|
||||||
|
if [ "${result}" = "${mock_response}" ]; then
|
||||||
|
die "Test failed: Expected '${mock_response}' for but got '${result}'"
|
||||||
|
else
|
||||||
|
echo "Test passed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
test_unofficial_mirror_ls_remote() {
|
||||||
|
mock_response='v18.18.0 (LTS: Hydrogen)'
|
||||||
|
result=$(NVM_NODEJS_ORG_MIRROR='https://unofficial-builds.nodejs.org/download/release' nvm ls-remote 18.18.0 | sed -e 's/^[[:space:]]*//')
|
||||||
|
result=$(echo "${result}" | sed 's/\x1b\[[0-9;]*m//g')
|
||||||
|
|
||||||
|
if [ "${result}" = "${mock_response}" ]; then
|
||||||
|
echo "Test passed"
|
||||||
|
else
|
||||||
|
die "Test failed: Expected '${mock_response}' but got '${result}'"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
test_default_ls_remote
|
||||||
|
test_unofficial_mirror_ls_remote
|
||||||
|
|
||||||
|
cleanup
|
Loading…
Reference in New Issue