[Fix] nvm_get_make_jobs: count cores on platforms the case does not name
Tests: release process / release (push) Waiting to run
Code scanning - action / CodeQL-Build (push) Waiting to run
Tests: `nvm install-latest-npm` / matrix (push) Waiting to run
latest-npm.yml / nvm install-latest-npm (${{ fromJson(needs.matrix.outputs.latest) }}) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (0.10) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (0.12) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (14.16) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (14.17) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (20.4) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (20.5) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (21) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (4.4) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (4.5) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (4.6) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (5.9) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (6.1) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (9.0) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (9.1) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (9.2) (push) Blocked by required conditions
Tests: `nvm install-latest-npm` / nvm install-latest-npm (push) Blocked by required conditions
Tests: linting / eclint (push) Waiting to run
Tests: linting / dockerfile_lint (push) Waiting to run
Tests: linting / doctoc (push) Waiting to run
Tests: linting / test_naming (push) Waiting to run
Tests: linting / check_exec (push) Waiting to run
Tests: linting / all linting (push) Blocked by required conditions
Tests: nvm install with set -e / matrix (push) Waiting to run
nvm-install-test.yml / test (no nvmrc, ${{ fromJson(needs.matrix.outputs.matrix) }}, 1 shlvl) (push) Blocked by required conditions
nvm-install-test.yml / test (no nvmrc, ${{ fromJson(needs.matrix.outputs.matrix) }}, 2 shlvls) (push) Blocked by required conditions
nvm-install-test.yml / test (nvmrc, ${{ fromJson(needs.matrix.outputs.matrix) }}, 1 shlvl) (push) Blocked by required conditions
nvm-install-test.yml / test (nvmrc, ${{ fromJson(needs.matrix.outputs.matrix) }}, 2 shlvls) (push) Blocked by required conditions
Tests: nvm install with set -e / finisher (push) Blocked by required conditions
Tests on Windows: `nvm install` / WSL nvm install (, 12, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Ubuntu-18.04) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (bash_completion, bash) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (install.sh, bash) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (nvm-exec, bash) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (nvm.sh, bash) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (nvm.sh, dash) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (nvm.sh, ksh) (push) Waiting to run
Tests: shellcheck / shellcheck_matrix (nvm.sh, sh) (push) Waiting to run
Tests: shellcheck / shellcheck (push) Blocked by required conditions
Tests: alpine / fast arm64 (alpine 3, bash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3, dash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3, sh) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3, zsh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3, bash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3, dash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3, sh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3, zsh) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.15, bash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.15, dash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.15, sh) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.15, zsh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.15, bash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.15, dash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.15, sh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.15, zsh) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.19, bash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.19, dash) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.19, sh) (push) Waiting to run
Tests: alpine / fast arm64 (alpine 3.19, zsh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.19, bash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.19, dash) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.19, sh) (push) Waiting to run
Tests: alpine / fast x64 (alpine 3.19, zsh) (push) Waiting to run
Tests: alpine / musl-binary arm64 (alpine 3, node v22.21.1) (push) Waiting to run
Tests: alpine / musl-binary arm64 (alpine 3, node v24.9.0) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3, node v22.12.0) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.10, node v10.24.1) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.10, node v8.17.0) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.12, node v12.22.12) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.15, node v14.21.3) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.16, node v16.20.2) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.18, node v18.20.4) (push) Waiting to run
Tests: alpine / musl-binary arm64 (alpine 3.20, node v20.20.1) (push) Waiting to run
Tests: alpine / musl-binary x64 (alpine 3.20, node v20.18.1) (push) Waiting to run
Tests: alpine / all alpine tests (push) Blocked by required conditions
Tests: fast / fast (bash, gawk) (push) Waiting to run
Tests: fast / fast (dash, gawk) (push) Waiting to run
Tests: fast / fast (sh, gawk) (push) Waiting to run
Tests: fast / fast (zsh, gawk) (push) Waiting to run
Tests: fast / fast (bash, mawk) (push) Waiting to run
Tests: fast / fast (dash, mawk) (push) Waiting to run
Tests: fast / fast (sh, mawk) (push) Waiting to run
Tests: fast / fast (zsh, mawk) (push) Waiting to run
Tests: fast / all fast tests (push) Blocked by required conditions
Tests: installation_iojs / installation_iojs without curl (bash) (push) Waiting to run
Tests: installation_iojs / installation_iojs without curl (dash) (push) Waiting to run
Tests: installation_iojs / installation_iojs without curl (sh) (push) Waiting to run
Tests: installation_iojs / installation_iojs without curl (zsh) (push) Waiting to run
Tests: installation_iojs / actually compile io.js from source (gcc 4.9 container) (push) Waiting to run
Tests: installation_iojs / all installation_iojs tests (push) Blocked by required conditions
Tests: installation_node / installation_node (bash) (push) Waiting to run
Tests: installation_node / installation_node (bash, without curl) (push) Waiting to run
Tests: installation_node / installation_node (dash) (push) Waiting to run
Tests: installation_node / installation_node (dash, without curl) (push) Waiting to run
Tests: installation_node / installation_node (sh) (push) Waiting to run
Tests: installation_node / installation_node (sh, without curl) (push) Waiting to run
Tests: installation_node / installation_node (zsh) (push) Waiting to run
Tests: installation_node / installation_node (zsh, without curl) (push) Waiting to run
Tests: installation_node / all installation_node tests (push) Blocked by required conditions
Tests: xenial / xenial (bash) (push) Waiting to run
Tests: xenial / xenial (dash) (push) Waiting to run
Tests: xenial / xenial (sh) (push) Waiting to run
Tests: xenial / xenial (zsh) (push) Waiting to run
Tests: xenial / all xenial tests (push) Blocked by required conditions
urchin tests / tests (bash, install_script) (push) Waiting to run
urchin tests / tests (bash, installation_iojs) (push) Waiting to run
urchin tests / tests (bash, slow) (push) Waiting to run
urchin tests / tests (bash, sourcing) (push) Waiting to run
urchin tests / tests (dash, installation_iojs) (push) Waiting to run
urchin tests / tests (dash, slow) (push) Waiting to run
urchin tests / tests (dash, sourcing) (push) Waiting to run
urchin tests / tests (sh, installation_iojs) (push) Waiting to run
urchin tests / tests (sh, slow) (push) Waiting to run
urchin tests / tests (sh, sourcing) (push) Waiting to run
urchin tests / tests (zsh, installation_iojs) (push) Waiting to run
urchin tests / tests (zsh, slow) (push) Waiting to run
urchin tests / tests (zsh, sourcing) (push) Waiting to run
urchin tests / all test suites, all shells (push) Blocked by required conditions
update readme TOC / update readme TOC (push) Waiting to run
Tests on Windows: `nvm install` / MSYS fail prefix nvm install (push) Waiting to run
Tests on Windows: `nvm install` / MSYS nvm install (--default 12) (push) Waiting to run
Tests on Windows: `nvm install` / MSYS nvm install (--lts) (push) Waiting to run
Tests on Windows: `nvm install` / MSYS nvm install (--no-progress 10) (push) Waiting to run
Tests on Windows: `nvm install` / Cygwin nvm install (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Ubuntu-18.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 11, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Debian-12) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Debian-13) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Ubuntu-20.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Ubuntu-24.04) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, --lts, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, --lts, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 10, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 11, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 11, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 12, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 14, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 16, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 18, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (, 21, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, --lts, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, --lts, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 10, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 11, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 12, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 14, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 16, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 18, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Alpine-3.17) (push) Waiting to run
Tests on Windows: `nvm install` / WSL nvm install (script, 21, Alpine-3.23) (push) Waiting to run
Tests on Windows: `nvm install` / tests, on windows (push) Blocked by required conditions

