Compare commits

...

65 Commits

Author SHA1 Message Date
Jordan Harband
833530eb12 [Tests] attempt to fix failing test 2023-11-03 15:51:24 -07:00
Jordan Harband
4bdd57ba0f [Fix] install.sh: when NVM_INSTALL_GITHUB_REPO is set, issue a warning
This should only annoy those testing their PRs; real users should never set this env var
2023-11-02 21:10:09 -07:00
Jordan Harband
d02ddcac2c [Fix] nvm_get_mirror: disallow some non-URL characters
This should be improved in the future, but is fine for now
2023-11-01 21:01:28 -07:00
Andrius Solopovas
ef7fc2f2c0 [Fix] nvm_get_arch: proper value for alpine linux 2023-09-30 23:54:11 +01:00
Jordan Harband
b64e5474ea [Tests] ensure windows tests install a node that actually works
- disable failing Alpine tests
 - disable Ubuntu-18.04 tests on node 18+
 - add Ubuntu-20.04 tests
2023-11-01 16:12:12 -07:00
Jordan Harband
1f970ccb7a [Fix] nvm_normalize_lts: switch from expr to case
avoids `expr: warning: ^lts/-[1-9][0-9]*: using ^ as the first character of a basic regular expression is not portable; it is ignored`
2023-11-01 12:24:29 -07:00
Jordan Harband
6743aef70c [New] nvm_resolve_alias: only resolve one line of a multiline alias file 2023-10-23 14:41:14 -07:00
Jordan Harband
10cdda081f [Tests] update test mocks (new LTS, iron) 2023-10-25 15:39:12 -07:00
Jordan Harband
8241287349 [New] aliases: skip leading blank lines in alias file 2023-10-23 14:06:19 -07:00
Jordan Harband
6aeab3349c [Robustness] nvm_list_aliases: avoid overwritten sort 2023-10-23 14:05:37 -07:00
Jordan Harband
bfce5889f7 [Test] update test mocks 2023-10-23 14:53:39 -07:00
Justin Dhillon
fd412645ca [readme] add section on bare nvm install 2023-10-23 10:25:26 -07:00
Jordan Harband
2426a0c4b2 [security] add prose explaining OpenSSF CII Best Practices badge results
Fixes https://github.com/openjs-foundation/security-collab-space/issues/35.
2023-10-20 15:58:27 -07:00
Michael Di Prisco
8a83b36688 [readme] missing parenthesis 2023-10-06 02:36:26 +02:00
Jordan Harband
414e8d426f [Tests] switch cygwin mirror 2023-10-09 14:50:40 -07:00
zhangdiandian
1b102ab9a6 [Tests] fix filename typo
Signed-off-by: zhangdiandian <1635468471@qq.com>
2023-10-09 07:31:04 +00:00
Peter Dave Hello
d4a733e4d8 [Dockerfile] Remove apt src disabling, no longer needed 2023-09-19 20:03:01 +08:00
Nam
1de3333651 [Dockerfile] [Fix] add missing leading slash in path 2023-09-18 17:42:40 +07:00
Jordan Harband
1eaaada499 [Perf] nvm_check_file_permissions: do not traverse into symlinks 2023-08-25 22:49:41 -07:00
Jordan Harband
c92adb3c47 v0.39.5 2023-08-21 21:10:10 -07:00
Oliver Henshaw
15eba7b7e6 [Fix] nvm_strip_path: Preserve leading/trailing colons
Path lists in environmental variables often give special meaning to
empty entries (e.g. in PATH or MANPATH). These are represented by
leading or trailing colons, or by doubled colons in the middle of the
list.

Adjust the awk invocation to correctly deal with trailing colons by
printing the separator before every field except the first, and then
printing the final separator that is read from the input - this will
either be a colon or the null string. This preserves leading and
trailing colons in all cases while not adding extra colons in the wrong
place.

Add test to confirm the correct behaviour.

Fixes #3144
2023-06-21 15:47:52 +01:00
heungjun.park
a1601eddb8 [readme] add examples of setting specific versions as default
Co-authored-by: heungjun.park <rockheung@gmail.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2023-07-20 17:39:37 +09:00
Jordan Harband
324b81a722 [Fix] allow checksums to pass with a leading backslash
See https://unix.stackexchange.com/a/555061/137489
2023-08-06 14:51:48 +12:00
Jordan Harband
55075db96d [Tests] add some nvm_do_install tests 2022-12-27 22:57:07 -08:00
Jordan Harband
4618ce0aa1 [Tests] a cleaner name for the windows tests 2022-12-27 22:32:09 -08:00
Jordan Harband
3afdce0a2c [Fix] nvm install-latest-npm: ensure npm 10 does not install on unsupported nodes
See https://github.com/npm/cli/pull/6674
2023-07-26 13:21:03 -07:00
Jordan Harband
8fbf8ab694 v0.39.4 2023-07-24 18:29:54 -07:00
Jordan Harband
4fc91d408c [Dev Deps] update markdown-link-check, semver 2023-07-24 18:24:39 -07:00
Emmanuel Ogbizi
f86847fdd2 [readme] add nvshim tool alongside avn 2020-04-15 19:27:44 -04:00
emmanuel-ferdman
9a769630d7 [readme] fix typo in resolv.conf filename
Signed-off-by: emmanuel-ferdman <35470921+emmanuel-ferdman@users.noreply.github.com>
2023-06-18 15:41:40 +03:00
Augustin Mauroy
c26422a03e [readme] Update logo header 2023-06-05 10:34:20 +02:00
milesfrain
7c3cd81ad9 [readme] Add instructions on how to install without editing shell config
I had to dig into #2410 to learn about the `PROFILE=/dev/null` technique to install without appending to my shell config. Figured this note would be good to add in the main installation docs.
Also added a note on how to do this as a one-liner which was not obvious for me.
2023-04-25 13:49:16 -07:00
Deniz Eren Evrendilek
0ebda7eea3 [meta] Remove unavailable testing script
Fixes #3104
2023-05-01 11:23:38 -07:00
Deniz
5410ae57ba [Fix] fix node download link for armv8l
Fixes #3035
2023-04-29 16:41:31 -07:00
Spike Grobstein
70aa611abc [Fix] nvm exec: no longer error with '-q: invalid option' for zsh users
the `nvm.sh` file assigns and exports an `NVM_CD_FLAGS` variable if it
was sourced from a zsh shell. the fact that it's exported means that
it'll be assigned in all child processes, including the `nvm-exec`
script, which uses bash as the interpreter.

Bash's `cd` command doesn't have a `-q` flag, so if the `NVM_CD_FLAGS`
is assigned `-q`, the script will error out and incorrectly claim that
the node version isn't installed.

this also manifests itself in the `nvm exec` command.

Example:

```console
$ nvm exec 16.14.0 npm --version
Running node v16.14.0 (npm v8.3.1)
/Users/<ME>/.nvm/nvm.sh: line 28: cd: -q: invalid option
cd: usage: cd [-L|[-P [-e]] [-@]] [dir]
both the tree and the node path are required
N/A: version "v16.14.0 -> N/A" is not yet installed.

You need to run "nvm install v16.14.0" to install it before using it.
```

To address this, we unset the `NVM_CD_FLAGS` at the start of the
`nvm-exec` script, before loading `nvm.sh`.
2023-04-21 20:40:01 -07:00
Jordan Harband
c08b38a2a4 [Fix] nvm_print_npm_version: if npm exists but its node crashes, do not print the npm version 2023-04-28 10:57:57 -07:00
Jordan Harband
a07cd41af1 [Fix] nvm_ls_current: when node is present but crashes immediately, echo "none" 2023-04-28 10:55:03 -07:00
JC (Jonathan Chen)
d1a22a63bd [readme] cdnvm function: fix shellcheck errors
Resolves #3081
2023-04-09 09:21:56 -04:00
Leo Zlotnikov
0d9b5c2a00 [Fix] fix directory traversal when workdir path is not readable 2023-04-08 17:24:41 +01:00
Peter Dave Hello
44e1d9c911 [Dockerfile] Update base image from Ubuntu 20.04 to 22.04, cc #2877 2023-04-06 01:22:10 +08:00
Jordan Harband
b1331c20b0 [Tests] add unit tests for nvm_download_artifact 2023-04-06 09:23:33 -07:00
Peter Dave Hello
766341fca1 [readme] Update Travis CI badge and link url
travis-ci.org is deprecated and replaced by app.travis-ci.com for a while
2023-04-03 22:50:48 +08:00
Jordan Harband
946da2e743 [Dev Deps] update markdown-link-check 2023-03-22 16:20:48 -07:00
Dennis
dde04f9392 [Fix] recognize 32Bit docker container and use x86 arch 2023-03-22 14:52:40 -07:00
William Baker
ffcb5213e2 [Perf] Improve performance of listing aliases
Fixes #3054
2023-03-10 00:53:29 -05:00
Jordan Harband
ea3b65f02e [Tests] npm bin has been removed 2023-03-21 13:31:52 -07:00
Qasim Abdullah
ee6f766712 [Tests] downgrade python to v2 on travis
- TCI Support
 - python 2.7
 - skip build-essential
2023-03-21 22:45:38 +05:00
Nicolas signed-log FORMICHELLA
edacf8275e [Fix] Remove unneeded call to ls in nvm_arch
Remove the call to `ls` that was used to determine the symlink
destination

Reasoning :

* `od` resolves symlink itself due to the use of `fopen`
* Prevent the behaviour of `od` which will hang if the filename is
  empty (i.e. `/sbin/init` missing) as it will be waiting for `stdin`
  compared to quitting with error if the file just doesn't exist

Fixes #3006
2023-01-22 11:48:59 +01:00
Jordan Harband
f36516b472 [Tests] move install script tests to github actions 2022-10-26 14:47:18 -07:00
Jordan Harband
dc691121b8 [Tests] improve debug output on failure 2022-12-27 21:41:39 -08:00
Jordan Harband
ce35311657 [Tests] force the NVM_DIR to the expected location, for tests 2022-12-27 21:40:48 -08:00
Thomas Levine
fe06825a96 [tests] Update urchin repository link 2022-12-25 10:38:26 +00:00
Jordan Harband
a60ac08a80 [actions] allow nvm to be installed 2022-12-26 13:22:07 -08:00
Jordan Harband
552db40622 v0.39.3 2022-12-23 12:57:56 -08:00
Jordan Harband
788c0a425e [meta] use HEAD instead of master where possible 2022-12-23 12:53:40 -08:00
Dani Schuhman
333c52ec04 [meta] Improve contributors documentation
Incorporates old Contributing.md with more thorough details on how to contribute, create bug reports, set up the dev environment, and creating PR's itself.
2022-04-15 11:59:16 -04:00
mattjaf
59f448d595 [Docs] added WSL troubleshooting with solution to (6) Could not resolve host: raw.githubusercontent.com
Fixes #2958.
2022-11-30 19:25:20 -08:00
Jordan Harband
d0bc227127 [Tests] update test mocks 2022-12-22 16:07:00 -08:00
Jordan Harband
bf438742a7 [Tests] move installation_node tests back to xenial 2022-12-22 16:16:10 -08:00
Jordan Harband
447940acb3 [Tests] move tests that fail on focal to a separate suite that runs on xenial 2022-12-22 11:26:27 -08:00
Jordan Harband
0ec2ca979c [Tests] update travis to use focal
- xenial can't build node 18
 - bionic can't build node 0.6 or 18
2022-10-26 11:12:19 -07:00
Jordan Harband
b86c91efe3 [actions] fix latest-npm tests so they use this repo’s nvm instead of the last published one 2022-12-22 15:27:46 -08:00
Jordan Harband
ac357c59ef [Fix] nvm install-latest-npm: npm v6.14.18 can not be installed from npm < v4.4.4 2022-12-21 14:28:15 -08:00
Jordan Harband
abe5e30a9d [shellcheck] remove duplicate function 2022-12-22 13:00:12 -08:00
Jordan Harband
4c4b0d64ed [Tests] fix nvm_list_aliases test to use mocks for LTS aliases 2022-10-26 10:31:26 -07:00
64 changed files with 1422 additions and 3042 deletions

20
.github/SECURITY.md vendored
View File