`nvm_get_os` also returns `win` (Cygwin/MSYS/MinGW) and the empty string,
neither of which had an arm,
so `NVM_CPU_CORES` went unassigned
and nvm asked the user to report a gap it already knew about.
On an unrecognized `uname` that also meant a single-threaded source build;
`win` refuses source builds a few lines later either way.

`NUMBER_OF_PROCESSORS` comes last because Windows scopes it to the calling process' processor group.

Assigning `NVM_CPU_CORES` in every arm also keeps the
`nvm_is_natural_num` check below from aborting dash and ksh under `set -u`.
This commit is contained in:
Jordan Harband
2026-09-10 17:08:50 -07:00
parent 7fc22fc9c7
commit a4f801ed72
2 changed files with 157 additions and 0 deletions
+10
View File
@@ -2877,6 +2877,16 @@ nvm_get_make_jobs() {
"_aix")
NVM_CPU_CORES="$(pmcycles -m | wc -l)"
;;
*)
# `_NPROCESSORS_ONLN` is how glibc, FreeBSD, macOS, and Cygwin spell it;
# the unprefixed name is what POSIX.1-2024 standardizes, and what NetBSD
# and Solaris answer to. Windows shells inherit `NUMBER_OF_PROCESSORS`;
# the smallest ones ship neither `getconf` nor `nproc`.
NVM_CPU_CORES="$(command getconf _NPROCESSORS_ONLN 2>/dev/null \
|| command getconf NPROCESSORS_ONLN 2>/dev/null \
|| command nproc 2>/dev/null \
|| nvm_echo "${NUMBER_OF_PROCESSORS-}")"
;;
esac
if ! nvm_is_natural_num "${NVM_CPU_CORES}"; then
nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.'
+147
View File
@@ -0,0 +1,147 @@
#!/bin/sh
# `nvm_get_make_jobs` sets the global `NVM_MAKE_JOBS` instead of echoing it, so
# every case runs it in this shell, with its output captured to files.
ORIG_PATH="${PATH}"
TMP_DIR="$(mktemp -d)"
# the probe shims live under `mktemp -d` rather than `.`, because this directory
# is shared with every other unit test and a leaked `getconf` would poison them
SHIMS="${TMP_DIR}/bin"
OUT="${TMP_DIR}/out"
ERR="${TMP_DIR}/err"
cleanup () {
export PATH="${ORIG_PATH}"
rm -rf "${TMP_DIR}"
}
die () { cleanup; echo "$@" ; exit 1; }
: nvm.sh
\. ../../../nvm.sh
mkdir -p "${SHIMS}"
shim () {
{
echo '#!/bin/sh'
echo "$2"
} > "${SHIMS}/$1"
chmod +x "${SHIMS}/$1"
}
# a probe that behaves as if it were not installed, and whose complaint must
# never reach the user
shim_absent () {
shim "$1" "echo 'PROBE_NOISE: $1' >&2; exit 127"
}
REAL_OS="$(nvm_get_os)"
FAKE_OS=''
nvm_get_os () {
nvm_echo "${FAKE_OS}"
}
run () {
FAKE_OS="$1"
shift
NVM_MAKE_JOBS=''
nvm_get_make_jobs "$@" >"${OUT}" 2>"${ERR}"
}
assert_jobs () {
[ "_${NVM_MAKE_JOBS}" = "_$1" ] \
|| die "${2}: expected NVM_MAKE_JOBS ${1}, got '${NVM_MAKE_JOBS}'"
}
assert_stdout () {
ACTUAL="$(cat "${OUT}")"
[ "_${ACTUAL}" = "_$1" ] \
|| die "${2}: expected stdout '${1}', got '${ACTUAL}'"
}
# deliberately narrower than "stderr is empty": ksh93 has no `local`, so every
# nvm.sh function already sprays `local: not found` here (see #574)
assert_no_probe_noise () {
! nvm_grep -q 'PROBE_NOISE' "${ERR}" \
|| die "${1}: a failed probe leaked to stderr: '$(cat "${ERR}")'"
}
assert_not_nagged () {
! nvm_grep -q 'Please report an issue on GitHub' "${ERR}" \
|| die "${1}: unexpected report-an-issue message"
}
assert_nagged () {
nvm_grep -q 'Please report an issue on GitHub' "${ERR}" \
|| die "${1}: expected the report-an-issue message, got '$(cat "${ERR}")'"
}
export PATH="${SHIMS}:${ORIG_PATH}"
# an OS the `case` does not name still gets a real core count
shim getconf 'echo 4'
shim_absent nproc
run win
assert_jobs 3 'win'
assert_stdout 'Detected that you have 4 CPU core(s)
Running with 3 threads to speed up the build' 'win'
assert_not_nagged 'win'
assert_no_probe_noise 'win'
run ''
assert_jobs 3 'unknown OS'
assert_not_nagged 'unknown OS'
# Solaris and NetBSD spell the `getconf` variable without the leading underscore
shim getconf 'case "$1" in NPROCESSORS_ONLN) echo 4 ;; *) exit 1 ;; esac'
run win
assert_jobs 3 'unprefixed getconf name'
assert_not_nagged 'unprefixed getconf name'
# with no `getconf`, `nproc` answers
shim_absent getconf
shim nproc 'echo 4'
run win
assert_jobs 3 'nproc'
assert_not_nagged 'nproc'
assert_no_probe_noise 'nproc'
# Cygwin/MSYS/MinGW inherit `NUMBER_OF_PROCESSORS` from Windows
shim_absent nproc
NUMBER_OF_PROCESSORS=4
run win
assert_jobs 3 'NUMBER_OF_PROCESSORS'
assert_not_nagged 'NUMBER_OF_PROCESSORS'
assert_no_probe_noise 'NUMBER_OF_PROCESSORS'
# with nothing to probe, nvm still says so instead of guessing
unset NUMBER_OF_PROCESSORS
run win
assert_jobs 1 'no probes'
assert_nagged 'no probes'
# the named arms keep priority: darwin asks `sysctl`, not `getconf`
shim getconf 'echo 99'
shim sysctl 'echo 4'
run darwin
assert_jobs 3 'darwin uses sysctl'
assert_not_nagged 'darwin uses sysctl'
export PATH="${ORIG_PATH}"
# an explicit count short-circuits detection entirely
run '' 7
assert_jobs 7 'explicit jobs'
assert_stdout 'number of `make` jobs: 7' 'explicit jobs'
# on the real host, detected or not, the result is always usable
run "${REAL_OS}"
nvm_is_natural_num "${NVM_MAKE_JOBS}" \
|| die "real host: expected a natural number, got '${NVM_MAKE_JOBS}'"
cleanup