@@ -1,3 +1,23 @@
# Security
Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
## OpenSSF CII Best Practices
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/684/badge)](https://bestpractices.coreinfrastructure.org/projects/684)
There are three “tiers”: passing, silver, and gold.
### Passing
We meet 100% of the “passing” criteria.
### Silver
We meet 95% of the “silver” criteria. The gaps are as follows:
- we do not have a DCO or a CLA process for contributions.
- because we only have one maintainer, the project has no way to continue if that maintainer stops being active.
- we do not currently document “what the user can and cannot expect in terms of security” for our project. This is planned to be completed in 2023.
### Gold
We meet 65% of the “gold” criteria. The gaps are as follows:
- we do not yet have the “silver” badge; see all the gaps above.
- We do not include a copyright or license statement in each source file. Efforts are underway to change this archaic practice into a suggestion instead of a hard requirement.

View File

@@ -50,16 +50,21 @@ jobs:
with:
allowed-endpoints:
github.com:443
raw.githubusercontent.com:443
iojs.org:443
nodejs.org:443
registry.npmjs.org:443
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@main
name: 'nvm install-latest-npm'
name: 'install node'
with:
node-version: ${{ matrix.node-version }}
skip-ls-check: true
skip-install: true
skip-latest-npm: true
- run: npm --version
- run: '. ./nvm.sh ; nvm install-latest-npm'
name: 'nvm install-latest-npm'
- run: npm --version
node:

View File

@@ -12,6 +12,7 @@ jobs:
with:
allowed-endpoints:
github.com:443
raw.githubusercontent.com:443
nodejs.org:443
registry.npmjs.org:443
- uses: actions/checkout@v3
@@ -31,6 +32,7 @@ jobs:
allowed-endpoints:
ghcr.io:443
github.com:443
raw.githubusercontent.com:443
pkg-containers.githubusercontent.com:443
nodejs.org:443
registry.npmjs.org:443
@@ -50,6 +52,7 @@ jobs:
with:
allowed-endpoints:
github.com:443
raw.githubusercontent.com:443
nodejs.org:443
registry.npmjs.org:443
- uses: actions/checkout@v3
@@ -68,6 +71,7 @@ jobs:
with:
allowed-endpoints:
github.com:443
raw.githubusercontent.com:443
- uses: actions/checkout@v3
- name: check tests filenames
run: ./rename_test.sh --check

56
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
name: urchin tests
on: [push]
jobs:
tests:
permissions:
contents: write
name: "tests"
runs-on: ubuntu-latest
defaults:
run:
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
strategy:
fail-fast: false
matrix:
include:
- shell: bash
suite: install_script
# shell:
# - bash
# suite:
# - install_script
steps:
- name: Harden Runner
uses: step-security/harden-runner@v1
with:
allowed-endpoints:
github.com:443
registry.npmjs.org:443
raw.githubusercontent.com:443
nodejs.org:443
iojs.org:443
- uses: actions/checkout@v3
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
- run: curl --version
- run: wget --version
- uses: ljharb/actions/node/run@main
name: 'npm install && version checks'
with:
node-version: 'lts/*'
skip-ls-check: true
shell-command: echo installed
- run: npm ls urchin
- run: env
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
nvm:
name: 'all test suites, all shells'
needs: [tests]
runs-on: ubuntu-latest
steps:
- run: 'echo tests completed'

View File

@@ -55,7 +55,8 @@ jobs:
- name: Install Cygwin
shell: bash
run: |
export SITE='https://mirror.clarkson.edu/cygwin/'
export SITE='https://mirror.clarkson.edu/cygwin/' # see https://archlinux.org/mirrors/clarkson.edu/1603/ for uptime status
export SITE='https://mirrors.kernel.org/sourceware/cygwin/'
export LOCALDIR="$(pwd)"
export ROOTDIR="$USERPROFILE\\cygwin"
export PACKAGES='bash,git,curl'
@@ -98,19 +99,29 @@ jobs:
matrix:
wsl-distrib:
- Debian
- Alpine
# - Alpine # fails
- Ubuntu-20.04
- Ubuntu-18.04
npm-node-version:
- '--lts'
- '21'
- '18'
- '16'
- '14'
- '12'
- '11'
- '10'
exclude:
- wsl-distrib: Ubuntu-18.04
npm-node-version: '--lts'
- wsl-distrib: Ubuntu-18.04
npm-node-version: '21'
- wsl-distrib: Ubuntu-18.04
npm-node-version: '18'
method:
- ''
- 'script'
steps:
- uses: Vampire/setup-wsl@v1
- uses: Vampire/setup-wsl@v2
with:
distribution: ${{ matrix.wsl-distrib }}
additional-packages: bash git curl ca-certificates wget
@@ -123,11 +134,54 @@ jobs:
fi
. "$HOME/.nvm/nvm.sh"
nvm install ${{ matrix.npm-node-version }}
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:
permissions:
contents: none
needs: [wsl_matrix, cygwin_matrix, msys_matrix, msys_fail_install]
runs-on: ubuntu-latest
steps:
- run: 'echo tests completed'
name: 'tests, on windows'
permissions:
contents: none
needs: [wsl_matrix, cygwin_matrix, msys_matrix, msys_fail_install]
runs-on: ubuntu-latest
steps:
- run: 'echo tests completed'

View File

@@ -1,5 +1,5 @@
language: generic
dist: xenial
dist: focal
addons:
apt:
packages:
@@ -22,13 +22,49 @@ before_install:
- bash --version | head
- zsh --version
- dpkg -s dash | grep ^Version | awk '{print $2}'
# install python
- pyenv install 2.7.18
- pyenv local 2.7.18 || echo 'pyenv failed'
- python -V
install:
- if [ -z "${SHELLCHECK-}" ]; then nvm install 16 && nvm unalias default && npm install && npm prune && npm ls urchin doctoc eclint dockerfile_lint; fi
- '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y'
script:
- if [ -n "${SHELL-}" ] && [ -n "${TEST_SUITE}" ]; then if [ "${TEST_SUITE}" = 'installation_iojs' ]; then travis_retry make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL ; else make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL; fi; fi
- if [ -n "${SHELL-}" ] && [ -n "${TEST_SUITE}" ]; then if [ "${TEST_SUITE}" = 'installation_iojs' ] || [ "${TEST_SUITE}" = 'xenial' ]; then travis_retry make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL ; else make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL; fi; fi
before_cache:
- if [ -n "$WITHOUT_CURL" ]; then sudo apt-get install curl -y ; fi
jobs:
include:
- env: SHELL=bash TEST_SUITE=installation_node
dist: xenial
- env: SHELL=bash TEST_SUITE=installation_node WITHOUT_CURL=1
dist: xenial
- env: SHELL=sh TEST_SUITE=installation_node
dist: xenial
- env: SHELL=sh TEST_SUITE=installation_node WITHOUT_CURL=1
dist: xenial
- env: SHELL=dash TEST_SUITE=installation_node
dist: xenial
- env: SHELL=dash TEST_SUITE=installation_node WITHOUT_CURL=1
dist: xenial
- env: SHELL=zsh TEST_SUITE=installation_node
dist: xenial
- env: SHELL=zsh TEST_SUITE=installation_node WITHOUT_CURL=1
dist: xenial
#- env: SHELL=ksh TEST_SUITE=installation_node
# dist: xenial
#- env: SHELL=ksh TEST_SUITE=installation_node WITHOUT_CURL=1
# dist: xenial
- env: SHELL=bash TEST_SUITE=xenial
dist: xenial
- env: SHELL=sh TEST_SUITE=xenial
dist: xenial
- env: SHELL=dash TEST_SUITE=xenial
dist: xenial
- env: SHELL=zsh TEST_SUITE=xenial
dist: xenial
#- env: SHELL=ksh TEST_SUITE=xenial
# dist: xenial
env:
global:
- CXX=g++
@@ -37,7 +73,6 @@ env:
- PATH="/usr/lib/ccache/:$PATH"
- NVM_DIR="${TRAVIS_BUILD_DIR}"
matrix:
- SHELL=bash TEST_SUITE=install_script
- SHELL=sh TEST_SUITE=fast
- SHELL=dash TEST_SUITE=fast
- SHELL=bash TEST_SUITE=fast
@@ -53,16 +88,6 @@ env:
- SHELL=bash TEST_SUITE=slow
- SHELL=zsh TEST_SUITE=slow
# - SHELL=ksh TEST_SUITE=slow
- SHELL=sh TEST_SUITE=installation_node
- SHELL=sh TEST_SUITE=installation_node WITHOUT_CURL=1
- SHELL=dash TEST_SUITE=installation_node
- SHELL=dash TEST_SUITE=installation_node WITHOUT_CURL=1
- SHELL=bash TEST_SUITE=installation_node
- SHELL=bash TEST_SUITE=installation_node WITHOUT_CURL=1
- SHELL=zsh TEST_SUITE=installation_node
- SHELL=zsh TEST_SUITE=installation_node WITHOUT_CURL=1
# - SHELL=ksh TEST_SUITE=installation_node
# - SHELL=ksh TEST_SUITE=installation_node WITHOUT_CURL=1
- SHELL=sh TEST_SUITE=installation_iojs
- SHELL=sh TEST_SUITE=installation_iojs WITHOUT_CURL=1
- SHELL=dash TEST_SUITE=installation_iojs

View File

@@ -30,7 +30,7 @@ The OpenJS Foundation maintains a Code of Conduct Panel (CoCP).
This is a foundation-wide team established to manage escalation when a reporter believes that a report to a member project or the CPC has not been properly handled.
In order to escalate to the CoCP send an email to `coc-escalation@lists.openjsf.org`.
For more information, refer to the full [Code of Conduct governance document](https://github.com/openjs-foundation/cross-project-council/blob/master/CODE_OF_CONDUCT.md).
For more information, refer to the full [Code of Conduct governance document](https://github.com/openjs-foundation/cross-project-council/blob/HEAD/CODE_OF_CONDUCT.md).
---

View File

@@ -1,21 +1,115 @@
Thanks for contributing to `nvm`!
# Contributing
:+1::tada: First off, thanks for taking the time to contribute to `nvm`! :tada::+1:
We love pull requests and issues, they're our favorite.
The following is a set of guidelines for contributing to `nvm` managed by [@LJHarb](https://github.com/ljharb), which is hosted on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
However, before submitting, please review the following:
For bug reports:
# How Can I Contribute?
- Please make sure the bug is reproducible, and give us the steps to reproduce it, so that we can dig into the problem.
- Please give us as much detail as possible about your environment, so we can more easily confirm the problem.
There are lots of ways to get involved. Here are some suggestions of things we'd love some help with.
For pull requests:
## Resolving existing issues
You can consider helping out with issues already requiring attention - look for a "help wanted" label.
### How Do I Submit a (Good) Bug Report? :bug:
Explain the problem and include additional details to help maintainers reproduce the problem:
* **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by explaining which command exactly you used in the terminal. When listing steps, **don't just say what you did, but explain how you did it**. For example, if you moved the cursor to the end of a line, explain if you used the mouse, or a keyboard shortcut or a command, and if so which one?
* **Provide specific examples to demonstrate the steps**. Include links to files or Github projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
* **Explain which behavior you expected to see instead and why.**
* **Provide as much context as possible** in order to help others verify and ultimately fix the issue. This includes giving us as much details as possible about your environment, so we can more easily confirm the problem.
## Documentation
We are happy to welcome contributions from anyone willing to improve documentation by adding missing information or making it more consistent and coherent.
# Dev Environment
Please refer to the [README](README.md) for complete instructions how to install, update, as well as troubleshoot `nvm` in your environment depending on your Operating System.
# Style Guide / Coding conventions
### Pull requests
#### Before creating a pull request
- Please include tests. Changes with tests will be merged very quickly.
- Please manually confirm that your changes work in `bash`, `sh`/`dash`, `ksh`, and `zsh`. Fast tests do run in these shells, but it's nice to manually verify also.
- Please maintain consistent whitespace - 2-space indentation, trailing newlines in all files, etc.
- Any time you make a change to your PR, please rebase freshly on top of master. Nobody likes merge commits.
- Any time you make a change to your PR, please rebase freshly on top of the default branch. Nobody likes merge commits.
Even if you don't have all of these items covered, please still feel free to submit a PR/issue! Someone else may be inspired and volunteer to complete it for you.
Thanks again!
#### How to create a pull request
Create a new branch
```
git checkout -b issue1234
```
Commit the changes to your branch, including a coherent commit message that follows our [standards](#commit-messages)
```
git commit -a
```
Before sending the pull request, make sure your code is running on the latest available code by rebasing onto the upstream source
```
git fetch upstream
git rebase upstream/main
```
Verify your changes
```
npm test
```
Push your changes
```
git push origin issue1234
```
Send the [pull request](https://docs.github.com/en/pull-requests), make requested changes, and get merged.
### Commit Messages
* Limit the first line of the commit message (message summary) to 72 characters or less.
* Use the present tense ("Add feature" not "Added feature") and imperative mood ("Move cursor to..." not "Moves cursor to...") when providing a description of what you did.
* If your PR addresses an issue, reference it in the body of the commit message.
* See the rest of the conventions [here](https://gist.github.com/ljharb/772b0334387a4bee89af24183114b3c7)
#### Commit message example
```
[Tag]: Short description of what you did
Longer description here if necessary
Fixes #1234
```
> **Note:** Add co-authors to your commit message for commits with multiple authors
```
Co-authored-by: Name Here <email@here>
```
# Code of Conduct
[Code of Conduct](https://github.com/nvm-sh/nvm/blob/HEAD/CODE_OF_CONDUCT.md)
# Where can I ask for help?
If you have any questions, please contact [@LJHarb](mailto:ljharb@gmail.com).

View File

@@ -6,7 +6,7 @@
# Please note that it'll use about 1.2 GB disk space and about 15 minutes to
# build this image, it depends on your hardware.
FROM ubuntu:20.04
FROM ubuntu:22.04
LABEL maintainer="Peter Dave Hello <hsu@peterdavehello.org>"
LABEL name="nvm-dev-env"
LABEL version="latest"
@@ -24,9 +24,6 @@ ENV SHELLCHECK_VERSION=0.7.0
# ref: https://launchpad.net/ubuntu/+archivemirrors
ENV UBUNTU_APT_SITE ubuntu.cs.utah.edu
# Disable src package source
RUN sed -i 's/^deb-src\ /\#deb-src\ /g' /etc/apt/sources.list
# Replace origin apt package site with the mirror site
RUN sed -E -i "s/([a-z]+.)?archive.ubuntu.com/$UBUNTU_APT_SITE/g" /etc/apt/sources.list
RUN sed -i "s/security.ubuntu.com/$UBUNTU_APT_SITE/g" /etc/apt/sources.list
@@ -86,7 +83,7 @@ RUN useradd -ms /bin/bash nvm
# Copy and set permission for nvm directory
COPY . /home/nvm/.nvm/
RUN chown nvm:nvm -R "home/nvm/.nvm"
RUN chown nvm:nvm -R "/home/nvm/.nvm"
# Set sudoer for "nvm"
RUN echo 'nvm ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

101
README.md
View File

@@ -1,6 +1,12 @@
<a href="https://github.com/nvm-sh/logos"><img alt="nvm project logo" src="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-color.svg" height="50" /></a>
<a href="https://github.com/nvm-sh/logos">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-white.svg" />
<img src="https://raw.githubusercontent.com/nvm-sh/logos/HEAD/nvm-logo-color.svg" height="50" alt="nvm project logo" />
</picture>
</a>
# Node Version Manager [![Build Status](https://travis-ci.org/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.2-yellow.svg)][4] [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/684/badge)](https://bestpractices.coreinfrastructure.org/projects/684)
# Node Version Manager [![Build Status](https://app.travis-ci.com/nvm-sh/nvm.svg?branch=master)][3] [![nvm version](https://img.shields.io/badge/version-v0.39.5-yellow.svg)][4] [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/684/badge)](https://bestpractices.coreinfrastructure.org/projects/684)
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
@@ -54,6 +60,7 @@
- [Docker For Development Environment](#docker-for-development-environment)
- [Problems](#problems)
- [macOS Troubleshooting](#macos-troubleshooting)
- [WSL Troubleshooting](#wsl-troubleshooting)
- [Maintainers](#maintainers)
- [License](#license)
- [Copyright notice](#copyright-notice)
@@ -94,10 +101,10 @@ nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be i
To **install** or **update** nvm, you should run the [install script][2]. To do that, you may either download and run the script manually, or use the following cURL or Wget command:
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
```
```sh
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
```
Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`).
@@ -119,6 +126,8 @@ Eg: `curl ... | NVM_DIR="path/to/nvm"`. Ensure that the `NVM_DIR` does not conta
- The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available.
- You can instruct the installer to not edit your shell config (for example if you already get completions via a [zsh nvm plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/nvm)) by setting `PROFILE=/dev/null` before running the `install.sh` script. Here's an example one-line command to do that: `PROFILE=/dev/null bash -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash'`
#### Troubleshooting on Linux
On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again.
@@ -165,7 +174,7 @@ You can use a task:
```yaml
- name: Install nvm
ansible.builtin.shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
args:
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
```
@@ -227,7 +236,7 @@ If you have `git` installed (requires git v1.7.10+):
1. clone this repo in the root of your user profile
- `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm`
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.2`
1. `cd ~/.nvm` and check out the latest version with `git checkout v0.39.5`
1. activate `nvm` by sourcing it from your shell: `. ./nvm.sh`
Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login:
@@ -380,7 +389,7 @@ or, you can at any time run the following command to get the latest supported np
nvm install-latest-npm
```
If you've already gotten an error to the effect of "npm does not support Node.js", you'll need to (1) revert to a previous node version (`nvm ls` & `nvm use <your latest _working_ version from the ls>`, (2) delete the newly created node version (`nvm uninstall <your _broken_ version of node from the ls>`), then (3) rerun your `nvm install` with the `--latest-npm` flag.
If you've already gotten an error to the effect of "npm does not support Node.js", you'll need to (1) revert to a previous node version (`nvm ls` & `nvm use <your latest _working_ version from the ls>`), (2) delete the newly created node version (`nvm uninstall <your _broken_ version of node from the ls>`), then (3) rerun your `nvm install` with the `--latest-npm` flag.
### Default Global Packages From File While Installing
@@ -490,7 +499,9 @@ nvm deactivate
To set a default Node version to be used in any new shell, use the alias 'default':
```sh
nvm alias default node
nvm alias default node # this refers to the latest installed version of node
nvm alias default 18 # this refers to the latest installed v18.x version of node
nvm alias default 18.12 # this refers to the latest installed v18.12.x version of node
```
#### Use a mirror of node binaries
@@ -531,7 +542,7 @@ $ echo "node" > .nvmrc # to default to the latest version
[NB these examples assume a POSIX-compliant shell version of `echo`. If you use a Windows `cmd` development environment, eg the `.nvmrc` file is used to configure a remote Linux deployment, then keep in mind the `"`s will be copied leading to an invalid file. Remove them.]
Then when you run nvm:
Then when you run nvm use:
```sh
$ nvm use
@@ -539,6 +550,19 @@ Found '/path/to/project/.nvmrc' with version <5.9>
Now using node v5.9.1 (npm v3.7.3)
```
Running nvm install will also switch over to the correct version, but if the correct node version isn't already installed, it will install it for you.
```sh
$ nvm install
Found '/path/to/project/.nvmrc' with version <5.9>
Downloading and installing node v5.9.1...
Downloading https://nodejs.org/dist/v5.9.1/node-v5.9.1-linux-x64.tar.xz...
#################################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v5.9.1 (npm v3.7.3)
```
`nvm use` et. al. will traverse directory structure upwards from the current directory looking for the `.nvmrc` file. In other words, running `nvm use` et. al. in any subdirectory of a directory with an `.nvmrc` will result in that `.nvmrc` being utilized.
The contents of a `.nvmrc` file **must** be the `<version>` (as described by `nvm --help`) followed by a newline. No trailing spaces are allowed, and the trailing newline is required.
@@ -547,6 +571,8 @@ The contents of a `.nvmrc` file **must** be the `<version>` (as described by `nv
You can use [`avn`](https://github.com/wbyoung/avn) to deeply integrate into your shell and automatically invoke `nvm` when changing directories. `avn` is **not** supported by the `nvm` maintainers. Please [report issues to the `avn` team](https://github.com/wbyoung/avn/issues/new).
You can also use [`nvshim`](https://github.com/iamogbz/nvshim) to shim the `node`, `npm`, and `npx` bins to automatically use the `nvm` config in the current directory. `nvshim` is **not** supported by the `nvm` maintainers. Please [report issues to the `nvshim` team](https://github.com/iamogbz/nvshim/issues/new).
If you prefer a lighter-weight solution, the recipes below have been contributed by `nvm` users. They are **not** supported by the `nvm` maintainers. We are, however, accepting pull requests for more examples.
#### bash
@@ -598,8 +624,9 @@ cdnvm() {
fi
fi
}
alias cd='cdnvm'
cd "$PWD"
cdnvm "$PWD" || exit
```
This alias would search 'up' from your current directory in order to detect a `.nvmrc` file. If it finds it, it will switch to that version; if not, it will use the default version.
@@ -614,11 +641,14 @@ Put this into your `$HOME/.zshrc` to call `nvm use` automatically whenever you e
```zsh
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
@@ -630,6 +660,7 @@ load-nvmrc() {
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
```
@@ -793,13 +824,13 @@ If installing nvm on Alpine Linux *is* still what you want or need to do, you sh
### Alpine Linux 3.13+
```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python3 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
```
### Alpine Linux 3.5 - 3.12
```sh
apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
```
_Note: Alpine 3.5 can only install NodeJS versions up to v6.9.5, Alpine 3.6 can only install versions up to v6.10.3, Alpine 3.7 installs versions up to v8.9.3, Alpine 3.8 installs versions up to v8.14.0, Alpine 3.9 installs versions up to v10.19.0, Alpine 3.10 installs versions up to v10.24.1, Alpine 3.11 installs versions up to v12.22.6, Alpine 3.12 installs versions up to v12.22.12, Alpine 3.13 & 3.14 install versions up to v14.20.0, Alpine 3.15 & 3.16 install versions up to v16.16.0 (**These are all versions on the main branch**). Alpine 3.5 - 3.12 required the package `python2` to build NodeJS, as they are older versions to build. Alpine 3.13+ requires `python3` to successfully build newer NodeJS versions, but you can use `python2` with Alpine 3.13+ if you need to build versions of node supported in Alpine 3.5 - 3.15, you just need to specify what version of NodeJS you need to install in the package install script._
@@ -898,10 +929,10 @@ You have to make sure that the user directory name in `$HOME` and the user direc
To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548)
[1]: https://github.com/nvm-sh/nvm.git
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.2/install.sh
[3]: https://travis-ci.org/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.2
[Urchin]: https://github.com/scraperwiki/urchin
[2]: https://github.com/nvm-sh/nvm/blob/v0.39.5/install.sh
[3]: https://app.travis-ci.com/nvm-sh/nvm
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.39.5
[Urchin]: https://git.sdf.org/tlevine/urchin
[Fish]: https://fishshell.com
**Homebrew makes zsh directories unsecure**
@@ -980,6 +1011,40 @@ Here's what you will need to do:
Now you should be able to use node as usual.
## WSL Troubleshooting
If you've encountered this error on WSL-2:
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
```
It may be due to your antivirus, VPN, or other reasons.
Where you can `ping 8.8.8.8` while you can't `ping google.com`
This could simply be solved by running this in your root directory:
```sh
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
```
This deletes your `resolv.conf` file thats automatically generated when u run WSL, creates a new file and puts `nameserver 8.8.8.8`, then creates a `wsl.conf` file and adds `[network]` and `generateResolveConf = false` to prevent auto generation of that file.
You can check the contents of the file by running:
```sh
cat /etc/resolv.conf
```
## Maintainers
Currently, the sole maintainer is [@ljharb](https://github.com/ljharb) - more maintainers are quite welcome, and we hope to add folks to the team over time. [Governance](./GOVERNANCE.md) will be re-evaluated as the project evolves.

View File

@@ -33,7 +33,7 @@ nvm_install_dir() {
}
nvm_latest_version() {
nvm_echo "v0.39.2"
nvm_echo "v0.39.5"
}
nvm_profile_is_bash_or_zsh() {
@@ -52,12 +52,28 @@ nvm_profile_is_bash_or_zsh() {
#
# Outputs the location to NVM depending on:
# * The availability of $NVM_SOURCE
# * The presence of $NVM_INSTALL_GITHUB_REPO
# * The method used ("script" or "git" in the script, defaults to "git")
# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
#
nvm_source() {
local NVM_GITHUB_REPO
NVM_GITHUB_REPO="${NVM_INSTALL_GITHUB_REPO:-nvm-sh/nvm}"
if [ "${NVM_GITHUB_REPO}" != 'nvm-sh/nvm' ]; then
{ nvm_echo >&2 "$(cat)" ; } << EOF
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE REPO IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
The default repository for this install is \`nvm-sh/nvm\`,
but the environment variables \`\$NVM_INSTALL_GITHUB_REPO\` is
currently set to \`${NVM_GITHUB_REPO}\`.
If this is not intentional, interrupt this installation and
verify your environment variables.
EOF
fi
local NVM_VERSION
NVM_VERSION="${NVM_INSTALL_VERSION:-$(nvm_latest_version)}"
local NVM_METHOD

View File

@@ -2,6 +2,8 @@
DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
unset NVM_CD_FLAGS
# shellcheck disable=SC1090,SC1091
\. "$DIR/nvm.sh" --no-use

165
nvm.sh
View File

@@ -163,7 +163,11 @@ nvm_is_version_installed() {
nvm_print_npm_version() {
if nvm_has "npm"; then
command printf " (npm v$(npm --version 2>/dev/null))"
local NPM_VERSION
NPM_VERSION="$(npm --version 2>/dev/null)"
if [ -n "${NPM_VERSION}" ]; then
command printf " (npm v${NPM_VERSION})"
fi
fi
}
@@ -313,6 +317,21 @@ nvm_install_latest_npm() {
if [ $NVM_IS_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.0.0; then
NVM_IS_18_OR_ABOVE=1
fi
local NVM_IS_18_17_OR_ABOVE
NVM_IS_18_17_OR_ABOVE=0
if [ $NVM_IS_18_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.17.0; then
NVM_IS_18_17_OR_ABOVE=1
fi
local NVM_IS_19_OR_ABOVE
NVM_IS_19_OR_ABOVE=0
if [ $NVM_IS_18_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 19.0.0; then
NVM_IS_19_OR_ABOVE=1
fi
local NVM_IS_20_5_OR_ABOVE
NVM_IS_20_5_OR_ABOVE=0
if [ $NVM_IS_19_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 20.5.0; then
NVM_IS_20_5_OR_ABOVE=1
fi
if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || {
[ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}"; \
@@ -332,6 +351,10 @@ nvm_install_latest_npm() {
nvm_echo '* `npm` `v6.9` is the last version that works on `node` `v6.0.x`, `v6.1.x`, `v9.0.x`, `v9.1.x`, or `v9.2.x`'
$NVM_NPM_CMD install -g npm@6.9
elif [ $NVM_IS_10_OR_ABOVE -eq 0 ]; then
if nvm_version_greater 4.4.4 "${NPM_VERSION}"; then
nvm_echo '* `npm` `v4.4.4` or later is required to install npm v6.14.18'
$NVM_NPM_CMD install -g npm@4
fi
nvm_echo '* `npm` `v6.x` is the last version that works on `node` below `v10.0.0`'
$NVM_NPM_CMD install -g npm@6
elif \
@@ -349,6 +372,12 @@ nvm_install_latest_npm() {
; then
nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
$NVM_NPM_CMD install -g npm@8
elif \
[ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \
|| { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ]; } \
; then
nvm_echo '* `npm` `v9.x` is the last version that works on `node` `< v18.17`, `v19`, or `v20.0` - `v20.4`'
$NVM_NPM_CMD install -g npm@9
else
nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!'
$NVM_NPM_CMD install -g npm
@@ -373,6 +402,7 @@ if [ -z "${NVM_DIR-}" ]; then
# shellcheck disable=SC2169,SC3054
NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
fi
# shellcheck disable=SC2086
NVM_DIR="$(nvm_cd ${NVM_CD_FLAGS} "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" >/dev/null && \pwd)"
export NVM_DIR
else
@@ -413,7 +443,7 @@ nvm_tree_contains_path() {
nvm_find_project_dir() {
local path_
path_="${PWD}"
while [ "${path_}" != "" ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ]; do
while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ]; do
path_=${path_%/*}
done
nvm_echo "${path_}"
@@ -423,7 +453,7 @@ nvm_find_project_dir() {
nvm_find_up() {
local path_
path_="${PWD}"
while [ "${path_}" != "" ] && [ ! -f "${path_}/${1-}" ]; do
while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ]; do
path_=${path_%/*}
done
nvm_echo "${path_}"
@@ -693,6 +723,7 @@ ${NVM_LS_REMOTE_POST_MERGED_OUTPUT}" | nvm_grep -v "N/A" | command sed '/^ *$/d'
fi
# the `sed` is to remove trailing whitespaces (see "weird behavior" ~25 lines up)
nvm_echo "${VERSIONS}" | command sed 's/ *$//g'
# shellcheck disable=SC2317
return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
}
@@ -725,23 +756,31 @@ nvm_normalize_lts() {
local LTS
LTS="${1-}"
if [ "$(expr "${LTS}" : '^lts/-[1-9][0-9]*$')" -gt 0 ]; then
local N
N="$(echo "${LTS}" | cut -d '-' -f 2)"
N=$((N+1))
local NVM_ALIAS_DIR
NVM_ALIAS_DIR="$(nvm_alias_path)"
local RESULT
RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)"
if [ "${RESULT}" != '*' ]; then
nvm_echo "lts/${RESULT}"
else
nvm_err 'That many LTS releases do not exist yet.'
return 2
fi
else
nvm_echo "${LTS}"
fi
case "${LTS}" in
lts/-[123456789] | lts/-[123456789][0123456789]*)
local N
N="$(echo "${LTS}" | cut -d '-' -f 2)"
N=$((N+1))
# shellcheck disable=SC2181
if [ $? -ne 0 ]; then
nvm_echo "${LTS}"
return 0
fi
local NVM_ALIAS_DIR
NVM_ALIAS_DIR="$(nvm_alias_path)"
local RESULT
RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)"
if [ "${RESULT}" != '*' ]; then
nvm_echo "lts/${RESULT}"
else
nvm_err 'That many LTS releases do not exist yet.'
return 2
fi
;;
*)
nvm_echo "${LTS}"
;;
esac
}
nvm_ensure_version_prefix() {
@@ -792,7 +831,8 @@ nvm_strip_path() {
path = substr($0, length(NVM_DIR) + 1)
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
}
{ print }' | command paste -s -d: -
# The final RT will contain a colon if the input has a trailing colon, or a null string otherwise
{ printf "%s%s", sep, $0; sep=RS } END { printf "%s", RT }'
}
nvm_change_path() {
@@ -886,18 +926,6 @@ nvm_wrap_with_color_code() {
fi
}
nvm_wrap_with_color_code() {
local CODE
CODE="$(nvm_print_color_code "${1}" 2>/dev/null ||:)"
local TEXT
TEXT="${2-}"
if nvm_has_colors && [ -n "${CODE}" ]; then
nvm_echo_with_colors "\033[${CODE}${TEXT}\033[0m"
else
nvm_echo "${TEXT}"
fi
}
nvm_print_color_code() {
case "${1-}" in
'0') return 0 ;;
@@ -1070,11 +1098,11 @@ nvm_list_aliases() {
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" &
done
wait
) | sort
) | command sort
(
local ALIAS_NAME
for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable"; do
for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do
{
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
@@ -1083,12 +1111,7 @@ nvm_list_aliases() {
} &
done
wait
ALIAS_NAME="$(nvm_iojs_prefix)"
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
fi
) | sort
) | command sort
(
local LTS_ALIAS
@@ -1102,7 +1125,7 @@ nvm_list_aliases() {
} &
done
wait
) | sort
) | command sort
return
}
@@ -1126,7 +1149,7 @@ nvm_alias() {
return 2
fi
command cat "${NVM_ALIAS_PATH}"
command awk 'NF' "${NVM_ALIAS_PATH}"
}
nvm_ls_current() {
@@ -1141,7 +1164,7 @@ nvm_ls_current() {
if [ "${VERSION}" = "v0.6.21-pre" ]; then
nvm_echo 'v0.6.21'
else
nvm_echo "${VERSION}"
nvm_echo "${VERSION:-none}"
fi
else
nvm_echo 'system'
@@ -1162,8 +1185,10 @@ nvm_resolve_alias() {
local SEEN_ALIASES
SEEN_ALIASES="${ALIAS}"
local NVM_ALIAS_INDEX
NVM_ALIAS_INDEX=1
while true; do
ALIAS_TEMP="$(nvm_alias "${ALIAS}" 2>/dev/null || nvm_echo)"
ALIAS_TEMP="$( (nvm_alias "${ALIAS}" 2>/dev/null | command head -n "${NVM_ALIAS_INDEX}" | command tail -n 1) || nvm_echo)"
if [ -z "${ALIAS_TEMP}" ]; then
break
@@ -1382,9 +1407,10 @@ nvm_ls() {
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then
VERSIONS="${VERSIONS}$(command printf '\n%s' 'system')"
VERSIONS="${VERSIONS}
system"
elif [ "${PATTERN}" = 'system' ]; then
VERSIONS="$(command printf '%s' 'system')"
VERSIONS="system"
fi
fi
@@ -1648,7 +1674,7 @@ nvm_compare_checksum() {
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
nvm_err 'WARNING: Continuing *without checksum verification*'
return
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ]; then
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ] && [ "${COMPUTED_SUM}" != "\\${CHECKSUM}" ]; then
nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
return 1
fi
@@ -1895,6 +1921,7 @@ nvm_get_arch() {
local HOST_ARCH
local NVM_OS
local EXIT_CODE
local LONG_BIT
NVM_OS="$(nvm_get_os)"
# If the OS is SunOS, first try to use pkgsrc to guess
@@ -1911,26 +1938,37 @@ nvm_get_arch() {
HOST_ARCH=ppc64
else
HOST_ARCH="$(command uname -m)"
LONG_BIT="$(getconf LONG_BIT 2>/dev/null)"
fi
local NVM_ARCH
case "${HOST_ARCH}" in
x86_64 | amd64) NVM_ARCH="x64" ;;
i*86) NVM_ARCH="x86" ;;
aarch64) NVM_ARCH="arm64" ;;
aarch64 | armv8l) NVM_ARCH="arm64" ;;
*) NVM_ARCH="${HOST_ARCH}" ;;
esac
# If running inside a 32Bit docker container the kernel still is 64bit
# change ARCH to 32bit if LONG_BIT is 32
if [ "_${LONG_BIT}" = "_32" ] && [ "${NVM_ARCH}" = "x64" ]; then
NVM_ARCH="x86"
fi
# If running a 64bit ARM kernel but a 32bit ARM userland,
# change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable
local L
if [ "$(uname)" = "Linux" ] && [ "${NVM_ARCH}" = arm64 ] &&
L="$(command ls -dl /sbin/init 2>/dev/null)" &&
[ "$(od -An -t x1 -j 4 -N 1 "${L#*-> }")" = ' 01' ]; then
if [ "$(uname)" = "Linux" ] \
&& [ "${NVM_ARCH}" = arm64 ] \
&& [ "$(command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null)" = ' 01' ]\
; then
NVM_ARCH=armv7l
HOST_ARCH=armv7l
fi
if [ -f "/etc/alpine-release" ]; then
NVM_ARCH=x64-musl
fi
nvm_echo "${NVM_ARCH}"
}
@@ -1985,14 +2023,25 @@ nvm_is_merged_node_version() {
}
nvm_get_mirror() {
local NVM_MIRROR
NVM_MIRROR=''
case "${1}-${2}" in
node-std) nvm_echo "${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
iojs-std) nvm_echo "${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;;
node-std) NVM_MIRROR="${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
iojs-std) NVM_MIRROR="${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;;
*)
nvm_err 'unknown type of node.js or io.js release'
return 1
;;
esac
case "${NVM_MIRROR}" in
*\`* | *\\* | *\'* | *\(* )
nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL'
return 2
;;
esac
nvm_echo "${NVM_MIRROR}"
}
# args: os, prefixed version, version, tarball, extract directory
@@ -2760,7 +2809,7 @@ nvm_check_file_permissions() {
if [ -n "${NVM_DEBUG-}" ]; then
nvm_err "${FILE}"
fi
if ! nvm_check_file_permissions "${FILE}"; then
if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}"; then
return 2
fi
elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ]; then
@@ -3801,6 +3850,7 @@ nvm() {
nvm_ensure_version_installed "${provided_version}"
EXIT_CODE=$?
if [ "${EXIT_CODE}" != "0" ]; then
# shellcheck disable=SC2086
return $EXIT_CODE
fi
@@ -3957,6 +4007,7 @@ nvm() {
nvm_ensure_version_installed "${provided_version}"
EXIT_CODE=$?
if [ "${EXIT_CODE}" != "0" ]; then
# shellcheck disable=SC2086
return $EXIT_CODE
fi
local NVM_VERSION_DIR
@@ -4169,7 +4220,7 @@ nvm() {
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
;;
"--version" | "-v")
nvm_echo '0.39.2'
nvm_echo '0.39.5'
;;
"unload")
nvm deactivate >/dev/null 2>&1

View File

@@ -1,6 +1,6 @@
{
"name": "nvm",
"version": "0.39.2",
"version": "0.39.5",
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
"directories": {
"test": "test"
@@ -43,9 +43,9 @@
"dockerfile_lint": "^0.3.4",
"doctoc": "^2.2.1",
"eclint": "^2.8.1",
"markdown-link-check": "^3.10.3",
"markdown-link-check": "^3.11.2",
"replace": "^1.2.2",
"semver": "^7.3.8",
"semver": "^7.5.4",
"urchin": "^0.0.5"
}
}

View File

@@ -0,0 +1,20 @@
#!/bin/sh
die() { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../../.. && pwd)"
\. "${NVM_DIR}/nvm.sh"
\. ../../common.sh
echo "
v0.0.1
" > ../../../alias/test-blank-lines
EXPECTED='v0.0.1'
ACTUAL="$(nvm_alias test-blank-lines)"
EXIT_CODE="$(nvm_alias test-blank-lines 2>&1 >/dev/null; echo $?)"
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${EXIT_CODE}" = '0' ] || die "expected exit code 0, got ${EXIT_CODE}"

View File

@@ -9,14 +9,20 @@ die () {
set -e
MOCKS_DIR="../Unit tests/mocks"
# sample output at the time the test was written
TAB_PATH="$MOCKS_DIR/nodejs.org-dist-index.tab"
nvm_download() {
cat "$TAB_PATH"
}
nvm_alias_path() {
nvm_echo "../../../alias"
}
nvm ls-remote >/dev/null || die 'nvm ls-remote (to populate LTS aliases) failed'
MOCKS_DIR="../Unit tests/mocks"
EXPECTED_OUTPUT="$(cat "$MOCKS_DIR/lts-star.txt")"
STDOUT_OUTPUT="$(nvm_list_aliases "lts/*")"
STDERR_OUTPUT="$(nvm_list_aliases "lts/*" 2>&1 >/dev/null)"

View File

@@ -2,7 +2,9 @@
die () { echo "$@" ; exit 1; }
\. ../../../nvm.sh
export NVM_DIR="$(cd ../../.. && pwd)"
\. "${NVM_DIR}/nvm.sh"
EXIT_CODE=$(nvm_resolve_alias ; echo $?)
[ $EXIT_CODE = "1" ] || die "nvm_resolve_alias without an argument did not return 1; got $EXIT_CODE"
@@ -31,3 +33,17 @@ UNSTABLE="$(nvm_resolve_alias unstable)"
IOJS="$(nvm_resolve_alias iojs)"
[ "_$IOJS" = "_iojs-v0.2" ] || die "'nvm_resolve_alias iojs' was not iojs-v0.2; got $IOJS"
echo "
v0.0.1
v0.0.2
v0.0.3
" > ../../../alias/test-multi-lines
EXPECTED='v0.0.1'
ACTUAL="$(nvm_resolve_alias test-multi-lines)"
EXIT_CODE="$(nvm_resolve_alias test-multi-lines 2>&1 >/dev/null; echo $?)"
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${EXIT_CODE}" = '0' ] || die "expected exit code 0, got ${EXIT_CODE}"

View File

@@ -1,5 +1,7 @@
#!/bin/sh
export NVM_DIR="$(cd ../../.. && pwd)"
\. ../../../nvm.sh
\. ../../common.sh

View File

@@ -15,3 +15,5 @@ rm -f "../../../alias/unstable"
rm -f "../../../alias/node"
rm -f "../../../alias/iojs"
rm -f "../../../alias/default"
rm -f "../../../alias/test-blank-lines"
rm -f "../../../alias/test-multi-lines"

View File

@@ -1,5 +1,7 @@
#!/bin/zsh
export NVM_DIR="$(cd ../../.. && pwd)"
\. ../../../nvm.sh
\. ../../common.sh

View File

@@ -2,6 +2,8 @@
set -ex
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
nvm alias test v0.1.2

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
nvm deactivate 2>&1

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
\. ../common.sh

View File

@@ -7,6 +7,8 @@ cleanup () {
rm -rf "${NVM_DIR}/v0.10.4"
}
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
\. ../common.sh

View File

@@ -4,6 +4,8 @@ set -ex
die () { echo "$@" ; exit 1; }
export NVM_DIR="$(cd ../.. && pwd)"
\. ../../nvm.sh
set +ex # needed for stderr

View File

@@ -24,6 +24,7 @@ env | grep -v PATH= | grep -v IFS= | sort >> "${AFTER}"
! type nvm > /dev/null 2>&1 || die "nvm not unloaded"
diff "${BEFORE}" "${AFTER}"
DIFF="$(diff "${BEFORE}" "${AFTER}" ||:)"
[ -z "${DIFF}" ] || die "function pollution found: ${DIFF}"

View File

@@ -1,3 +1,5 @@
iron
hydrogen
gallium
fermium
erbium

View File

@@ -1 +1 @@
lts/gallium
lts/iron

View File

@@ -1,4 +1,47 @@
version date files npm v8 uv zlib openssl modules lts security
v21.1.0 2023-10-24 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.2.0 11.8.172.15 1.46.0 1.2.13.1-motley 3.0.10+quic 120 - -
v21.0.0 2023-10-17 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.2.0 11.8.172.13 1.46.0 1.2.13.1-motley 3.0.10+quic 120 - -
v20.9.0 2023-10-24 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.1.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 Iron -
v20.8.1 2023-10-13 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.1.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - true
v20.8.0 2023-09-28 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.1.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - -
v20.7.0 2023-09-18 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.1.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - -
v20.6.1 2023-09-07 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.1 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - -
v20.6.0 2023-08-23 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.1 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - -
v20.5.1 2023-08-09 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.10+quic 115 - true
v20.5.0 2023-07-19 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.0 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.9+quic 115 - -
v20.4.0 2023-07-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.7.2 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.9+quic 115 - -
v20.3.1 2023-06-20 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.7 11.3.244.8 1.45.0 1.2.13.1-motley 3.0.9+quic 115 - true
v20.3.0 2023-06-08 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.7 11.3.244.8 1.45.0 1.2.13.1-motley 3.0.8+quic 115 - -
v20.2.0 2023-05-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.6 11.3.244.8 1.44.2 1.2.13 3.0.8+quic 115 - -
v20.1.0 2023-05-03 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.4 11.3.244.8 1.44.2 1.2.13 3.0.8+quic 115 - -
v20.0.0 2023-04-17 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.4 11.3.244.4 1.44.2 1.2.13 3.0.8+quic 115 - -
v19.9.0 2023-04-10 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-arm64-7z,win-arm64-zip,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.3 10.8.168.25 1.44.2 1.2.13 3.0.8+quic 111 - -
v19.8.1 2023-03-15 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.1 10.8.168.25 1.44.2 1.2.13 3.0.8+quic 111 - -
v19.8.0 2023-03-14 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.1 10.8.168.25 1.44.2 1.2.13 3.0.8+quic 111 - -
v19.7.0 2023-02-21 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.0 10.8.168.25 1.44.2 1.2.13 3.0.8+quic 111 - -
v19.6.1 2023-02-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.4.0 10.8.168.25 1.44.2 1.2.13 3.0.8+quic 111 - true
v19.6.0 2023-02-01 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.4.0 10.8.168.25 1.44.2 1.2.13 3.0.7+quic 111 - -
v19.5.0 2023-01-24 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.3.1 10.8.168.25 1.44.2 1.2.13 3.0.7+quic 111 - -
v19.4.0 2023-01-05 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.2.0 10.8.168.25 1.44.2 1.2.13 3.0.7+quic 111 - -
v19.3.0 2022-12-14 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.2.0 10.8.168.21 1.44.2 1.2.13 3.0.7+quic 111 - -
v19.2.0 2022-11-29 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.3 10.8.168.20 1.44.2 1.2.13 3.0.7+quic 111 - -
v19.1.0 2022-11-14 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.3 10.7.193.20 1.44.2 1.2.11 3.0.7+quic 111 - -
v19.0.1 2022-11-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.7.193.13 1.43.0 1.2.11 3.0.7+quic 111 - true
v19.0.0 2022-10-17 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.7.193.13 1.43.0 1.2.11 3.0.5+quic 111 - -
v18.18.2 2023-10-13 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.1 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.10+quic 108 Hydrogen true
v18.18.1 2023-10-10 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.1 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.10+quic 108 Hydrogen -
v18.18.0 2023-09-18 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.8.1 10.2.154.26 1.46.0 1.2.13.1-motley 3.0.10+quic 108 Hydrogen -
v18.17.1 2023-08-08 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.7 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.10+quic 108 Hydrogen -
v18.17.0 2023-07-18 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.6.7 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.9+quic 108 Hydrogen -
v18.16.1 2023-06-20 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.1 10.2.154.26 1.44.2 1.2.13 3.0.9+quic 108 Hydrogen true
v18.16.0 2023-04-12 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.1 10.2.154.26 1.44.2 1.2.13 3.0.8+quic 108 Hydrogen -
v18.15.0 2023-03-05 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.0 10.2.154.26 1.44.2 1.2.13 3.0.8+quic 108 Hydrogen -
v18.14.2 2023-02-21 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.5.0 10.2.154.26 1.44.2 1.2.13 3.0.8+quic 108 Hydrogen -
v18.14.1 2023-02-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.3.1 10.2.154.23 1.44.2 1.2.13 3.0.8+quic 108 Hydrogen true
v18.14.0 2023-02-01 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 9.3.1 10.2.154.23 1.44.2 1.2.13 3.0.7+quic 108 Hydrogen -
v18.13.0 2023-01-05 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.3 10.2.154.23 1.44.2 1.2.13 3.0.7+quic 108 Hydrogen -
v18.12.1 2022-11-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.2.154.15 1.43.0 1.2.11 3.0.7+quic 108 Hydrogen true
v18.12.0 2022-10-25 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.2.154.15 1.43.0 1.2.11 3.0.5+quic 108 Hydrogen -
v18.11.0 2022-10-13 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.2.154.15 1.43.0 1.2.11 3.0.5+quic 108 - -
v18.10.0 2022-09-28 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 10.2.154.15 1.43.0 1.2.11 3.0.5+quic 108 - -
v18.9.1 2022-09-23 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.1 10.2.154.15 1.43.0 1.2.11 3.0.5+quic 108 - true
@@ -27,6 +70,12 @@ v17.2.0 2021-11-30 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linu
v17.1.0 2021-11-09 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.1.2 9.5.172.25 1.42.0 1.2.11 3.0.0+quic 102 - -
v17.0.1 2021-10-20 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.1.0 9.5.172.21 1.42.0 1.2.11 3.0.0+quic 102 - -
v17.0.0 2021-10-19 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.1.0 9.5.172.21 1.42.0 1.2.11 3.0.0+quic 102 - -
v16.20.2 2023-08-08 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.4 9.4.146.26 1.43.0 1.2.11 1.1.1v+quic 93 Gallium true
v16.20.1 2023-06-20 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.4 9.4.146.26 1.43.0 1.2.11 1.1.1u+quic 93 Gallium true
v16.20.0 2023-03-28 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.4 9.4.146.26 1.43.0 1.2.11 1.1.1t+quic 93 Gallium -
v16.19.1 2023-02-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.3 9.4.146.26 1.43.0 1.2.11 1.1.1t+quic 93 Gallium true
v16.19.0 2022-12-13 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.3 9.4.146.26 1.43.0 1.2.11 1.1.1s+quic 93 Gallium -
v16.18.1 2022-11-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 9.4.146.26 1.43.0 1.2.11 1.1.1q+quic 93 Gallium true
v16.18.0 2022-10-12 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.19.2 9.4.146.26 1.43.0 1.2.11 1.1.1q+quic 93 Gallium -
v16.17.1 2022-09-23 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.15.0 9.4.146.26 1.43.0 1.2.11 1.1.1q+quic 93 Gallium true
v16.17.0 2022-08-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-arm64-tar,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 8.15.0 9.4.146.26 1.43.0 1.2.11 1.1.1q+quic 93 Gallium -
@@ -76,6 +125,10 @@ v15.2.0 2020-11-10 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linu
v15.1.0 2020-11-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 7.0.8 8.6.395.17 1.40.0 1.2.11 1.1.1g 88 - -
v15.0.1 2020-10-21 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 7.0.3 8.6.395.17 1.40.0 1.2.11 1.1.1g 88 - -
v15.0.0 2020-10-20 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 7.0.2 8.6.395.16 1.40.0 1.2.11 1.1.1g 88 - -
v14.21.3 2023-02-16 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.18 8.4.371.23 1.42.0 1.2.11 1.1.1t 83 Fermium true
v14.21.2 2022-12-13 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1s 83 Fermium -
v14.21.1 2022-11-04 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1q 83 Fermium true
v14.21.0 2022-11-01 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1q 83 Fermium -
v14.20.1 2022-09-23 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1q 83 Fermium true
v14.20.0 2022-07-07 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1q 83 Fermium true
v14.19.3 2022-05-17 aix-ppc64,headers,linux-arm64,linux-armv7l,linux-ppc64le,linux-s390x,linux-x64,osx-x64-pkg,osx-x64-tar,src,win-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 6.14.17 8.4.371.23 1.42.0 1.2.11 1.1.1o 83 Fermium -

View File

@@ -172,7 +172,11 @@
v14.19.2  (LTS: Fermium)
v14.19.3  (LTS: Fermium)
v14.20.0  (LTS: Fermium)
v14.20.1  (Latest LTS: Fermium)
v14.20.1  (LTS: Fermium)
v14.21.0  (LTS: Fermium)
v14.21.1  (LTS: Fermium)
v14.21.2  (LTS: Fermium)
v14.21.3  (Latest LTS: Fermium)
v16.13.0  (LTS: Gallium)
v16.13.1  (LTS: Gallium)
v16.13.2  (LTS: Gallium)
@@ -184,4 +188,25 @@
v16.16.0  (LTS: Gallium)
v16.17.0  (LTS: Gallium)
v16.17.1  (LTS: Gallium)
v16.18.0  (Latest LTS: Gallium)
v16.18.0  (LTS: Gallium)
v16.18.1  (LTS: Gallium)
v16.19.0  (LTS: Gallium)
v16.19.1  (LTS: Gallium)
v16.20.0  (LTS: Gallium)
v16.20.1  (LTS: Gallium)
v16.20.2  (Latest LTS: Gallium)
v18.12.0  (LTS: Hydrogen)
v18.12.1  (LTS: Hydrogen)
v18.13.0  (LTS: Hydrogen)
v18.14.0  (LTS: Hydrogen)
v18.14.1  (LTS: Hydrogen)
v18.14.2  (LTS: Hydrogen)
v18.15.0  (LTS: Hydrogen)
v18.16.0  (LTS: Hydrogen)
v18.16.1  (LTS: Hydrogen)
v18.17.0  (LTS: Hydrogen)
v18.17.1  (LTS: Hydrogen)
v18.18.0  (LTS: Hydrogen)
v18.18.1  (LTS: Hydrogen)
v18.18.2  (Latest LTS: Hydrogen)
v20.9.0  (Latest LTS: Iron)

View File

@@ -578,7 +578,11 @@
v14.19.2  (LTS: Fermium)
v14.19.3  (LTS: Fermium)
v14.20.0  (LTS: Fermium)
v14.20.1  (Latest LTS: Fermium)
v14.20.1  (LTS: Fermium)
v14.21.0  (LTS: Fermium)
v14.21.1  (LTS: Fermium)
v14.21.2  (LTS: Fermium)
v14.21.3  (Latest LTS: Fermium)
v15.0.0
v15.0.1
v15.1.0
@@ -627,7 +631,13 @@
v16.16.0  (LTS: Gallium)
v16.17.0  (LTS: Gallium)
v16.17.1  (LTS: Gallium)
v16.18.0  (Latest LTS: Gallium)
v16.18.0  (LTS: Gallium)
v16.18.1  (LTS: Gallium)
v16.19.0  (LTS: Gallium)
v16.19.1  (LTS: Gallium)
v16.20.0  (LTS: Gallium)
v16.20.1  (LTS: Gallium)
v16.20.2  (Latest LTS: Gallium)
v17.0.0
v17.0.1
v17.1.0
@@ -656,3 +666,46 @@
v18.9.1
v18.10.0
v18.11.0
v18.12.0  (LTS: Hydrogen)
v18.12.1  (LTS: Hydrogen)
v18.13.0  (LTS: Hydrogen)
v18.14.0  (LTS: Hydrogen)
v18.14.1  (LTS: Hydrogen)
v18.14.2  (LTS: Hydrogen)
v18.15.0  (LTS: Hydrogen)
v18.16.0  (LTS: Hydrogen)
v18.16.1  (LTS: Hydrogen)
v18.17.0  (LTS: Hydrogen)
v18.17.1  (LTS: Hydrogen)
v18.18.0  (LTS: Hydrogen)
v18.18.1  (LTS: Hydrogen)
v18.18.2  (Latest LTS: Hydrogen)
v19.0.0
v19.0.1
v19.1.0
v19.2.0
v19.3.0
v19.4.0
v19.5.0
v19.6.0
v19.6.1
v19.7.0
v19.8.0
v19.8.1
v19.9.0
v20.0.0
v20.1.0
v20.2.0
v20.3.0
v20.3.1
v20.4.0
v20.5.0
v20.5.1
v20.6.0
v20.6.1
v20.7.0
v20.8.0
v20.8.1
v20.9.0  (Latest LTS: Iron)
v21.0.0
v21.1.0

View File

@@ -619,7 +619,11 @@
v14.19.2  (LTS: Fermium)
v14.19.3  (LTS: Fermium)
v14.20.0  (LTS: Fermium)
v14.20.1  (Latest LTS: Fermium)
v14.20.1  (LTS: Fermium)
v14.21.0  (LTS: Fermium)
v14.21.1  (LTS: Fermium)
v14.21.2  (LTS: Fermium)
v14.21.3  (Latest LTS: Fermium)
v15.0.0
v15.0.1
v15.1.0
@@ -668,7 +672,13 @@
v16.16.0  (LTS: Gallium)
v16.17.0  (LTS: Gallium)
v16.17.1  (LTS: Gallium)
v16.18.0  (Latest LTS: Gallium)
v16.18.0  (LTS: Gallium)
v16.18.1  (LTS: Gallium)
v16.19.0  (LTS: Gallium)
v16.19.1  (LTS: Gallium)
v16.20.0  (LTS: Gallium)
v16.20.1  (LTS: Gallium)
v16.20.2  (Latest LTS: Gallium)
v17.0.0
v17.0.1
v17.1.0
@@ -697,3 +707,46 @@
v18.9.1
v18.10.0
v18.11.0
v18.12.0  (LTS: Hydrogen)
v18.12.1  (LTS: Hydrogen)
v18.13.0  (LTS: Hydrogen)
v18.14.0  (LTS: Hydrogen)
v18.14.1  (LTS: Hydrogen)
v18.14.2  (LTS: Hydrogen)
v18.15.0  (LTS: Hydrogen)
v18.16.0  (LTS: Hydrogen)
v18.16.1  (LTS: Hydrogen)
v18.17.0  (LTS: Hydrogen)
v18.17.1  (LTS: Hydrogen)
v18.18.0  (LTS: Hydrogen)
v18.18.1  (LTS: Hydrogen)
v18.18.2  (Latest LTS: Hydrogen)
v19.0.0
v19.0.1
v19.1.0
v19.2.0
v19.3.0
v19.4.0
v19.5.0
v19.6.0
v19.6.1
v19.7.0
v19.8.0
v19.8.1
v19.9.0
v20.0.0
v20.1.0
v20.2.0
v20.3.0
v20.3.1
v20.4.0
v20.5.0
v20.5.1
v20.6.0
v20.6.1
v20.7.0
v20.8.0
v20.8.1
v20.9.0  (Latest LTS: Iron)
v21.0.0
v21.1.0

View File

@@ -1,26 +1,6 @@
v6.9.1-nightly201610183843b96e46 Boron
v6.9.2-nightly201610208bb346d61a Boron
v6.9.3-nightly20161206c350268432 Boron
v6.9.4-nightly201701049844692719 Boron
v6.9.5-nightly2017013187ac44974a Boron
v6.9.6-nightly201702013f61aae59d Boron
v6.10.1-nightly20170222ee10f21f3b Boron
v6.10.2-nightly20170322426968ddd8 Boron
v6.10.3-nightly2017040479546c0b5a Boron
v6.10.4-nightly20170502312091a196 Boron
v6.11.1-nightly20170607f7ca483d68 Boron *
v6.9.6-nightly201702013f61aae59d Boron *
v8.9.1-nightly20171104a815e1b6a2 Carbon *
v10.13.1-nightly20181127a66d8774ac Dubnium
v10.14.1-nightly20181129bda1cc703a Dubnium
v10.14.2-nightly20181206fb99a4e9fa Dubnium
v10.14.3-nightly2018122617f4208a3b Dubnium
v10.15.1-nightly201901292d6e145340 Dubnium
v10.15.2-nightly201902215711238b4e Dubnium
v10.15.3-nightly20190301156e4c8e89 Dubnium
v10.15.4-nightly20190522cda0d16414 Dubnium
v10.16.1-nightly201907310339fba1bb Dubnium
v10.16.2-nightly20190801f025f8524b Dubnium
v10.16.3-nightly20190807b743000a96 Dubnium
v10.16.4-nightly20190923859d47593e9fd97e6a9eae6eeb8b6e910acfe434 Dubnium *
v12.13.1-nightly20191022d9174b4cc5 Erbium
v10.15.4-nightly201905019101d9368f Dubnium
v10.16.2-nightly20190801f025f8524b Dubnium *
v12.22.10-nightly2022012660c9d3bb95 Erbium *

View File

@@ -172,7 +172,11 @@ v14.19.1 Fermium
v14.19.2 Fermium
v14.19.3 Fermium
v14.20.0 Fermium
v14.20.1 Fermium *
v14.20.1 Fermium
v14.21.0 Fermium
v14.21.1 Fermium
v14.21.2 Fermium
v14.21.3 Fermium *
v16.13.0 Gallium
v16.13.1 Gallium
v16.13.2 Gallium
@@ -184,4 +188,25 @@ v16.15.1 Gallium
v16.16.0 Gallium
v16.17.0 Gallium
v16.17.1 Gallium
v16.18.0 Gallium *
v16.18.0 Gallium
v16.18.1 Gallium
v16.19.0 Gallium
v16.19.1 Gallium
v16.20.0 Gallium
v16.20.1 Gallium
v16.20.2 Gallium *
v18.12.0 Hydrogen
v18.12.1 Hydrogen
v18.13.0 Hydrogen
v18.14.0 Hydrogen
v18.14.1 Hydrogen
v18.14.2 Hydrogen
v18.15.0 Hydrogen
v18.16.0 Hydrogen
v18.16.1 Hydrogen
v18.17.0 Hydrogen
v18.17.1 Hydrogen
v18.18.0 Hydrogen
v18.18.1 Hydrogen
v18.18.2 Hydrogen *
v20.9.0 Iron *

View File

@@ -2,148 +2,48 @@ v0.10.41-nightly20151203036580393d
v0.10.42-nightly20160128b125512a5c
v0.12.10-nightly20160128a305339f66
v4.0.0-nightly201509079cae65c510
v5.0.0-nightly201510266a04cc0a43
v5.0.1-nightly2015111484bb74547d
v5.1.2-nightly201512091c1c1a0f2b
v5.2.1-nightly20151210cb938aaa33
v5.3.1-nightly20151224b4c51c5b76
v5.4.1-nightly20160107138e1e501e
v5.4.2-nightly20160121e855b596f4
v5.5.1-nightly20160127a8c2050c2d
v5.6.1-nightly201602106d8eba0e5e
v5.7.1-nightly20160302c83725c604
v5.7.1-nightly20160301c83725c604
v5.7.2-nightly2016030801c331ea37
v5.10.2-nightly201604206d9c0c9aa7
v5.11.1-nightly20160504bec5d50f1e
v5.11.2-nightly2016062103d36aea4f
v6.0.0-nightly20160425eb4201f07a
v6.3.1-nightly201607209e9d499b8b
v6.3.2-nightly20160815da9bd2fc48
v6.4.1-nightly20160825723fa9637c
v6.5.1-nightly20160914180867d6a6
v6.6.1-nightly20160927f8ad0dc0e2
v6.7.1-nightly20161007d7454e7547
v6.8.1-nightly201610132540417ef5
v6.8.2-nightly201610154613c22b00
v6.9.1-nightly201610183843b96e46 Boron
v6.9.2-nightly201610208bb346d61a Boron
v6.9.3-nightly20161206c350268432 Boron
v6.9.4-nightly201701049844692719 Boron
v6.9.5-nightly2017013187ac44974a Boron
v6.9.6-nightly201702013f61aae59d Boron
v6.10.1-nightly20170222ee10f21f3b Boron
v6.10.2-nightly20170322426968ddd8 Boron
v6.10.3-nightly2017040479546c0b5a Boron
v6.10.4-nightly20170502312091a196 Boron
v6.11.1-nightly20170607f7ca483d68 Boron *
v7.0.0-nightly201610246bbdd668bd
v7.0.1-nightly2016102527e1749dcb
v7.1.1-nightly201611093daf11635d
v7.2.0-nightly20161123c1aa949064
v7.2.1-nightly201611248cabe28efb
v7.2.2-nightly20161207c2cc11b3c6
v7.3.1-nightly20161221586967a078
v7.4.1-nightly20170104e07b6516d7
v5.11.1-nightly2016050199920480ae
v5.11.2-nightly2016060121552bd0c5
v6.0.0-nightly20160301d9f7a597e4
v6.5.1-nightly20160901180867d6a6
v6.7.1-nightly20161001d7454e7547
v6.9.6-nightly201702013f61aae59d Boron *
v7.0.0-nightly20161001c8c2544cd9
v7.5.1-nightly2017020113a024d531
v7.6.1-nightly201702227a6367017c
v7.7.1-nightly201703019c75f4c78a
v7.7.2-nightly20170302b20bc130ef
v7.7.3-nightly20170309c62798034a
v7.7.4-nightly20170315753adee6aa
v7.7.5-nightly20170322bc664cb034
v7.8.1-nightly20170329517f13b607
v7.9.1-nightly20170411675ece47b3
v7.10.1-nightly2017050369a8053e8a
v8.0.0-nightly20170530effeff1843
v8.1.0-nightly20170612f6fc46e036
v8.1.1-nightly2017061323318c7661
v8.1.2-nightly20170614a1b27dbfb4
v8.1.3-nightly201706220b96a2640b
v8.1.4-nightly20170704c2c7eb1a41
v8.1.5-nightly20170718e9491f1cd4
v8.2.1-nightly2017080791b7843aeb
v8.3.1-nightly201708182d8d355a5f
v8.4.1-nightly201709104b28e0055e
v8.5.1-nightly20170921535f8d5281
v8.6.1-nightly201710116f42b680e3
v8.7.1-nightly2017102478a6ef46a9
v8.8.1-nightly201710256fbef7f350
v8.8.2-nightly20171030f00ba6b142
v8.0.0-nightly201705010f58d3cbef
v8.2.1-nightly2017080132b30d519e
v8.9.1-nightly20171104a815e1b6a2 Carbon *
v9.0.0-nightly2017103182790d84f2
v9.0.1-nightly20171105ed0fbd8d72
v9.1.1-nightly20171207c81e9682c4
v9.2.1-nightly20171208f0f9e1abf0
v9.2.2-nightly20171212f8143214be
v9.3.1-nightly2018010930273d400c
v9.4.1-nightly20180124dd56bd1591
v9.5.1-nightly20180221b9b58100e0
v9.6.1-nightly20180222927c1b1a7e
v9.6.2-nightly201802277853a7fd2a
v9.0.0-nightly20171001f9be5fe52a
v9.5.1-nightly2018020181da708f73
v9.7.1-nightly201803013f3995b7b7
v9.7.2-nightly20180307cde6671b41
v9.8.1-nightly20180320607b33cfcc
v9.9.1-nightly201803256591d9f761
v9.10.0-nightly201803270a18bf1304
v9.10.1-nightly201803284844a263ce
v9.10.2-nightly201804042bdf3ca235
v9.11.2-nightly201804135d9a7f81ae
v10.0.0-nightly20180424982adb5994
v10.0.1-nightly20180505ff148b987d
v10.1.1-nightly20180523235a272838
v10.2.1-nightly20180524be71c5dea9
v10.2.2-nightly20180526efc7f91354
v10.3.1-nightly201806067c0c61bde1
v10.4.1-nightly201806125752f520b1
v10.4.2-nightly20180619bc20ec0c0f
v10.5.1-nightly201807035d6d6fb121
v10.6.1-nightly20180718eef975ebae
v10.0.0-nightly20180401141be923f3
v10.5.1-nightly20180701b28fd37a69
v10.7.1-nightly2018080162fd84528e
v10.8.1-nightly2018081382830a809b
v10.9.0-nightly20180906707a37f74f
v10.10.1-nightly201809205da1f0ca2c
v10.11.1-nightly20181010d16486b215
v10.12.1-nightly201810283f63297fe8
v10.13.1-nightly20181127a66d8774ac Dubnium
v10.14.1-nightly20181129bda1cc703a Dubnium
v10.14.2-nightly20181206fb99a4e9fa Dubnium
v10.14.3-nightly2018122617f4208a3b Dubnium
v10.15.1-nightly201901292d6e145340 Dubnium
v10.15.2-nightly201902215711238b4e Dubnium
v10.15.3-nightly20190301156e4c8e89 Dubnium
v10.15.4-nightly20190522cda0d16414 Dubnium
v10.16.1-nightly201907310339fba1bb Dubnium
v10.16.2-nightly20190801f025f8524b Dubnium
v10.16.3-nightly20190807b743000a96 Dubnium
v10.16.4-nightly20190923859d47593e9fd97e6a9eae6eeb8b6e910acfe434 Dubnium *
v11.0.0-nightly20181023d901d16b39
v10.15.4-nightly201905019101d9368f Dubnium
v10.16.2-nightly20190801f025f8524b Dubnium *
v11.0.0-nightly201810011be804d625
v11.1.0-nightly20181101af6d26281f
v12.0.0-nightly20190423859421188b
v12.10.1-nightly20190925edd7c579e8
v12.11.1-nightly20190926acd08fdce5
v12.11.2-nightly201910115fdf4a474f
v12.12.1-nightly201910123f3c41cfb0
v12.13.1-nightly20191022d9174b4cc5 Erbium
v12.0.0-nightly2019040166b95362df
v12.22.10-nightly2022012660c9d3bb95 Erbium *
v13.0.0-nightly2019102271b342f937
v13.0.2-nightly20191028e4ab6fced1
v13.1.1-nightly201911219b71534d23
v13.2.1-nightly2019120319b31c1bc5
v13.3.1-nightly20191214b3ae532392
v13.4.1-nightly2019121896a65e85c5
v13.5.1-nightly2020010742d36dca90
v13.6.1-nightly20200121cbd84c5ee1
v13.7.1-nightly20200122340a1bd9a0
v13.8.1-nightly202002187c2d33f38f
v13.0.0-nightly2019100116e47b976b
v13.2.1-nightly20191201cbd50262c0
v13.9.1-nightly202003041bca7b6c70
v13.10.2-nightly202003117eed9d6bcc
v13.11.1-nightly2020032628e298f219
v13.12.1-nightly202004140a8e07599b
v13.13.1-nightly20200415947ddec091
v13.12.1-nightly20200401ffdd82ba3f
v14.0.0-nightly20200421c3554307c6
v15.0.0-nightly2020102011f1ad939f
v16.0.0-nightly20210420a0261d231c
v17.0.0-nightly202110193f11666dc7
v17.0.0-nightly2021100135dc3861cd
v17.5.0-nightly20220209e43808936a
v18.0.0-nightly20220419bde889bd4e
v19.0.0-nightly202210156fb466bc38
v19.0.0-nightly202210182672219b78
v20.0.0-nightly2023041197d3912eb8
v20.7.0-nightly202309173557c436181c526f41bb6ce7751e63f36695aa1d
v21.0.0-nightly202310240fb512344f
v22.0.0-nightly20231025d1ccca9d2b

View File

@@ -1 +1 @@
v19.0.0-nightly202210156fb466bc38
v22.0.0-nightly20231025d1ccca9d2b

View File

@@ -1 +1 @@
v18.11.0
v21.1.0

View File

@@ -578,7 +578,11 @@ v14.19.1 Fermium
v14.19.2 Fermium
v14.19.3 Fermium
v14.20.0 Fermium
v14.20.1 Fermium *
v14.20.1 Fermium
v14.21.0 Fermium
v14.21.1 Fermium
v14.21.2 Fermium
v14.21.3 Fermium *
v15.0.0
v15.0.1
v15.1.0
@@ -627,7 +631,13 @@ v16.15.1 Gallium
v16.16.0 Gallium
v16.17.0 Gallium
v16.17.1 Gallium
v16.18.0 Gallium *
v16.18.0 Gallium
v16.18.1 Gallium
v16.19.0 Gallium
v16.19.1 Gallium
v16.20.0 Gallium
v16.20.1 Gallium
v16.20.2 Gallium *
v17.0.0
v17.0.1
v17.1.0
@@ -656,3 +666,46 @@ v18.9.0
v18.9.1
v18.10.0
v18.11.0
v18.12.0 Hydrogen
v18.12.1 Hydrogen
v18.13.0 Hydrogen
v18.14.0 Hydrogen
v18.14.1 Hydrogen
v18.14.2 Hydrogen
v18.15.0 Hydrogen
v18.16.0 Hydrogen
v18.16.1 Hydrogen
v18.17.0 Hydrogen
v18.17.1 Hydrogen
v18.18.0 Hydrogen
v18.18.1 Hydrogen
v18.18.2 Hydrogen *
v19.0.0
v19.0.1
v19.1.0
v19.2.0
v19.3.0
v19.4.0
v19.5.0
v19.6.0
v19.6.1
v19.7.0
v19.8.0
v19.8.1
v19.9.0
v20.0.0
v20.1.0
v20.2.0
v20.3.0
v20.3.1
v20.4.0
v20.5.0
v20.5.1
v20.6.0
v20.6.1
v20.7.0
v20.8.0
v20.8.1
v20.9.0 Iron *
v21.0.0
v21.1.0

View File

@@ -1,6 +1,8 @@
lts/*|lts/gallium
lts/gallium|v16.18.0
lts/fermium|v14.20.1
lts/*|lts/iron
lts/iron|v20.9.0
lts/hydrogen|v18.18.2
lts/gallium|v16.20.2
lts/fermium|v14.21.3
lts/erbium|v12.22.12
lts/dubnium|v10.24.1
lts/carbon|v8.17.0

View File

@@ -10,9 +10,9 @@ die () { echo "$@" ; cleanup ; exit 1; }
set -ex
# nvm_download install.sh
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh" >/dev/null || die "nvm_download unable to download install.sh"
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null || die "nvm_download unable to download install.sh"
# nvm_download should fail to download wrong_install.sh
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/master/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
cleanup

View File

@@ -0,0 +1,55 @@
#!/bin/sh
cleanup () {
unset -f nvm_get_mirror
}
die () { echo "$@" ; cleanup ; exit 1; }
\. ../../../nvm.sh
# bad flavor
ACTUAL="$(nvm_download_artifact 2>&1)"
CODE="$(nvm_download_artifact >/dev/null 2>&1 ; echo $?)"
EXPECTED='supported flavors: node, iojs'
EXPECTED_CODE=1
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# bad kind
ACTUAL="$(nvm_download_artifact node 2>&1)"
CODE="$(nvm_download_artifact node >/dev/null 2>&1 ; echo $?)"
EXPECTED='supported kinds: binary, source'
EXPECTED_CODE=1
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# bad type
ACTUAL="$(nvm_download_artifact node binary nonexistentType 2>&1)"
CODE="$(nvm_download_artifact node binary nonexistentType >/dev/null 2>&1 ; echo $?)"
EXPECTED='unknown type of node.js or io.js release'
EXPECTED_CODE=2
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# no version
ACTUAL="$(nvm_download_artifact node binary std 2>&1)"
CODE="$(nvm_download_artifact node binary std >/dev/null 2>&1 ; echo $?)"
EXPECTED='A version number is required.'
EXPECTED_CODE=3
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"
# binary type, version without binary available
VERSION=0.8.5
ACTUAL="$(nvm_download_artifact node binary std ${VERSION} 2>&1)"
CODE="$(nvm_download_artifact node binary std ${VERSION} >/dev/null 2>&1 ; echo $?)"
EXPECTED="No precompiled binary available for ${VERSION}."
EXPECTED_CODE=0
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
[ "${CODE}" = $EXPECTED_CODE ] || die "expected exit code ${EXPECTED_CODE}, got ${CODE}"

View File

@@ -31,3 +31,6 @@ ACTUAL="$(PWD=$TEST_DIR/no-nesting-n_m nvm_find_project_dir)"
ACTUAL="$(PWD=$TEST_DIR/no-nesting-pkg nvm_find_project_dir)"
[ "${ACTUAL}" = "$TEST_DIR/no-nesting-pkg" ] || die "no-nesting-pkg: got ${ACTUAL}"
ACTUAL="$(PWD="." nvm_find_project_dir)"
[ "${ACTUAL}" = "." ] || die "insufficient permissions for pwd: got ${ACTUAL}"

View File

@@ -21,5 +21,6 @@ TEST_DIR="$PWD"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 2 dirs up"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find in current dir"
[ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c/d nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find 1 level up from current dir"
[ "~$(PWD="." nvm_find_up 'test')" = "~." ] || die "failed to handle '.' output from pwd"
cleanup

View File

@@ -80,5 +80,6 @@ run_test x86 osx x86
run_test amd64 osx x64
run_test arm64 smartos x64
run_test armv8l smartos x64
cleanup

View File

@@ -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

View File

@@ -30,3 +30,11 @@ unset NVM_NODEJS_ORG_MIRROR
NVM_IOJS_ORG_MIRROR="test://domain"
[ "$(nvm_get_mirror iojs std)" = "test://domain" ] || die "iojs-std mirror should respect NVM_IOJS_ORG_MIRROR"
unset NVM_IOJS_ORG_MIRROR
NVM_NODEJS_ORG_MIRROR='`do something bad`'
! nvm_get_mirror node std || die 'NVM_NODEJS_ORG_MIRROR errors with command injection attempt'
[ "$(nvm_get_mirror node std)" = "" ] || die 'NVM_NODEJS_ORG_MIRROR is protected against command injection'
NVM_IOJS_ORG_MIRROR='`do something bad`'
! nvm_get_mirror iojs std || die 'NVM_IOJS_ORG_MIRROR errors with command injection attempt'
[ "$(nvm_get_mirror iojs std)" = "" ] || die 'NVM_IOJS_ORG_MIRROR is protected against command injection'

View File

@@ -27,10 +27,10 @@ OUTPUT="$(nvm_ls_remote)"
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH")"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
OUTPUT="$(nvm_ls_remote 10.0)"
EXPECTED_OUTPUT="v10.0.0-nightly20180424982adb5994
v10.0.1-nightly20180505ff148b987d"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote 10.0 did not output 10.0 nightly versions; got $OUTPUT"
OUTPUT="$(nvm_ls_remote 11)"
EXPECTED_OUTPUT="v11.0.0-nightly201810011be804d625
v11.1.0-nightly20181101af6d26281f"
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote 11 did not output v11 nightly versions; got $OUTPUT"
# Sanity checks
OUTPUT="$(nvm_print_implicit_alias remote stable)"

View File

@@ -16,3 +16,9 @@ TEST_PATH="$NVM_DIR/v0.10.5/bin:/usr/bin:$NVM_DIR/v0.11.5/bin:$NVM_DIR/v0.9.5/bi
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
[ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH "
TEST_PATH=":/a/b/bin::/c/d/bin:"
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
[ "$STRIPPED_PATH" = "$TEST_PATH" ] || die "Stripping does not preserve colons: $STRIPPED_PATH "

View File

@@ -32,15 +32,17 @@ setup
npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package'
message=$(nvm_check_global_modules)
[ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed"
[ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed; got:\n${message}"
# Admit we're using NVM, just for this one test
message=$(NVM_DIR=$ORIGINAL_NVM_DIR nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm"
if [ -n "${ORIGINAL_NVM_DIR}" ]; then
# Admit we're using NVM, just for this one test
message=$(NVM_DIR="${ORIGINAL_NVM_DIR}" nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm is managed by nvm; got:\n${message}"
fi
npm uninstall -g nop >/dev/null
message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed"
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed; got:\n${message}"
# Faking an installation of npm
mkdir -p "$npm_config_prefix/lib/node_modules/npm"
@@ -49,7 +51,7 @@ cat <<'JSON' >"$npm_config_prefix/lib/node_modules/npm/package.json"
JSON
message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module"
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module; got:\n${message}"
# Faking the absence of npm
PATH=".:$PATH"
@@ -57,7 +59,7 @@ touch npm
chmod +x npm
message=$(nvm_check_global_modules)
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable"
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable; got:\n${message}"
cleanup

View File

@@ -6,3 +6,13 @@ NVM_ENV=testing \. ../../install.sh
#nvm_do_install is available
type nvm_do_install > /dev/null 2>&1 || die 'nvm_do_install is not available'
FILE_PATH="$(pwd)/nvm_do_install"
echo $FILE_PATH
$(NVM_DIR="${FILE_PATH}" nvm_do_install >/dev/null 2>&1)
EXIT_CODE=$(echo $?)
[ "${EXIT_CODE}" = '1' ] || die "nvm_do_install should fail if NVM_DIR is a file: expected 1, got <${EXIT_CODE}>"
ACTUAL="$(NVM_DIR="${FILE_PATH}" nvm_do_install 2>&1)"
EXPECTED="File \"${FILE_PATH}\" has the same name as installation directory."
[ "${ACTUAL}" = "${EXPECTED}" ] || die "got <${ACTUAL}>, expected <${EXPECTED}>"

View File

@@ -8,10 +8,10 @@ die () { echo "$@" ; cleanup ; exit 1; }
NVM_ENV=testing \. ../../install.sh
# nvm_download install.sh
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh" >/dev/null || die "nvm_download unable to download install.sh"
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null || die "nvm_download unable to download install.sh"
# nvm_download should fail to download wrong_install.sh
if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/master/wrong_install.sh" &>/dev/null; then
if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" &>/dev/null; then
die "nvm_download should fail to download no existing file"
fi

View File

@@ -30,7 +30,7 @@ out=$(nvm_source "anything" 2>&1 >/dev/null) || : #Saving the process here
[ -z "$out" ] && die "nvm_source with invalid parameter should error out"
#nvm_source should always return NVM_SOURCE no matter the parameters
NVM_SOURCE="my_location"
export NVM_SOURCE="my_location"
out=$(nvm_source)
[ "_$out" = "_my_location" ] || die "nvm_source without arguments should have returned \$NVM_SOURCE. Got \"$out\""
out=$(nvm_source "git")

5
test/mocks/uname_linux_armv8l Executable file
View File

@@ -0,0 +1,5 @@
if [ "_$1" = "_-m" ]; then
echo "armv8l"
else
echo "Linux 3.18.14-14721103 #1 SMP PREEMPT Thu Mar 5 20:35:37 KST 2020 armv8l armv8l armv8l GNU/Linux"
fi

29
test/xenial/install from source Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/sh
set -ex
die () { echo "$@" ; exit 1; }
set +e # TODO: fix
\. ../../nvm.sh
set -e
nvm deactivate || die 'deactivate failed'
nvm unalias default || die 'unable to unalias default'
NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering.
nvm uninstall "${NVM_TEST_VERSION}" || die 'nvm uninstall failed'
# Install from source
nvm install -s "${NVM_TEST_VERSION}" || die "'nvm install -s ${NVM_TEST_VERSION}' failed"
# Check
[ -d ../../$NVM_TEST_VERSION ] || die "../../${NVM_TEST_VERSION} is not a directory"
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run ${NVM_TEST_VERSION} --version | grep ${NVM_TEST_VERSION}' failed"
# ensure default is set
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
[ "${NVM_CURRENT_DEFAULT}" = "${NVM_TEST_VERSION}" ] || die "wrong default alias: $(nvm alias)"

View File

@@ -0,0 +1,33 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../nvm.sh
NVM_TEST_VERSION=v0.10.7
# STAGE 1 #
# Remove the stuff we're clobbering.
[ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from source with 1 make job
nvm install -s -j 1 $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed"
# Check
[ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed"
# STAGE 2 #
# Remove the stuff we're clobbering.
[ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Install from source with 2 make jobs (and swapped arg order)
nvm install -j 2 -s $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed"
# Check
[ -d ../../$NVM_TEST_VERSION ]
nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed"

View File

@@ -0,0 +1,25 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
\. ../../nvm.sh
NVM_TEST_VERSION=v0.10.7
# Remove the stuff we're clobbering.
[ -e ../../$NVM_TEST_VERSION ] && rm -R ../../$NVM_TEST_VERSION
# Fake ARM arch
nvm_get_arch() {
echo "armv7l"
}
# Install from source
nvm install -s $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed"
# Check Install
[ -d ../../$NVM_TEST_VERSION ]
node --version | grep $NVM_TEST_VERSION || "'node --version | grep $NVM_TEST_VERSION' failed"
# Check V8 snapshot isn't compiled
node -p "if(! process.config.variables.v8_use_snapshot) { console.log('no-snapshot'); }" | grep "no-snapshot" || "'node -p \"if(! process.config.variables.v8_use_snapshot) { console.log('no-snapshot'); }\" | grep \"no-snapshot\"' failed"

45
test/xenial/install hook Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/sh
die () { echo "$@" ; exit 1; }
. ../../nvm.sh
VERSION='v0.11.0'
VERSION_PATH="$(nvm_version_path "${VERSION}")"
succeed() {
nvm_echo "$@"
NVM_INSTALL_THIRD_PARTY_HOOK= nvm install "${VERSION}"
}
fail() {
succeed "$@"
return 11
}
! nvm_is_version_installed "${VERSION}" || nvm uninstall "${VERSION}" || die 'uninstall failed'
# an existing but empty VERSION_PATH directory should not be enough to satisfy nvm_is_version_installed
rm -rf "${VERSION_PATH}"
mkdir -p "${VERSION_PATH}"
nvm_is_version_installed "${VERSION}" && die 'nvm_is_version_installed check not strict enough'
rmdir "${VERSION_PATH}"
OUTPUT="$(NVM_INSTALL_THIRD_PARTY_HOOK=succeed nvm install "${VERSION}")"
USE_OUTPUT="$(nvm use "${VERSION}")"
EXPECTED_OUTPUT="${VERSION} node std binary ${VERSION_PATH}
Downloading and installing node ${VERSION}...
${USE_OUTPUT}"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"
! nvm_is_version_installed "${VERSION}" || nvm uninstall "${VERSION}" || die 'uninstall 2 failed'
OUTPUT="$(NVM_INSTALL_THIRD_PARTY_HOOK=fail nvm install "${VERSION}" || echo 'failed')"
USE_OUTPUT="$(nvm use "${VERSION}")"
EXPECTED_OUTPUT="${VERSION} node std binary ${VERSION_PATH}
Downloading and installing node ${VERSION}...
${USE_OUTPUT}
failed"
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<; got >${OUTPUT}<"