mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-01-12 10:17:18 +08:00
Compare commits
4 Commits
dd872e126b
...
temp4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c2e3b2c88 | ||
|
|
d9157e8ef8 | ||
|
|
4da01f4dc4 | ||
|
|
95c859b5f3 |
16
.dockerignore
Normal file
16
.dockerignore
Normal file
@@ -0,0 +1,16 @@
|
||||
HEAD
|
||||
.cache
|
||||
v*
|
||||
alias
|
||||
|
||||
# For testing
|
||||
test/bak
|
||||
.urchin.log
|
||||
.urchin_stdout
|
||||
test/**/test_output
|
||||
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
|
||||
.DS_Store
|
||||
current
|
||||
28
.editorconfig
Normal file
28
.editorconfig
Normal file
@@ -0,0 +1,28 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
tab_width = 2
|
||||
indent_size = 2
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.txt]
|
||||
indent_size = false
|
||||
|
||||
[test/fast/Listing versions/Running 'nvm ls' calls into nvm_alias]
|
||||
indent_size = false
|
||||
|
||||
[test/fast/Listing versions/Running 'nvm ls --no-alias' does not call into nvm_alias]
|
||||
indent_size = false
|
||||
|
||||
[test/fast/Unit tests/mocks/**]
|
||||
insert_final_newline = off
|
||||
|
||||
[test/**/.urchin*]
|
||||
insert_final_newline = off
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1 +1 @@
|
||||
* text=auto eol=lf
|
||||
* eol=lf
|
||||
|
||||
12
.github/FUNDING.yml
vendored
Normal file
12
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [ljharb]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: npm/nvm
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
@@ -1,11 +1,3 @@
|
||||
---
|
||||
name: File an issue…
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- Thank you for being interested in nvm! Please help us by filling out the following form if you‘re having trouble. If you have a feature request, or some other question, please feel free to clear out the form. Thanks! -->
|
||||
|
||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
1
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
3
.github/SECURITY.md
vendored
Normal file
3
.github/SECURITY.md
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Security
|
||||
|
||||
Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
|
||||
100
.github/workflows/5codeql.yml
vendored
100
.github/workflows/5codeql.yml
vendored
@@ -1,100 +0,0 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL Advanced"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '44 18 * * 1'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze (${{ matrix.language }})
|
||||
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||
# - https://gh.io/supported-runners-and-hardware-resources
|
||||
# - https://gh.io/using-larger-runners (GitHub.com only)
|
||||
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
|
||||
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
||||
permissions:
|
||||
# required for all workflows
|
||||
security-events: write
|
||||
|
||||
# required to fetch internal or private CodeQL packs
|
||||
packages: read
|
||||
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- language: actions
|
||||
build-mode: none
|
||||
- language: javascript-typescript
|
||||
build-mode: none
|
||||
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
|
||||
# Use `c-cpp` to analyze code written in C, C++ or both
|
||||
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
|
||||
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
|
||||
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
|
||||
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Add any setup steps before running the `github/codeql-action/init` action.
|
||||
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
||||
# or others). This is typically only required for manual builds.
|
||||
# - name: Setup runtime (example)
|
||||
# uses: actions/setup-example@v1
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
# If the analyze step fails for one of the languages you are analyzing with
|
||||
# "We were unable to automatically build your code", modify the matrix above
|
||||
# to set the build mode to "manual" for that language. Then modify this step
|
||||
# to build your code.
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
- if: matrix.build-mode == 'manual'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'If you are using a "manual" build mode for one or more of the' \
|
||||
'languages you are analyzing, replace this with the commands to build' \
|
||||
'your code, for example:'
|
||||
echo ' make bootstrap'
|
||||
echo ' make release'
|
||||
exit 1
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
100
.github/workflows/codeql.yml
vendored
100
.github/workflows/codeql.yml
vendored
@@ -1,100 +0,0 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL Advanced"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '44 1 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze (${{ matrix.language }})
|
||||
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||
# - https://gh.io/supported-runners-and-hardware-resources
|
||||
# - https://gh.io/using-larger-runners (GitHub.com only)
|
||||
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
|
||||
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
||||
permissions:
|
||||
# required for all workflows
|
||||
security-events: write
|
||||
|
||||
# required to fetch internal or private CodeQL packs
|
||||
packages: read
|
||||
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- language: actions
|
||||
build-mode: none
|
||||
- language: javascript-typescript
|
||||
build-mode: none
|
||||
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
|
||||
# Use `c-cpp` to analyze code written in C, C++ or both
|
||||
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
|
||||
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
|
||||
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
|
||||
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Add any setup steps before running the `github/codeql-action/init` action.
|
||||
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
||||
# or others). This is typically only required for manual builds.
|
||||
# - name: Setup runtime (example)
|
||||
# uses: actions/setup-example@v1
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
# If the analyze step fails for one of the languages you are analyzing with
|
||||
# "We were unable to automatically build your code", modify the matrix above
|
||||
# to set the build mode to "manual" for that language. Then modify this step
|
||||
# to build your code.
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
- if: matrix.build-mode == 'manual'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'If you are using a "manual" build mode for one or more of the' \
|
||||
'languages you are analyzing, replace this with the commands to build' \
|
||||
'your code, for example:'
|
||||
echo ' make bootstrap'
|
||||
echo ' make release'
|
||||
exit 1
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
98
.github/workflows/docker-publish.yml
vendored
98
.github/workflows/docker-publish.yml
vendored
@@ -1,98 +0,0 @@
|
||||
name: Docker
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '35 2 * * *'
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
# Publish semver tags as releases.
|
||||
tags: [ 'v*.*.*' ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# This is used to complete the identity challenge
|
||||
# with sigstore/fulcio when running outside of PRs.
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Install the cosign tool except on PR
|
||||
# https://github.com/sigstore/cosign-installer
|
||||
- name: Install cosign
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 #v3.5.0
|
||||
with:
|
||||
cosign-release: 'v2.2.4'
|
||||
|
||||
# Set up BuildKit Docker container builder to be able to build
|
||||
# multi-platform images and export cache
|
||||
# https://github.com/docker/setup-buildx-action
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
id: build-and-push
|
||||
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
# Sign the resulting Docker image digest except on PRs.
|
||||
# This will only write to the public Rekor transparency log when the Docker
|
||||
# repository is public to avoid leaking data. If you would like to publish
|
||||
# transparency data even for private images, pass --force to cosign below.
|
||||
# https://github.com/sigstore/cosign
|
||||
- name: Sign the published Docker image
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
env:
|
||||
# https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
|
||||
TAGS: ${{ steps.meta.outputs.tags }}
|
||||
DIGEST: ${{ steps.build-and-push.outputs.digest }}
|
||||
# This step uses the identity token to provision an ephemeral certificate
|
||||
# against the sigstore community Fulcio instance.
|
||||
run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}
|
||||
54
.github/workflows/install.yml
vendored
Normal file
54
.github/workflows/install.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
name: install script
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
name: "tests: install script"
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
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: npm bin
|
||||
- run: env
|
||||
- run: TERM=xterm-256color SHELL="${{ matrix.shell }}" URCHIN="$(npm bin)/urchin" TEST_SUITE="${{ matrix.suite }}" make test-${{ matrix.shell }}
|
||||
|
||||
nvm:
|
||||
name: 'all test suites, all shells'
|
||||
needs: [tests]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: 'echo tests completed'
|
||||
33
.github/workflows/npm-publish.yml
vendored
33
.github/workflows/npm-publish.yml
vendored
@@ -1,33 +0,0 @@
|
||||
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
||||
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
|
||||
|
||||
name: Node.js Package
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
|
||||
publish-npm:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
registry-url: https://registry.npmjs.org/
|
||||
- run: npm ci
|
||||
- run: npm publish
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
||||
104
.github/workflows/nvm-install-test.yml
vendored
104
.github/workflows/nvm-install-test.yml
vendored
@@ -1,104 +0,0 @@
|
||||
name: 'Tests: nvm install with set -e'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'git ref to use'
|
||||
required: false
|
||||
default: 'HEAD'
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.matrix.outputs.matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- id: matrix
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ -n "${{ github.event.inputs.ref }}" ]; then
|
||||
echo "matrix=\"[\"${{ github.event.inputs.ref }}\"]\"" >> $GITHUB_OUTPUT
|
||||
else
|
||||
TAGS="$((echo "HEAD" && git tag --sort=-v:refname --merged HEAD --format='%(refname:strip=2) %(creatordate:short)' | grep '^v' | while read tag date; do
|
||||
if [ "$(uname)" == "Darwin" ]; then
|
||||
timestamp=$(date -j -f "%Y-%m-%d" "$date" +%s)
|
||||
threshold=$(date -j -v-4y +%s)
|
||||
else
|
||||
timestamp=$(date -d "$date" +%s)
|
||||
threshold=$(date -d "4 years ago" +%s)
|
||||
fi
|
||||
if [ $timestamp -ge $threshold ]; then echo "$tag"; fi
|
||||
done) | xargs)"
|
||||
echo $TAGS
|
||||
TAGS_JSON=$(printf "%s\n" $TAGS | jq -R . | jq -sc .)
|
||||
echo "matrix=${TAGS_JSON}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
test:
|
||||
needs: [matrix]
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: ${{ matrix.ref == 'v0.40.0' }} # https://github.com/nvm-sh/nvm/issues/3405
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
ref: ${{ fromJson(needs.matrix.outputs.matrix) }}
|
||||
has-nvmrc:
|
||||
- 'no nvmrc'
|
||||
- 'nvmrc'
|
||||
shell-level:
|
||||
- 1 shlvl
|
||||
- 2 shlvls
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: resolve HEAD to sha
|
||||
run: |
|
||||
if [ '${{ matrix.ref }}' = 'HEAD' ]; then
|
||||
REF="$(git rev-parse HEAD)"
|
||||
else
|
||||
REF="${{ matrix.ref }}"
|
||||
fi
|
||||
echo "resolved ref: ${REF}"
|
||||
echo "ref="$REF"" >> $GITHUB_ENV
|
||||
- run: echo $- # which options are set
|
||||
- run: echo node > .nvmrc
|
||||
if: ${{ matrix.has-nvmrc == 'nvmrc' }}
|
||||
- run: curl -I --compressed -v https://nodejs.org/dist/
|
||||
- name: 'install nvm'
|
||||
run: |
|
||||
set -e
|
||||
export NVM_INSTALL_VERSION="${ref}"
|
||||
curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${ref}/install.sh" | bash
|
||||
- name: nvm --version
|
||||
run: |
|
||||
set +e
|
||||
. $NVM_DIR/nvm.sh && nvm --version
|
||||
- name: nvm install in 1 shell level, ${{ matrix.has-nvmrc }}
|
||||
if: ${{ matrix.shell-level == '1 shlvl' }}
|
||||
run: |
|
||||
set -ex
|
||||
. $NVM_DIR/nvm.sh
|
||||
echo nvm.sh sourced
|
||||
nvm --version
|
||||
if [ '${{ matrix.has-nvmrc }}' == 'nvmrc' ]; then
|
||||
nvm install
|
||||
fi
|
||||
- name: nvm install in 2 shell levels, ${{ matrix.has-nvmrc }}
|
||||
if: ${{ matrix.shell-level == '2 shlvls' }}
|
||||
run: |
|
||||
if [ '${{ matrix.has-nvmrc }}' == 'nvmrc' ]; then
|
||||
bash -c "set -ex && . $NVM_DIR/nvm.sh && echo nvm.sh sourced && nvm --version && nvm install"
|
||||
else
|
||||
bash -c "set -ex && . $NVM_DIR/nvm.sh && echo nvm.sh sourced && nvm --version"
|
||||
fi
|
||||
|
||||
finisher:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [test]
|
||||
steps:
|
||||
- run: true
|
||||
56
.github/workflows/shellcheck.yml
vendored
56
.github/workflows/shellcheck.yml
vendored
@@ -1,56 +0,0 @@
|
||||
name: 'Tests: shellcheck'
|
||||
|
||||
on: [pull_request, push]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
shellcheck_matrix:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
shell:
|
||||
- bash
|
||||
- sh
|
||||
- dash
|
||||
- ksh
|
||||
file:
|
||||
- nvm.sh
|
||||
include:
|
||||
- shell: bash
|
||||
file: install.sh # only supported on bash
|
||||
- shell: bash
|
||||
file: bash_completion # only needed in bash/zsh
|
||||
- shell: bash
|
||||
file: nvm-exec # only runs in bash
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v2
|
||||
with:
|
||||
allowed-endpoints:
|
||||
ghcr.io:443
|
||||
github.com:443
|
||||
pkg-containers.githubusercontent.com:443
|
||||
formulae.brew.sh:443
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Homebrew
|
||||
uses: Homebrew/actions/setup-homebrew@master
|
||||
- name: Install latest shellcheck
|
||||
run: brew install shellcheck
|
||||
env:
|
||||
HOMEBREW_NO_ANALYTICS: 1
|
||||
- run: which shellcheck
|
||||
- run: shellcheck --version
|
||||
- name: Run shellcheck on ${{ matrix.file }}
|
||||
run: shellcheck -s ${{ matrix.shell }} ${{ matrix.file }}
|
||||
|
||||
shellcheck:
|
||||
permissions:
|
||||
contents: none
|
||||
needs: [shellcheck_matrix]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: true
|
||||
80
.github/workflows/tests.yml
vendored
80
.github/workflows/tests.yml
vendored
@@ -1,80 +0,0 @@
|
||||
name: urchin tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
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:
|
||||
exclude:
|
||||
- shell: sh
|
||||
suite: install_script
|
||||
- shell: dash
|
||||
suite: install_script
|
||||
- shell: zsh
|
||||
suite: install_script
|
||||
- shell: ksh
|
||||
suite: install_script
|
||||
suite:
|
||||
- install_script
|
||||
- sourcing
|
||||
- slow
|
||||
- installation_iojs
|
||||
shell:
|
||||
- sh
|
||||
- bash
|
||||
- dash
|
||||
- zsh
|
||||
# - ksh
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v2
|
||||
with:
|
||||
allowed-endpoints:
|
||||
github.com:443
|
||||
registry.npmjs.org:443
|
||||
raw.githubusercontent.com:443
|
||||
nodejs.org:443
|
||||
iojs.org:443
|
||||
azure.archive.ubuntu.com:80
|
||||
packages.microsoft.com:443
|
||||
- uses: actions/checkout@v4
|
||||
- run: sudo apt-get update; sudo apt-get install ${{ matrix.shell }}
|
||||
if: matrix.shell == 'zsh' || matrix.shell == 'ksh'
|
||||
# zsh (https://github.com/actions/runner-images/issues/264) and ksh are not in the ubuntu image
|
||||
shell: bash
|
||||
- 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/install@main
|
||||
name: 'npm install && version checks'
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
skip-ls-check: true
|
||||
- run: npm ls urchin
|
||||
- run: npx which urchin
|
||||
- run: env
|
||||
- run: make TERM=xterm-256color TEST_SUITE="${{ matrix.suite }}" SHELL="${{ matrix.shell }}" URCHIN="$(npx which urchin)" test-${{ matrix.shell }}
|
||||
|
||||
nvm:
|
||||
permissions:
|
||||
contents: none
|
||||
name: 'all test suites, all shells'
|
||||
needs: [tests]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: true
|
||||
41
.github/workflows/toc.yml
vendored
41
.github/workflows/toc.yml
vendored
@@ -1,41 +0,0 @@
|
||||
name: update readme TOC
|
||||
|
||||
on: [push]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
_:
|
||||
permissions:
|
||||
contents: write
|
||||
name: "update readme TOC"
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v2
|
||||
with:
|
||||
allowed-endpoints:
|
||||
github.com:443
|
||||
registry.npmjs.org:443
|
||||
api.github.com:443
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
# https://github.com/actions/checkout/issues/217#issue-599945005
|
||||
# pulls all commits (needed for lerna / semantic release to correctly version)
|
||||
fetch-depth: "0"
|
||||
|
||||
# pulls all tags (needed for lerna / semantic release to correctly version)
|
||||
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
- run: npm install
|
||||
- run: npm run doctoc
|
||||
- name: commit changes
|
||||
uses: ljharb/actions-js-build/commit@v3+amendpush
|
||||
with:
|
||||
amend: true
|
||||
force: true
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,7 +9,6 @@ test/bak
|
||||
.urchin.log
|
||||
.urchin_stdout
|
||||
test/**/test_output
|
||||
test/**/.nvmrc
|
||||
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
@@ -22,5 +21,3 @@ current
|
||||
npm-shrinkwrap.json
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
target/
|
||||
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule "test/fixtures/nvmrc"]
|
||||
path = test/fixtures/nvmrc
|
||||
url = git@github.com:nvm-sh/nvmrc.git
|
||||
74
.travis.yml
Normal file
74
.travis.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
language: generic
|
||||
dist: focal
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- zsh
|
||||
# - ksh
|
||||
# - gcc-4.8
|
||||
# - g++-4.8
|
||||
|
||||
cache:
|
||||
ccache: true
|
||||
directories:
|
||||
- $TRAVIS_BUILD_DIR/.cache
|
||||
- $TRAVIS_BUILD_DIR/node_modules
|
||||
before_install:
|
||||
- sudo sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
|
||||
- sudo update-ca-certificates -f
|
||||
- $SHELL --version 2> /dev/null || dpkg -s $SHELL 2> /dev/null || which $SHELL
|
||||
- curl --version
|
||||
- wget --version
|
||||
- bash --version | head
|
||||
- zsh --version
|
||||
- dpkg -s dash | grep ^Version | awk '{print $2}'
|
||||
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
|
||||
before_cache:
|
||||
- if [ -n "$WITHOUT_CURL" ]; then sudo apt-get install curl -y ; fi
|
||||
env:
|
||||
global:
|
||||
- CXX=g++
|
||||
- CC=gcc
|
||||
- PATH="$(echo $PATH | sed 's/::/:/')"
|
||||
- PATH="/usr/lib/ccache/:$PATH"
|
||||
- NVM_DIR="${TRAVIS_BUILD_DIR}"
|
||||
matrix:
|
||||
- SHELL=sh TEST_SUITE=fast
|
||||
- SHELL=dash TEST_SUITE=fast
|
||||
- SHELL=bash TEST_SUITE=fast
|
||||
- SHELL=zsh TEST_SUITE=fast
|
||||
# - SHELL=ksh TEST_SUITE=fast
|
||||
- SHELL=sh TEST_SUITE=sourcing
|
||||
- SHELL=dash TEST_SUITE=sourcing
|
||||
- SHELL=bash TEST_SUITE=sourcing
|
||||
- SHELL=zsh TEST_SUITE=sourcing
|
||||
# - SHELL=ksh TEST_SUITE=sourcing
|
||||
- SHELL=sh TEST_SUITE=slow
|
||||
- SHELL=dash TEST_SUITE=slow
|
||||
- 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
|
||||
- SHELL=dash TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
||||
- SHELL=bash TEST_SUITE=installation_iojs
|
||||
- SHELL=bash TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
||||
- SHELL=zsh TEST_SUITE=installation_iojs
|
||||
- SHELL=zsh TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
||||
# - SHELL=ksh TEST_SUITE=installation_iojs
|
||||
# - SHELL=ksh TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
||||
3893
CHANGELOG.md
3893
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -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/HEAD/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/master/CODE_OF_CONDUCT.md).
|
||||
|
||||
---
|
||||
|
||||
|
||||
21
CONTRIBUTING.md
Normal file
21
CONTRIBUTING.md
Normal file
@@ -0,0 +1,21 @@
|
||||
Thanks for contributing to `nvm`!
|
||||
|
||||
We love pull requests and issues, they're our favorite.
|
||||
|
||||
However, before submitting, please review the following:
|
||||
|
||||
For bug reports:
|
||||
|
||||
- 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.
|
||||
|
||||
For pull requests:
|
||||
|
||||
- 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.
|
||||
|
||||
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!
|
||||
25
Dockerfile
25
Dockerfile
@@ -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:22.04
|
||||
FROM ubuntu:20.04
|
||||
LABEL maintainer="Peter Dave Hello <hsu@peterdavehello.org>"
|
||||
LABEL name="nvm-dev-env"
|
||||
LABEL version="latest"
|
||||
@@ -24,6 +24,9 @@ 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
|
||||
@@ -83,7 +86,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
|
||||
@@ -91,20 +94,16 @@ RUN echo 'nvm ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||
# Switch to user "nvm" from now
|
||||
USER nvm
|
||||
|
||||
# Create a script file sourced by both interactive and non-interactive bash shells
|
||||
ENV BASH_ENV /home/nvm/.bash_env
|
||||
RUN touch "$BASH_ENV"
|
||||
RUN echo '. "$BASH_ENV"' >> "$HOME/.bashrc"
|
||||
|
||||
# nvm
|
||||
RUN echo 'export NVM_DIR="$HOME/.nvm"' >> "$BASH_ENV"
|
||||
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> "$BASH_ENV"
|
||||
RUN echo '[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> "$BASH_ENV"
|
||||
RUN echo 'export NVM_DIR="$HOME/.nvm"' >> "$HOME/.bashrc"
|
||||
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> "$HOME/.bashrc"
|
||||
RUN echo '[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> "$HOME/.bashrc"
|
||||
|
||||
# nodejs and tools
|
||||
RUN nvm install node
|
||||
RUN npm install -g doctoc urchin eclint dockerfile_lint
|
||||
RUN npm install --prefix "$HOME/.nvm/"
|
||||
RUN bash -c 'source $HOME/.nvm/nvm.sh && \
|
||||
nvm install node && \
|
||||
npm install -g doctoc urchin eclint dockerfile_lint && \
|
||||
npm install --prefix "$HOME/.nvm/"'
|
||||
|
||||
# Set WORKDIR to nvm directory
|
||||
WORKDIR /home/nvm/.nvm
|
||||
|
||||
28
LICENSE
28
LICENSE
@@ -1,28 +0,0 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2025, DIMVY clothing brand
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
22
LICENSE.md
Normal file
22
LICENSE.md
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2010 Tim Caswell
|
||||
|
||||
Copyright (c) 2014 Jordan Harband
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
10
Makefile
10
Makefile
@@ -40,14 +40,10 @@ list:
|
||||
# Note that preexisting NVM_* variables are unset to avoid interfering with tests, except when running the Travis tests (where NVM_DIR must be passed in and the env. is assumed to be pristine).
|
||||
.PHONY: $(SHELL_TARGETS)
|
||||
$(SHELL_TARGETS):
|
||||
@shell='$@'; shell=$${shell##*-}; \
|
||||
which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
|
||||
@shell='$@'; shell=$${shell##*-}; which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \
|
||||
printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \
|
||||
[ -z "$$TRAVIS_BUILD_DIR" ] && [ -z "$$GITHUB_ACTIONS" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
|
||||
for suite in $(TEST_SUITE); do \
|
||||
echo "Running test suite: $$suite"; \
|
||||
$(URCHIN) -f -s $$shell test/$$suite || exit; \
|
||||
done
|
||||
[ -z "$$TRAVIS_BUILD_DIR" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \
|
||||
for suite in $(TEST_SUITE); do $(URCHIN) -f -s $$shell test/$$suite || exit; done
|
||||
|
||||
# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS).
|
||||
.PHONY: test
|
||||
|
||||
49
PROJECT_CHARTER.md
Normal file
49
PROJECT_CHARTER.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# `nvm` Charter
|
||||
|
||||
nvm is a version manager for Node.js, designed to be installed per-user, and invoked per-shell. nvm works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and Windows WSL.
|
||||
|
||||
## Section 0: Guiding Principles
|
||||
|
||||
The `nvm` project is part of the [OpenJS Foundation][openjs foundation], which operates transparently, openly, collaboratively, and ethically. Project proposals, timelines, and status must not merely be open, but also easily visible to outsiders.
|
||||
|
||||
## Section 1: Scope
|
||||
|
||||
`nvm` is a node version manager, focused on making it easy to install and manage multiple Node.js versions. Any features related to managing the installation and removal of Node.js on any node-supported platform are potentially in scope.
|
||||
|
||||
## Section 2: Relationship with OpenJS Foundation CPC.
|
||||
|
||||
Technical leadership for the projects within the [OpenJS Foundation][openjs foundation] is delegated to the projects through their project charters by the [OpenJS Foundation Cross-Project Council](https://openjsf.org/about/governance/) (CPC). In the case of the `nvm` project, it is delegated to the [`nvm` Maintainers](README.md#maintainers) (the “Maintainers”). The OpenJS Foundation's business leadership is the Board of Directors (the “Board”).
|
||||
|
||||
This `nvm` Charter reflects a carefully constructed balanced role for the Maintainers and the CPC in the governance of the OpenJS Foundation. The charter amendment process is for the Maintainers to propose changes using simple majority of the full Maintainers, the proposed changes being subject to review and approval by the CPC. The CPC may additionally make amendments to the project charter at any time, though the CPC will not interfere with day-to-day discussions, votes or meetings of the Maintainers.
|
||||
|
||||
### 2.1 Other Formal Project Relationships
|
||||
|
||||
Section Intentionally Left Blank
|
||||
|
||||
## Section 3: `nvm`'s Maintainers Governing Body
|
||||
|
||||
`nvm` is governed by its [maintainers](README.md#maintainers).
|
||||
|
||||
## Section 4: Roles & Responsibilities
|
||||
|
||||
The roles and responsibilities of `nvm`'s Maintainers are described in [GOVERNANCE.md](./GOVERNANCE.md).
|
||||
|
||||
### Section 4.1 Project Operations & Management
|
||||
|
||||
Section Intentionally Left Blank
|
||||
|
||||
### Section 4.2: Decision-making, Voting, and/or Elections
|
||||
|
||||
Section Intentionally Left Blank
|
||||
|
||||
### Section 4.3: Other Project Roles
|
||||
|
||||
Section Intentionally Left Blank
|
||||
|
||||
## Section 5: Definitions
|
||||
|
||||
- *Contributors*: contribute code or other artifacts, but do not have the right to commit to the codebase. Contributors work with the project’s maintainers to have code committed to the code base. A Contributor may be promoted to a Maintainer by the Maintainers. Contributors should rarely be encumbered by the Maintainers and never by the CPC or OpenJS Foundation Board.
|
||||
|
||||
- *Maintainers*: Contributors with any kind of decision-making authority in the project.
|
||||
|
||||
[openjs foundation]: https://openjsf.org
|
||||
30
install.sh
30
install.sh
@@ -33,7 +33,7 @@ nvm_install_dir() {
|
||||
}
|
||||
|
||||
nvm_latest_version() {
|
||||
nvm_echo "v0.40.2"
|
||||
nvm_echo "v0.39.2"
|
||||
}
|
||||
|
||||
nvm_profile_is_bash_or_zsh() {
|
||||
@@ -52,28 +52,12 @@ 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
|
||||
@@ -296,17 +280,17 @@ nvm_detect_profile() {
|
||||
DETECTED_PROFILE="$HOME/.bash_profile"
|
||||
fi
|
||||
elif [ "${SHELL#*zsh}" != "$SHELL" ]; then
|
||||
if [ -f "${ZDOTDIR:-${HOME}}/.zshrc" ]; then
|
||||
DETECTED_PROFILE="${ZDOTDIR:-${HOME}}/.zshrc"
|
||||
elif [ -f "${ZDOTDIR:-${HOME}}/.zprofile" ]; then
|
||||
DETECTED_PROFILE="${ZDOTDIR:-${HOME}}/.zprofile"
|
||||
if [ -f "$HOME/.zshrc" ]; then
|
||||
DETECTED_PROFILE="$HOME/.zshrc"
|
||||
elif [ -f "$HOME/.zprofile" ]; then
|
||||
DETECTED_PROFILE="$HOME/.zprofile"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$DETECTED_PROFILE" ]; then
|
||||
for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zprofile" ".zshrc"
|
||||
do
|
||||
if DETECTED_PROFILE="$(nvm_try_profile "${ZDOTDIR:-${HOME}}/${EACH_PROFILE}")"; then
|
||||
if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
@@ -358,7 +342,7 @@ nvm_check_global_modules() {
|
||||
command printf %s\\n "$NPM_GLOBAL_MODULES"
|
||||
nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your'
|
||||
# shellcheck disable=SC2016
|
||||
nvm_echo '=> `nvm` node installs), you can remove them from the system Node as follows:'
|
||||
nvm_echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
|
||||
nvm_echo
|
||||
nvm_echo ' $ nvm use system'
|
||||
nvm_echo ' $ npm uninstall -g a_module'
|
||||
|
||||
2
nvm-exec
2
nvm-exec
@@ -2,8 +2,6 @@
|
||||
|
||||
DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
unset NVM_CD_FLAGS
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
\. "$DIR/nvm.sh" --no-use
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nvm",
|
||||
"version": "0.40.2",
|
||||
"version": "0.39.2",
|
||||
"description": "Node Version Manager - Simple bash script to manage multiple active node.js versions",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
@@ -14,8 +14,6 @@
|
||||
"test/installation/node": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_node test-$shell",
|
||||
"test/installation/iojs": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_iojs test-$shell",
|
||||
"test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell",
|
||||
"test:check-exec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ ! -x \"$file\" ] && [[ \"$file\" != *.* ]] && [[ \"$file\" != test/fixtures/* ]]; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
|
||||
"test:check-nonexec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ -x \"$file\" ] && [ ! -d \"$file\" ] && { [[ \"$file\" =~ '\\.(json|txt|sh|js|log)$' ]] || [[ \"$file\" =~ '^test/(mocks|fixtures)/.*' ]]; }; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
|
||||
"doctoc": "doctoc --title='## Table of Contents' --github README.md",
|
||||
"predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc",
|
||||
"doctoc:check": "diff -q README.md v-README.md.orig",
|
||||
@@ -45,9 +43,9 @@
|
||||
"dockerfile_lint": "^0.3.4",
|
||||
"doctoc": "^2.2.1",
|
||||
"eclint": "^2.8.1",
|
||||
"markdown-link-check": "^3.13.7",
|
||||
"markdown-link-check": "^3.10.3",
|
||||
"replace": "^1.2.2",
|
||||
"semver": "^7.7.1",
|
||||
"semver": "^7.3.8",
|
||||
"urchin": "^0.0.5"
|
||||
}
|
||||
}
|
||||
|
||||
52
rename_test.sh
Executable file
52
rename_test.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
find_name(){
|
||||
find test -name "*[\\/:\*\?\"<>\|]*" -o -name "*."
|
||||
}
|
||||
|
||||
check_name() {
|
||||
if [ "$(find_name | wc -l)" != "0" ]; then
|
||||
printf '%s\n\n' "The following filenames contain unwanted characters:"
|
||||
find_name
|
||||
printf '\n%s\n%s\n' "Please run ./rename_test.sh" "If the problem persist, please open an issue."
|
||||
exit 1
|
||||
else
|
||||
echo "Ok"
|
||||
fi
|
||||
}
|
||||
|
||||
rename_test() {
|
||||
local filename
|
||||
local new_filename
|
||||
while read -r filename; do
|
||||
# Even though it looks < and > are replaced by the same < and >, the latters are not ASCII code
|
||||
# If you check with 'cat -v rename_test.sh' you would see 's/</M-KM-^B/g' and 's/>/M-KM-^C/g'
|
||||
# M-KM-^B -> U+02C2
|
||||
# M-KM-^C -> U+02C3
|
||||
new_filename=$(echo "$filename" | sed -r \
|
||||
-e "s/\"/'/g" \
|
||||
-e 's/</˂/g' \
|
||||
-e 's/>/˃/g' \
|
||||
-e 's/^(.*)\.$/\1/'
|
||||
)
|
||||
printf '%s\n%s\n\n' "$filename" "$new_filename"
|
||||
[ "$filename" != "$new_filename" ] && git mv "$filename" "$new_filename"
|
||||
done < <(find_name)
|
||||
|
||||
if [ "$(find_name | wc -l)" != "0" ]; then
|
||||
echo "Still some files to treat:"
|
||||
find_name
|
||||
else
|
||||
echo "Done"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
if [ "$1" = "--check" ]; then
|
||||
check_name
|
||||
else
|
||||
rename_test
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
144
test/common.sh
144
test/common.sh
@@ -101,147 +101,3 @@ watch() {
|
||||
kill %2;
|
||||
return $EXIT_CODE
|
||||
}
|
||||
|
||||
|
||||
# JSON parsing from https://gist.github.com/assaf/ee377a186371e2e269a7
|
||||
nvm_json_throw() {
|
||||
nvm_err "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
nvm_json_awk_egrep() {
|
||||
local pattern_string
|
||||
pattern_string="${1}"
|
||||
|
||||
awk '{
|
||||
while ($0) {
|
||||
start=match($0, pattern);
|
||||
token=substr($0, start, RLENGTH);
|
||||
print token;
|
||||
$0=substr($0, start+RLENGTH);
|
||||
}
|
||||
}' "pattern=${pattern_string}"
|
||||
}
|
||||
|
||||
nvm_json_tokenize() {
|
||||
local GREP
|
||||
GREP='grep -Eao'
|
||||
|
||||
local ESCAPE
|
||||
local CHAR
|
||||
|
||||
# if echo "test string" | grep -Eo "test" > /dev/null 2>&1; then
|
||||
# ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||
# CHAR='[^[:cntrl:]"\\]'
|
||||
# else
|
||||
GREP=nvm_json_awk_egrep
|
||||
ESCAPE='(\\\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
|
||||
CHAR='[^[:cntrl:]"\\\\]'
|
||||
# fi
|
||||
|
||||
local STRING
|
||||
STRING="\"${CHAR}*(${ESCAPE}${CHAR}*)*\""
|
||||
local NUMBER
|
||||
NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'
|
||||
local KEYWORD
|
||||
KEYWORD='null|false|true'
|
||||
local SPACE
|
||||
SPACE='[[:space:]]+'
|
||||
|
||||
$GREP "${STRING}|${NUMBER}|${KEYWORD}|${SPACE}|." | TERM=dumb grep -Ev "^${SPACE}$"
|
||||
}
|
||||
|
||||
_json_parse_array() {
|
||||
local index=0
|
||||
local ary=''
|
||||
read -r token
|
||||
case "$token" in
|
||||
']') ;;
|
||||
*)
|
||||
while :; do
|
||||
_json_parse_value "${1}" "${index}"
|
||||
index=$((index+1))
|
||||
ary="${ary}${value}"
|
||||
read -r token
|
||||
case "${token}" in
|
||||
']') break ;;
|
||||
',') ary="${ary}," ;;
|
||||
*) nvm_json_throw "EXPECTED , or ] GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
done
|
||||
;;
|
||||
esac
|
||||
:
|
||||
}
|
||||
|
||||
_json_parse_object() {
|
||||
local key
|
||||
local obj=''
|
||||
read -r token
|
||||
case "$token" in
|
||||
'}') ;;
|
||||
*)
|
||||
while :; do
|
||||
case "${token}" in
|
||||
'"'*'"') key="${token}" ;;
|
||||
*) nvm_json_throw "EXPECTED string GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
case "${token}" in
|
||||
':') ;;
|
||||
*) nvm_json_throw "EXPECTED : GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
_json_parse_value "${1}" "${key}"
|
||||
obj="${obj}${key}:${value}"
|
||||
read -r token
|
||||
case "${token}" in
|
||||
'}') break ;;
|
||||
',') obj="${obj}," ;;
|
||||
*) nvm_json_throw "EXPECTED , or } GOT ${token:-EOF}" ;;
|
||||
esac
|
||||
read -r token
|
||||
done
|
||||
;;
|
||||
esac
|
||||
:
|
||||
}
|
||||
|
||||
_json_parse_value() {
|
||||
local jpath="${1:+$1,}$2"
|
||||
local isleaf=0
|
||||
local isempty=0
|
||||
local print=0
|
||||
|
||||
case "$token" in
|
||||
'{') _json_parse_object "${jpath}" ;;
|
||||
'[') _json_parse_array "${jpath}" ;;
|
||||
# At this point, the only valid single-character tokens are digits.
|
||||
''|[!0-9]) nvm_json_throw "EXPECTED value GOT >${token:-EOF}<" ;;
|
||||
*)
|
||||
value=$token
|
||||
isleaf=1
|
||||
[ "${value}" = '""' ] && isempty=1
|
||||
;;
|
||||
esac
|
||||
|
||||
[ "${value}" = '' ] && return
|
||||
[ "${isleaf}" -eq 1 ] && [ $isempty -eq 0 ] && print=1
|
||||
[ "${print}" -eq 1 ] && printf "[%s]\t%s\n" "${jpath}" "${value}"
|
||||
:
|
||||
}
|
||||
|
||||
_json_parse() {
|
||||
read -r token
|
||||
_json_parse_value
|
||||
read -r token
|
||||
case "${token}" in
|
||||
'') ;;
|
||||
*) nvm_json_throw "EXPECTED EOF GOT >${token}<" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
nvm_json_extract() {
|
||||
nvm_json_tokenize | _json_parse | grep -e "${1}" | awk '{print $2 $3}'
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/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}"
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
OUTPUT="$(nvm alias foo#bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias foo#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(nvm alias foo# baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias ending with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias foo# baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias ending with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
|
||||
OUTPUT="$(nvm alias \#bar baz 2>&1)"
|
||||
EXPECTED_OUTPUT="Aliases with a comment delimiter (#) are not supported."
|
||||
[ "$OUTPUT" = "$EXPECTED_OUTPUT" ] || die "trying to create an alias starting with a hash should fail with '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||
|
||||
EXIT_CODE="$(nvm alias \#bar baz >/dev/null 2>&1 ; echo $?)"
|
||||
[ "$EXIT_CODE" = "1" ] || die "trying to create an alias starting with a hash should fail with code 1, got '$EXIT_CODE'"
|
||||
@@ -2,9 +2,7 @@
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||
|
||||
\. "${NVM_DIR}/nvm.sh"
|
||||
\. ../../../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"
|
||||
@@ -33,17 +31,3 @@ 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}"
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
|
||||
@@ -15,5 +15,3 @@ 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"
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#!/bin/zsh
|
||||
|
||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
set -ex
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
nvm alias test v0.1.2
|
||||
|
||||
@@ -4,8 +4,6 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
nvm deactivate 2>&1
|
||||
|
||||
@@ -4,8 +4,6 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@ cleanup () {
|
||||
rm -rf "${NVM_DIR}/v0.10.4"
|
||||
}
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
\. ../common.sh
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ set -ex
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
export NVM_DIR="$(cd ../.. && pwd)"
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
set +ex # needed for stderr
|
||||
|
||||
@@ -9,7 +9,7 @@ cleanup () { rm -f "${BEFORE}" "${AFTER}"; }
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${BEFORE}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | grep -v TRAVIS_ | sort >> "${BEFORE}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v NVM_ | sort >> "${BEFORE}"
|
||||
|
||||
set +e # TODO: fix
|
||||
\. ../../nvm.sh
|
||||
@@ -20,11 +20,11 @@ type nvm > /dev/null 2>&1 || die "nvm not loaded"
|
||||
nvm unload
|
||||
|
||||
typeset -f | awk '/ \(\) $/ && !/^main / {print $1}' > "${AFTER}"
|
||||
env | grep -v PATH= | grep -v IFS= | grep -v TRAVIS_ | sort >> "${AFTER}"
|
||||
env | grep -v PATH= | grep -v IFS= | sort >> "${AFTER}"
|
||||
|
||||
! type nvm > /dev/null 2>&1 || die "nvm not unloaded"
|
||||
|
||||
DIFF="$(diff "${BEFORE}" "${AFTER}" ||:)"
|
||||
[ -z "${DIFF}" ] || die "function pollution found: >${DIFF}<"
|
||||
[ -z "${DIFF}" ] || die "function pollution found: ${DIFF}"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION='v0.2.4'
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
cleanup() {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die() {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
if [ -n "${PATTERN}" ]; then
|
||||
cat "${REMOTE}" | \grep "${PATTERN}"
|
||||
else
|
||||
cat "${REMOTE}"
|
||||
fi
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
local PATTERN
|
||||
PATTERN="${1-}"
|
||||
if [ -n "${PATTERN}" ]; then
|
||||
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
|
||||
else
|
||||
cat "${REMOTE_IOJS}"
|
||||
fi
|
||||
}
|
||||
|
||||
make_fake_node "${TEST_VERSION}"
|
||||
|
||||
nvm install -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "${OUTPUT}" \
|
||||
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||
|
||||
nvm install --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "${OUTPUT}" \
|
||||
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
cleanup
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION='v0.2.4'
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
cleanup() {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die() {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
if [ -n "${PATTERN}" ]; then
|
||||
cat "${REMOTE}" | \grep "${PATTERN}"
|
||||
else
|
||||
cat "${REMOTE}"
|
||||
fi
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
local PATTERN
|
||||
PATTERN="${1-}"
|
||||
if [ -n "${PATTERN}" ]; then
|
||||
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
|
||||
else
|
||||
cat "${REMOTE_IOJS}"
|
||||
fi
|
||||
}
|
||||
|
||||
make_fake_node "${TEST_VERSION}"
|
||||
|
||||
nvm use -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "${OUTPUT}" \
|
||||
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||
|
||||
nvm use --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "${OUTPUT}" \
|
||||
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
|
||||
cleanup
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
if [ -f ../.nvmrc ]; then mv ../.nvmrc ../.nvmrc.orig; fi
|
||||
|
||||
del_nvmrc () {
|
||||
rm -f .nvmrc ../.nvmrc
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
del_nvmrc
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
if [ -f ../.nvmrc.orig ]; then mv ../.nvmrc.orig ../.nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
del_nvmrc
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
(cd ..
|
||||
nvm use --save "$TEST_VERSION" || die "\`nvm use --save $TEST_VERSION\` failed in the parent dir")
|
||||
nvm use --save || die "\`nvm use --save\` failed"
|
||||
|
||||
[ -f ../.nvmrc ] && [ -f .nvmrc ] || die "expected two .nvmrc files to be generated"
|
||||
|
||||
OUTPUT=$(cat .nvmrc)
|
||||
EXPECTED_OUTPUT="$(cat ../.nvmrc)"
|
||||
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
||||
|| die "invalid \`nvm use --save \` output: expected '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
||||
|
||||
cleanup
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf "${NVM_DIR}/${TEST_VERSION:?}" .nvmrc
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "${REMOTE}"
|
||||
}
|
||||
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "${REMOTE_IOJS}"
|
||||
}
|
||||
|
||||
make_fake_node "${TEST_VERSION}"
|
||||
|
||||
OUTPUT=$(nvm use --save --silent "${TEST_VERSION}" || die "\`nvm use --save --silent ${TEST_VERSION}\` failed")
|
||||
EXPECTED_OUTPUT=''
|
||||
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "\`nvm use --save --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
|
||||
|
||||
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||
|
||||
OUTPUT=$(nvm use -w --silent "${TEST_VERSION}" || die "\`nvm use -w --silent ${TEST_VERSION}\` failed")
|
||||
EXPECTED_OUTPUT=''
|
||||
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||
|| die "\`nvm use -w --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
|
||||
|
||||
cleanup
|
||||
@@ -1,6 +1,3 @@
|
||||
jod
|
||||
iron
|
||||
hydrogen
|
||||
gallium
|
||||
fermium
|
||||
erbium
|
||||
|
||||
@@ -1 +1 @@
|
||||
lts/jod
|
||||
lts/gallium
|
||||
|
||||
@@ -1,95 +1,4 @@
|
||||
version date files npm v8 uv zlib openssl modules lts security
|
||||
v23.1.0 2024-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 10.9.0 12.9.202.28 1.49.1 1.3.0.1-motley 3.0.15+quic 131 - -
|
||||
v23.0.0 2024-10-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 10.9.0 12.9.202.26 1.48.0 1.3.0.1-motley 3.0.15+quic 131 - -
|
||||
v22.11.0 2024-10-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-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.9.0 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.15+quic 127 Jod -
|
||||
v22.10.0 2024-10-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 10.9.0 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.15+quic 127 - -
|
||||
v22.9.0 2024-09-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.8.3 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.8.0 2024-09-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 10.8.2 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.7.0 2024-08-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-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.8.2 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.6.0 2024-08-06 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.8.2 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.5.1 2024-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 10.8.2 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.5.0 2024-07-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.8.2 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.4.1 2024-07-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 10.8.1 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - true
|
||||
v22.4.0 2024-07-02 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.8.1 12.4.254.21 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.3.0 2024-06-11 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.8.1 12.4.254.20 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.2.0 2024-05-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-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.7.0 12.4.254.14 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.1.0 2024-05-02 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.7.0 12.4.254.14 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v22.0.0 2024-04-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.5.1 12.4.254.14 1.48.0 1.3.0.1-motley 3.0.13+quic 127 - -
|
||||
v21.7.3 2024-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 10.5.0 11.8.172.17 1.48.0 1.3.0.1-motley 3.0.13+quic 120 - true
|
||||
v21.7.2 2024-04-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 10.5.0 11.8.172.17 1.48.0 1.3.0.1-motley 3.0.13+quic 120 - true
|
||||
v21.7.1 2024-03-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 10.5.0 11.8.172.17 1.48.0 1.3.0.1-motley 3.0.13+quic 120 - -
|
||||
v21.7.0 2024-03-06 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.5.0 11.8.172.17 1.48.0 1.3.0.1-motley 3.0.13+quic 120 - -
|
||||
v21.6.2 2024-02-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.2.4 11.8.172.17 1.48.0 1.3.0.1-motley 3.0.13+quic 120 - true
|
||||
v21.6.1 2024-01-22 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.4 11.8.172.17 1.47.0 1.3.0.1-motley 3.0.12+quic 120 - -
|
||||
v21.6.0 2024-01-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-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.4 11.8.172.17 1.47.0 1.3.0.1-motley 3.0.12+quic 120 - -
|
||||
v21.5.0 2023-12-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 10.2.4 11.8.172.17 1.47.0 1.3 3.0.12+quic 120 - -
|
||||
v21.4.0 2023-12-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-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.4 11.8.172.17 1.46.0 1.2.13.1-motley 3.0.12+quic 120 - -
|
||||
v21.3.0 2023-11-30 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.4 11.8.172.17 1.46.0 1.2.13.1-motley 3.0.12+quic 120 - -
|
||||
v21.2.0 2023-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-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.3 11.8.172.17 1.46.0 1.2.13.1-motley 3.0.12+quic 120 - -
|
||||
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.18.0 2024-10-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 10.8.2 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.17.0 2024-08-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-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.8.2 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.16.0 2024-07-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.8.1 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.15.1 2024-07-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 10.7.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron true
|
||||
v20.15.0 2024-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 10.7.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.14.0 2024-05-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.7.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.13.1 2024-05-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 10.5.2 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.13.0 2024-05-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 10.5.2 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.12.2 2024-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 10.5.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron true
|
||||
v20.12.1 2024-04-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 10.5.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron true
|
||||
v20.12.0 2024-03-26 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.5.0 11.3.244.8 1.46.0 1.3.0.1-motley 3.0.13+quic 115 Iron -
|
||||
v20.11.1 2024-02-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.2.4 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.13+quic 115 Iron true
|
||||
v20.11.0 2024-01-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 10.2.4 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.12+quic 115 Iron -
|
||||
v20.10.0 2023-11-22 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.3 11.3.244.8 1.46.0 1.2.13.1-motley 3.0.12+quic 115 Iron -
|
||||
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.20.4 2024-07-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 10.7.0 10.2.154.26 1.44.2 1.3.0.1-motley 3.0.13+quic 108 Hydrogen true
|
||||
v18.20.3 2024-05-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 10.7.0 10.2.154.26 1.44.2 1.3.0.1-motley 3.0.13+quic 108 Hydrogen -
|
||||
v18.20.2 2024-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-x64-7z,win-x64-exe,win-x64-msi,win-x64-zip,win-x86-7z,win-x86-exe,win-x86-msi,win-x86-zip 10.5.0 10.2.154.26 1.44.2 1.3.0.1-motley 3.0.13+quic 108 Hydrogen true
|
||||
v18.20.1 2024-04-02 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 10.5.0 10.2.154.26 1.44.2 1.3.0.1-motley 3.0.13+quic 108 Hydrogen true
|
||||
v18.20.0 2024-03-26 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 10.5.0 10.2.154.26 1.44.2 1.3.0.1-motley 3.0.13+quic 108 Hydrogen -
|
||||
v18.19.1 2024-02-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 10.2.4 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.13+quic 108 Hydrogen true
|
||||
v18.19.0 2023-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 10.2.3 10.2.154.26 1.44.2 1.2.13.1-motley 3.0.12+quic 108 Hydrogen -
|
||||
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
|
||||
@@ -118,12 +27,6 @@ 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 -
|
||||
@@ -173,10 +76,6 @@ 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 -
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -172,11 +172,7 @@
|
||||
v14.19.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.19.3 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.3 [1;32m (Latest LTS: Fermium)[0m
|
||||
v14.20.1 [1;32m (Latest LTS: Fermium)[0m
|
||||
v16.13.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.13.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.13.2 [0;37m (LTS: Gallium)[0m
|
||||
@@ -188,47 +184,4 @@
|
||||
v16.16.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.2 [1;32m (Latest LTS: Gallium)[0m
|
||||
v18.12.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.12.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.13.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.15.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.3 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.4 [1;32m (Latest LTS: Hydrogen)[0m
|
||||
v20.9.0 [0;37m (LTS: Iron)[0m
|
||||
v20.10.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.0 [0;37m (LTS: Iron)[0m
|
||||
v20.12.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.2 [0;37m (LTS: Iron)[0m
|
||||
v20.13.0 [0;37m (LTS: Iron)[0m
|
||||
v20.13.1 [0;37m (LTS: Iron)[0m
|
||||
v20.14.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.1 [0;37m (LTS: Iron)[0m
|
||||
v20.16.0 [0;37m (LTS: Iron)[0m
|
||||
v20.17.0 [0;37m (LTS: Iron)[0m
|
||||
v20.18.0 [1;32m (Latest LTS: Iron)[0m
|
||||
v22.11.0 [1;32m (Latest LTS: Jod)[0m
|
||||
v16.18.0 [1;32m (Latest LTS: Gallium)[0m
|
||||
|
||||
@@ -578,11 +578,7 @@
|
||||
v14.19.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.19.3 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.3 [1;32m (Latest LTS: Fermium)[0m
|
||||
v14.20.1 [1;32m (Latest LTS: Fermium)[0m
|
||||
v15.0.0
|
||||
v15.0.1
|
||||
v15.1.0
|
||||
@@ -631,13 +627,7 @@
|
||||
v16.16.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.2 [1;32m (Latest LTS: Gallium)[0m
|
||||
v16.18.0 [1;32m (Latest LTS: Gallium)[0m
|
||||
v17.0.0
|
||||
v17.0.1
|
||||
v17.1.0
|
||||
@@ -666,94 +656,3 @@
|
||||
v18.9.1
|
||||
v18.10.0
|
||||
v18.11.0
|
||||
v18.12.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.12.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.13.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.15.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.3 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.4 [1;32m (Latest LTS: Hydrogen)[0m
|
||||
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 [0;37m (LTS: Iron)[0m
|
||||
v20.10.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.0 [0;37m (LTS: Iron)[0m
|
||||
v20.12.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.2 [0;37m (LTS: Iron)[0m
|
||||
v20.13.0 [0;37m (LTS: Iron)[0m
|
||||
v20.13.1 [0;37m (LTS: Iron)[0m
|
||||
v20.14.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.1 [0;37m (LTS: Iron)[0m
|
||||
v20.16.0 [0;37m (LTS: Iron)[0m
|
||||
v20.17.0 [0;37m (LTS: Iron)[0m
|
||||
v20.18.0 [1;32m (Latest LTS: Iron)[0m
|
||||
v21.0.0
|
||||
v21.1.0
|
||||
v21.2.0
|
||||
v21.3.0
|
||||
v21.4.0
|
||||
v21.5.0
|
||||
v21.6.0
|
||||
v21.6.1
|
||||
v21.6.2
|
||||
v21.7.0
|
||||
v21.7.1
|
||||
v21.7.2
|
||||
v21.7.3
|
||||
v22.0.0
|
||||
v22.1.0
|
||||
v22.2.0
|
||||
v22.3.0
|
||||
v22.4.0
|
||||
v22.4.1
|
||||
v22.5.0
|
||||
v22.5.1
|
||||
v22.6.0
|
||||
v22.7.0
|
||||
v22.8.0
|
||||
v22.9.0
|
||||
v22.10.0
|
||||
v22.11.0 [1;32m (Latest LTS: Jod)[0m
|
||||
v23.0.0
|
||||
v23.1.0
|
||||
|
||||
@@ -619,11 +619,7 @@
|
||||
v14.19.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.19.3 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.20.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.0 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.1 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.2 [0;37m (LTS: Fermium)[0m
|
||||
v14.21.3 [1;32m (Latest LTS: Fermium)[0m
|
||||
v14.20.1 [1;32m (Latest LTS: Fermium)[0m
|
||||
v15.0.0
|
||||
v15.0.1
|
||||
v15.1.0
|
||||
@@ -672,13 +668,7 @@
|
||||
v16.16.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.17.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.18.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.19.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.0 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.1 [0;37m (LTS: Gallium)[0m
|
||||
v16.20.2 [1;32m (Latest LTS: Gallium)[0m
|
||||
v16.18.0 [1;32m (Latest LTS: Gallium)[0m
|
||||
v17.0.0
|
||||
v17.0.1
|
||||
v17.1.0
|
||||
@@ -707,94 +697,3 @@
|
||||
v18.9.1
|
||||
v18.10.0
|
||||
v18.11.0
|
||||
v18.12.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.12.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.13.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.14.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.15.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.16.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.17.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.18.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.19.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.0 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.1 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.2 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.3 [0;37m (LTS: Hydrogen)[0m
|
||||
v18.20.4 [1;32m (Latest LTS: Hydrogen)[0m
|
||||
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 [0;37m (LTS: Iron)[0m
|
||||
v20.10.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.0 [0;37m (LTS: Iron)[0m
|
||||
v20.11.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.0 [0;37m (LTS: Iron)[0m
|
||||
v20.12.1 [0;37m (LTS: Iron)[0m
|
||||
v20.12.2 [0;37m (LTS: Iron)[0m
|
||||
v20.13.0 [0;37m (LTS: Iron)[0m
|
||||
v20.13.1 [0;37m (LTS: Iron)[0m
|
||||
v20.14.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.0 [0;37m (LTS: Iron)[0m
|
||||
v20.15.1 [0;37m (LTS: Iron)[0m
|
||||
v20.16.0 [0;37m (LTS: Iron)[0m
|
||||
v20.17.0 [0;37m (LTS: Iron)[0m
|
||||
v20.18.0 [1;32m (Latest LTS: Iron)[0m
|
||||
v21.0.0
|
||||
v21.1.0
|
||||
v21.2.0
|
||||
v21.3.0
|
||||
v21.4.0
|
||||
v21.5.0
|
||||
v21.6.0
|
||||
v21.6.1
|
||||
v21.6.2
|
||||
v21.7.0
|
||||
v21.7.1
|
||||
v21.7.2
|
||||
v21.7.3
|
||||
v22.0.0
|
||||
v22.1.0
|
||||
v22.2.0
|
||||
v22.3.0
|
||||
v22.4.0
|
||||
v22.4.1
|
||||
v22.5.0
|
||||
v22.5.1
|
||||
v22.6.0
|
||||
v22.7.0
|
||||
v22.8.0
|
||||
v22.9.0
|
||||
v22.10.0
|
||||
v22.11.0 [1;32m (Latest LTS: Jod)[0m
|
||||
v23.0.0
|
||||
v23.1.0
|
||||
|
||||
@@ -1,7 +1,26 @@
|
||||
v6.9.6-nightly201702013f61aae59d Boron *
|
||||
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 *
|
||||
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-nightly201905019101d9368f Dubnium
|
||||
v10.16.2-nightly20190801f025f8524b 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
|
||||
v12.22.10-nightly2022012660c9d3bb95 Erbium *
|
||||
v20.11.0-nightly202312211a0be537da Iron *
|
||||
|
||||
@@ -172,11 +172,7 @@ v14.19.1 Fermium
|
||||
v14.19.2 Fermium
|
||||
v14.19.3 Fermium
|
||||
v14.20.0 Fermium
|
||||
v14.20.1 Fermium
|
||||
v14.21.0 Fermium
|
||||
v14.21.1 Fermium
|
||||
v14.21.2 Fermium
|
||||
v14.21.3 Fermium *
|
||||
v14.20.1 Fermium *
|
||||
v16.13.0 Gallium
|
||||
v16.13.1 Gallium
|
||||
v16.13.2 Gallium
|
||||
@@ -188,47 +184,4 @@ v16.15.1 Gallium
|
||||
v16.16.0 Gallium
|
||||
v16.17.0 Gallium
|
||||
v16.17.1 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
|
||||
v18.19.0 Hydrogen
|
||||
v18.19.1 Hydrogen
|
||||
v18.20.0 Hydrogen
|
||||
v18.20.1 Hydrogen
|
||||
v18.20.2 Hydrogen
|
||||
v18.20.3 Hydrogen
|
||||
v18.20.4 Hydrogen *
|
||||
v20.9.0 Iron
|
||||
v20.10.0 Iron
|
||||
v20.11.0 Iron
|
||||
v20.11.1 Iron
|
||||
v20.12.0 Iron
|
||||
v20.12.1 Iron
|
||||
v20.12.2 Iron
|
||||
v20.13.0 Iron
|
||||
v20.13.1 Iron
|
||||
v20.14.0 Iron
|
||||
v20.15.0 Iron
|
||||
v20.15.1 Iron
|
||||
v20.16.0 Iron
|
||||
v20.17.0 Iron
|
||||
v20.18.0 Iron *
|
||||
v22.11.0 Jod *
|
||||
v16.18.0 Gallium *
|
||||
|
||||
@@ -2,51 +2,148 @@ v0.10.41-nightly20151203036580393d
|
||||
v0.10.42-nightly20160128b125512a5c
|
||||
v0.12.10-nightly20160128a305339f66
|
||||
v4.0.0-nightly201509079cae65c510
|
||||
v5.7.1-nightly20160301c83725c604
|
||||
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.2-nightly2016030801c331ea37
|
||||
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
|
||||
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
|
||||
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
|
||||
v8.0.0-nightly201705010f58d3cbef
|
||||
v8.2.1-nightly2017080132b30d519e
|
||||
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.9.1-nightly20171104a815e1b6a2 Carbon *
|
||||
v9.0.0-nightly20171001f9be5fe52a
|
||||
v9.5.1-nightly2018020181da708f73
|
||||
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.7.1-nightly201803013f3995b7b7
|
||||
v9.7.2-nightly20180307cde6671b41
|
||||
v9.8.1-nightly20180320607b33cfcc
|
||||
v9.9.1-nightly201803256591d9f761
|
||||
v10.0.0-nightly20180401141be923f3
|
||||
v10.5.1-nightly20180701b28fd37a69
|
||||
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.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-nightly201905019101d9368f Dubnium
|
||||
v10.16.2-nightly20190801f025f8524b Dubnium *
|
||||
v11.0.0-nightly201810011be804d625
|
||||
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
|
||||
v11.1.0-nightly20181101af6d26281f
|
||||
v12.0.0-nightly2019040166b95362df
|
||||
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.22.10-nightly2022012660c9d3bb95 Erbium *
|
||||
v13.0.0-nightly2019100116e47b976b
|
||||
v13.2.1-nightly20191201cbd50262c0
|
||||
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.9.1-nightly202003041bca7b6c70
|
||||
v13.12.1-nightly20200401ffdd82ba3f
|
||||
v13.10.2-nightly202003117eed9d6bcc
|
||||
v13.11.1-nightly2020032628e298f219
|
||||
v13.12.1-nightly202004140a8e07599b
|
||||
v13.13.1-nightly20200415947ddec091
|
||||
v14.0.0-nightly20200421c3554307c6
|
||||
v15.0.0-nightly2020102011f1ad939f
|
||||
v16.0.0-nightly20210420a0261d231c
|
||||
v17.0.0-nightly2021100135dc3861cd
|
||||
v17.0.0-nightly202110193f11666dc7
|
||||
v17.5.0-nightly20220209e43808936a
|
||||
v18.0.0-nightly20220419bde889bd4e
|
||||
v19.0.0-nightly202210182672219b78
|
||||
v20.0.0-nightly2023041197d3912eb8
|
||||
v20.7.0-nightly202309173557c436181c526f41bb6ce7751e63f36695aa1d
|
||||
v20.11.0-nightly202312211a0be537da Iron *
|
||||
v21.0.0-nightly202310240fb512344f
|
||||
v22.0.0-nightly20240424ddd0a9e494
|
||||
v23.0.0-nightly20241016019efe1453
|
||||
v24.0.0-nightly20241031996708042b
|
||||
v19.0.0-nightly202210156fb466bc38
|
||||
|
||||
@@ -1 +1 @@
|
||||
v24.0.0-nightly20241031996708042b
|
||||
v19.0.0-nightly202210156fb466bc38
|
||||
|
||||
@@ -1 +1 @@
|
||||
v23.1.0
|
||||
v18.11.0
|
||||
|
||||
@@ -578,11 +578,7 @@ v14.19.1 Fermium
|
||||
v14.19.2 Fermium
|
||||
v14.19.3 Fermium
|
||||
v14.20.0 Fermium
|
||||
v14.20.1 Fermium
|
||||
v14.21.0 Fermium
|
||||
v14.21.1 Fermium
|
||||
v14.21.2 Fermium
|
||||
v14.21.3 Fermium *
|
||||
v14.20.1 Fermium *
|
||||
v15.0.0
|
||||
v15.0.1
|
||||
v15.1.0
|
||||
@@ -631,13 +627,7 @@ v16.15.1 Gallium
|
||||
v16.16.0 Gallium
|
||||
v16.17.0 Gallium
|
||||
v16.17.1 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 *
|
||||
v16.18.0 Gallium *
|
||||
v17.0.0
|
||||
v17.0.1
|
||||
v17.1.0
|
||||
@@ -666,94 +656,3 @@ 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
|
||||
v18.19.0 Hydrogen
|
||||
v18.19.1 Hydrogen
|
||||
v18.20.0 Hydrogen
|
||||
v18.20.1 Hydrogen
|
||||
v18.20.2 Hydrogen
|
||||
v18.20.3 Hydrogen
|
||||
v18.20.4 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
|
||||
v20.10.0 Iron
|
||||
v20.11.0 Iron
|
||||
v20.11.1 Iron
|
||||
v20.12.0 Iron
|
||||
v20.12.1 Iron
|
||||
v20.12.2 Iron
|
||||
v20.13.0 Iron
|
||||
v20.13.1 Iron
|
||||
v20.14.0 Iron
|
||||
v20.15.0 Iron
|
||||
v20.15.1 Iron
|
||||
v20.16.0 Iron
|
||||
v20.17.0 Iron
|
||||
v20.18.0 Iron *
|
||||
v21.0.0
|
||||
v21.1.0
|
||||
v21.2.0
|
||||
v21.3.0
|
||||
v21.4.0
|
||||
v21.5.0
|
||||
v21.6.0
|
||||
v21.6.1
|
||||
v21.6.2
|
||||
v21.7.0
|
||||
v21.7.1
|
||||
v21.7.2
|
||||
v21.7.3
|
||||
v22.0.0
|
||||
v22.1.0
|
||||
v22.2.0
|
||||
v22.3.0
|
||||
v22.4.0
|
||||
v22.4.1
|
||||
v22.5.0
|
||||
v22.5.1
|
||||
v22.6.0
|
||||
v22.7.0
|
||||
v22.8.0
|
||||
v22.9.0
|
||||
v22.10.0
|
||||
v22.11.0 Jod *
|
||||
v23.0.0
|
||||
v23.1.0
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
lts/*|lts/jod
|
||||
lts/jod|v22.11.0
|
||||
lts/iron|v20.18.0
|
||||
lts/hydrogen|v18.20.4
|
||||
lts/gallium|v16.20.2
|
||||
lts/fermium|v14.21.3
|
||||
lts/*|lts/gallium
|
||||
lts/gallium|v16.18.0
|
||||
lts/fermium|v14.20.1
|
||||
lts/erbium|v12.22.12
|
||||
lts/dubnium|v10.24.1
|
||||
lts/carbon|v8.17.0
|
||||
|
||||
@@ -1 +1 @@
|
||||
24.0
|
||||
19.0
|
||||
|
||||
@@ -1 +1 @@
|
||||
23.1
|
||||
18.11
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
nvm_install_source() {
|
||||
exit 42
|
||||
}
|
||||
|
||||
VERSION="0.7.0"
|
||||
|
||||
EXIT_CODE=$(nvm install -b "${VERSION}" ; echo $?)
|
||||
|
||||
[ $EXIT_CODE -eq 3 ] || die "Expected exit code 3, got ${EXIT_CODE}"
|
||||
|
||||
ACTUAL="$(nvm install -b "${VERSION}" 2>&1)"
|
||||
EXPECTED="Binary download is not available for v${VERSION}"
|
||||
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "Expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
@@ -1,35 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||
|
||||
nvm_download() {
|
||||
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
|
||||
cat "${REMOTE}"
|
||||
elif [ "$*" = "-L -s $(nvm_get_mirror iojs)/index.tab -o -" ]; then
|
||||
cat "${REMOTE_IOJS}"
|
||||
else
|
||||
nvm_err "unknown nvm_download call: $*"
|
||||
return 42
|
||||
fi
|
||||
}
|
||||
|
||||
nvm_install_binary() {
|
||||
return 42
|
||||
}
|
||||
nvm_install_source() {
|
||||
return 42
|
||||
}
|
||||
|
||||
ACTUAL="$(nvm install lts/ARGON 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
[ $EXIT_CODE -eq 3 ] || die "Expected exit code of 3, got ${EXIT_CODE}"
|
||||
|
||||
EXPECTED="LTS names must be lowercase
|
||||
Version with LTS filter 'ARGON' not found - try \`nvm ls-remote --lts=ARGON\` to browse available versions."
|
||||
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "Expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
@@ -1,44 +1,32 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f nvm_download nvm_ls_remote nvm_ls_remote_iojs
|
||||
if [ -n "${TEMP_NVM_COLORS-}" ]; then
|
||||
if [ -n TEMP_NVM_COLORS ]; then
|
||||
export NVM_COLORS=TEMP_NVM_COLORS
|
||||
fi
|
||||
unset TEMP_NVM_COLORS
|
||||
rm -rf "${NVM_DIR}/alias/lts"
|
||||
mv "${NVM_DIR}/alias/lts-backup" "${NVM_DIR}/alias/lts"
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
if [ -n "${NVM_COLORS-}" ]; then
|
||||
if [ -n ${NVM_COLORS} ]; then
|
||||
export TEMP_NVM_COLORS=NVM_COLORS
|
||||
unset NVM_COLORS
|
||||
fi
|
||||
|
||||
MOCKS_DIR="../Unit tests/mocks"
|
||||
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
|
||||
STAR="$(cat "${MOCKS_DIR}/lts-star.txt")"
|
||||
|
||||
mv "${NVM_DIR}/alias/lts" "${NVM_DIR}/alias/lts-backup" ||:
|
||||
mkdir -p "${NVM_DIR}/alias/lts"
|
||||
|
||||
echo "${STAR}" > "${NVM_DIR}/alias/lts/\*"
|
||||
printf '%s\n' "$(cat "${LTS_NAMES_PATH}" | tail -n +1)" | while IFS= read -r LTS; do
|
||||
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
||||
done
|
||||
|
||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
|
||||
nvm_download() {
|
||||
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
|
||||
cat "${MOCKS_DIR}/nodejs.org-dist-index.tab"
|
||||
cat "$MOCKS_DIR/nodejs.org-dist-index.tab"
|
||||
return
|
||||
fi
|
||||
return 42
|
||||
@@ -46,14 +34,16 @@ nvm_download() {
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote --lts did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||
OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
|
||||
MOCKS_DIR="$PWD/mocks"
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||
|
||||
INDEX=1
|
||||
@@ -66,26 +56,18 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
||||
INDEX=$(($INDEX + 1))
|
||||
done
|
||||
|
||||
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
|
||||
EXIT_CODE=$?
|
||||
[ $EXIT_CODE -eq 3 ] || die "nvm ls-remote lts/ARGON did not exit 3, got '${EXIT_CODE}'"
|
||||
|
||||
EXPECTED_OUTPUT="LTS names must be lowercase
|
||||
N/A"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/ARGON did not output expected error message; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "${REMOTE}"
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "${REMOTE_IOJS}"
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
|
||||
OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
|
||||
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "bare nvm ls-remote did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -5,26 +5,14 @@ die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
unset -f nvm_download
|
||||
rm -rf "${NVM_DIR}/alias/lts"
|
||||
mv "${NVM_DIR}/alias/lts-backup" "${NVM_DIR}/alias/lts"
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||
|
||||
mv "${NVM_DIR}/alias/lts" "${NVM_DIR}/alias/lts-backup" ||:
|
||||
mkdir -p "${NVM_DIR}/alias/lts"
|
||||
|
||||
for LTS in $LTS_LIST; do
|
||||
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
||||
done
|
||||
|
||||
set -ex
|
||||
|
||||
MOCKS_DIR="${PWD}/mocks"
|
||||
|
||||
# sample output at the time the test was written
|
||||
TAB_PATH="${MOCKS_DIR}/nodejs.org-dist-index.tab"
|
||||
nvm_download() {
|
||||
@@ -33,6 +21,8 @@ nvm_download() {
|
||||
|
||||
nvm_ls_remote >/dev/null || die "nvm_ls_remote_failed?!"
|
||||
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
|
||||
N=0
|
||||
while IFS= read -r LTS; do
|
||||
if [ $N -gt 0 ]; then
|
||||
|
||||
16
test/fast/Unit tests/nvm_download
Executable file → Normal file
16
test/fast/Unit tests/nvm_download
Executable file → Normal file
@@ -2,7 +2,6 @@
|
||||
|
||||
cleanup () {
|
||||
unset -f die cleanup
|
||||
docker stop httpbin && docker rm httpbin
|
||||
}
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
@@ -11,20 +10,9 @@ die () { echo "$@" ; cleanup ; exit 1; }
|
||||
set -ex
|
||||
|
||||
# nvm_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 "https://raw.githubusercontent.com/nvm-sh/nvm/master/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/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
|
||||
|
||||
# nvm_download should pass when calling with auth header
|
||||
docker pull kennethreitz/httpbin && SHELL=bash docker run -d --name httpbin -p 80:80 kennethreitz/httpbin
|
||||
sleep 1 # wait for httpbin to start
|
||||
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
|
||||
|
||||
# nvm_download should fail when calling without auth header
|
||||
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
|
||||
|
||||
# ensure quoted extra args remain quoted
|
||||
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted" || die 'command failed'
|
||||
! 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"
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/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}"
|
||||
|
||||
@@ -31,6 +31,3 @@ 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}"
|
||||
|
||||
@@ -21,6 +21,5 @@ 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
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
# Save the PATH as it was when the test started to restore it when it
|
||||
# finishes
|
||||
ORIG_PATH="${PATH}"
|
||||
ORIG_PATH=$PATH
|
||||
|
||||
cleanup() {
|
||||
# Restore the PATH as it was when the test started
|
||||
export PATH="${ORIG_PATH}"
|
||||
export PATH=ORIG_PATH
|
||||
}
|
||||
|
||||
die () { cleanup; echo "$@" ; exit 1; }
|
||||
@@ -15,23 +15,20 @@ die () { cleanup; echo "$@" ; exit 1; }
|
||||
|
||||
# Directory where mocked binaries used by nvm_get_arch for each OS/arch are
|
||||
# located
|
||||
MOCKS_DIR="$(pwd)/../../mocks"
|
||||
MOCKS_DIR=`pwd`/../../mocks
|
||||
# Sets the PATH for these tests to include the symlinks to the mocked
|
||||
# binaries
|
||||
export PATH=".:${PATH}"
|
||||
export PATH=.:${PATH}
|
||||
|
||||
# Setups mock binaries for a given OS and arch that mimic
|
||||
# the output of the real binaries used by nvm_get_arch to guess
|
||||
# the architecture of a given system.
|
||||
setup_mock_arch() {
|
||||
local OS
|
||||
OS=$1
|
||||
local ARCH
|
||||
ARCH=$2
|
||||
local OPT
|
||||
OPT=$3
|
||||
local OS=$1
|
||||
local ARCH=$2
|
||||
local OPT=$3
|
||||
|
||||
if [ "_${OS}" = '_solaris' ] || [ "_${OS}" = '_smartos' ]; then
|
||||
if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
|
||||
ln -sf "${MOCKS_DIR}/isainfo_${ARCH}" ./isainfo
|
||||
if [ "_$OPT" != "_no_pkg_info" ]; then
|
||||
ln -sf "${MOCKS_DIR}/pkg_info_${ARCH}" ./pkg_info
|
||||
@@ -45,12 +42,10 @@ setup_mock_arch() {
|
||||
|
||||
# Cleans up the setup done by setup_mock_arch.
|
||||
cleanup_mock_arch() {
|
||||
local OS
|
||||
OS=$1
|
||||
local ARCH
|
||||
ARCH=$2
|
||||
local OS=$1
|
||||
local ARCH=$2
|
||||
|
||||
if [ "_${OS}" = '_solaris' ] || [ "_${OS}" = '_smartos' ]; then
|
||||
if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
|
||||
rm -f ./isainfo
|
||||
rm -f ./pkg_info
|
||||
fi
|
||||
@@ -62,22 +57,17 @@ cleanup_mock_arch() {
|
||||
# expected output $EXPECTED_OUTPUT with the actual output. Does nothing
|
||||
# and exits cleanly if they match, dies otherwise.
|
||||
run_test() {
|
||||
local ARCH
|
||||
ARCH=$1
|
||||
local OS
|
||||
OS=$2
|
||||
local EXPECTED_OUTPUT
|
||||
EXPECTED_OUTPUT=$3
|
||||
local OPT
|
||||
OPT=$4
|
||||
local ARCH=$1
|
||||
local OS=$2
|
||||
local EXPECTED_OUTPUT=$3
|
||||
local OPT=$4
|
||||
|
||||
setup_mock_arch "${OS}" "${ARCH}" "${OPT}"
|
||||
local OUTPUT
|
||||
OUTPUT="$(nvm_get_arch)"
|
||||
cleanup_mock_arch "${OS}" "${ARCH}"
|
||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] ||
|
||||
die "nvm_get_arch for OS \"${OS}\" and arch \"${ARCH}\" with OPT \"${OPT}\" did
|
||||
not return \"${EXPECTED_OUTPUT}\"; got \"${OUTPUT}\""
|
||||
setup_mock_arch $OS $ARCH $OPT
|
||||
local OUTPUT="$(nvm_get_arch)"
|
||||
cleanup_mock_arch $OS $ARCH
|
||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] ||
|
||||
die "nvm_get_arch for OS \"$OS\" and arch \"$ARCH\" with OPT \"$OPT\" did
|
||||
not return \"$EXPECTED_OUTPUT\"; got \"$OUTPUT\""
|
||||
}
|
||||
|
||||
run_test x86 smartos x86
|
||||
@@ -90,6 +80,5 @@ run_test x86 osx x86
|
||||
run_test amd64 osx x64
|
||||
|
||||
run_test arm64 smartos x64
|
||||
run_test armv8l smartos x64
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
#!/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
|
||||
@@ -2,29 +2,27 @@
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
FILE="${NVM_DIR}/default-packages"
|
||||
FILE="$NVM_DIR/default-packages"
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
setup () {
|
||||
if [ -f "${FILE}" ]; then
|
||||
ORIG_DEFAULT_PACKAGES=$(cat "${FILE}")
|
||||
if [ -f $FILE ]; then
|
||||
ORIG_DEFAULT_PACKAGES=$(cat $FILE)
|
||||
mkdir -p ./tmp/ ||:
|
||||
mv "${FILE}" ./tmp/default-packages ||:
|
||||
mv $FILE ./tmp/default-packages ||:
|
||||
fi
|
||||
touch "${FILE}"
|
||||
touch $FILE
|
||||
}
|
||||
cleanup () {
|
||||
if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then
|
||||
if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
|
||||
rm -rf ./tmp/
|
||||
echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}"
|
||||
else
|
||||
rm "${FILE}"
|
||||
echo "$ORIG_DEFAULT_PACKAGES" > $FILE
|
||||
fi
|
||||
}
|
||||
|
||||
setup
|
||||
|
||||
cat > "${FILE}" << EOF
|
||||
cat > $FILE << EOF
|
||||
rimraf
|
||||
object-inspect@1.0.2
|
||||
|
||||
@@ -41,7 +39,7 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > "${FILE}" << EOF
|
||||
cat > $FILE << EOF
|
||||
rimraf
|
||||
not~a~package~name
|
||||
mkdirp
|
||||
@@ -55,12 +53,12 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > "${FILE}" << EOF
|
||||
cat > $FILE << EOF
|
||||
rimraf
|
||||
not~a~package~name
|
||||
mkdirp
|
||||
EOF
|
||||
printf %s "$(cat "${FILE}")" > "${FILE}" # strip trailing newline
|
||||
printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
|
||||
@@ -70,25 +68,25 @@ cleanup
|
||||
|
||||
setup
|
||||
|
||||
cat > "${FILE}" << EOF
|
||||
cat > $FILE << EOF
|
||||
object-inspect @ 1.0.2
|
||||
rimraf
|
||||
EOF
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
|
||||
EXPECTED_PKGS="Only one package per line is allowed in \`${FILE}\`. Please remove any lines with multiple space-separated values."
|
||||
EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values."
|
||||
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
||||
|
||||
cleanup
|
||||
|
||||
setup
|
||||
|
||||
rm -rf "${FILE}"
|
||||
rm -rf $FILE
|
||||
|
||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||
EXPECTED_PKGS=''
|
||||
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
||||
|
||||
touch "${FILE}"
|
||||
touch $FILE
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -23,25 +23,10 @@ set -e
|
||||
[ "$(nvm_get_mirror node std)" = "https://nodejs.org/dist" ] || die "incorrect default node-std mirror"
|
||||
[ "$(nvm_get_mirror iojs std)" = "https://iojs.org/dist" ] || die "incorrect default iojs-std mirror"
|
||||
|
||||
NVM_NODEJS_ORG_MIRROR="https://test-domain"
|
||||
[ "$(nvm_get_mirror node std)" = "https://test-domain" ] || die "node-std mirror should respect NVM_NODEJS_ORG_MIRROR"
|
||||
NVM_NODEJS_ORG_MIRROR="test://domain"
|
||||
[ "$(nvm_get_mirror node std)" = "test://domain" ] || die "node-std mirror should respect NVM_NODEJS_ORG_MIRROR"
|
||||
unset NVM_NODEJS_ORG_MIRROR
|
||||
|
||||
NVM_IOJS_ORG_MIRROR="https://test-domain"
|
||||
[ "$(nvm_get_mirror iojs std)" = "https://test-domain" ] || die "iojs-std mirror should respect NVM_IOJS_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
|
||||
|
||||
testMirrors() {
|
||||
NVM_NODEJS_ORG_MIRROR="${1-}"
|
||||
! nvm_get_mirror node std || die "NVM_NODEJS_ORG_MIRROR errors with command injection attempt (${1-})"
|
||||
[ "$(nvm_get_mirror node std)" = "" ] || die 'NVM_NODEJS_ORG_MIRROR is protected against command injection'
|
||||
|
||||
NVM_IOJS_ORG_MIRROR="${1-}"
|
||||
! nvm_get_mirror iojs std || die "NVM_IOJS_ORG_MIRROR errors with command injection attempt (${1-})"
|
||||
[ "$(nvm_get_mirror iojs std)" = "" ] || die 'NVM_IOJS_ORG_MIRROR is protected against command injection'
|
||||
}
|
||||
|
||||
testMirrors '`do something bad`'
|
||||
testMirrors 'https://nodejs.org/dist; xdg-open http://www.google.com;'
|
||||
testMirrors 'https://nodejs.org/dist&&xdg-open http://www.google.com;'
|
||||
testMirrors 'https://nodejs.org/dist|xdg-open http://www.google.com;'
|
||||
|
||||
55
test/fast/Unit tests/nvm_install_binary_extract
Executable file → Normal file
55
test/fast/Unit tests/nvm_install_binary_extract
Executable file → Normal file
@@ -1,43 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
cleanup() {
|
||||
[ -d "${tmp_dir}" ] && rm -rf "${tmp_dir}"
|
||||
[ -d "${NVM_DIR}" ] && rm -rf "${NVM_DIR}"
|
||||
cleanup () {
|
||||
[ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
|
||||
[ -d "$NVM_DIR" ] && rm -rf "$NVM_DIR"
|
||||
unset -f die cleanup test_archi nvm_supports_xz
|
||||
unset NVM_DIR tmp_dir version archi
|
||||
}
|
||||
|
||||
die() { echo "$@" ; cleanup ; exit 1; }
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
test_archi() {
|
||||
local os
|
||||
os="$1"
|
||||
local version
|
||||
version="$2"
|
||||
local archi
|
||||
archi="$os-$3"
|
||||
local node
|
||||
node="$4"
|
||||
local ext
|
||||
ext="$5"
|
||||
local command
|
||||
command="$6"
|
||||
local command_option
|
||||
command_option="$7"
|
||||
local node_dir
|
||||
node_dir="${tmp_dir}/node-${version}-${archi}"
|
||||
local node_path
|
||||
node_path="${node_dir}/${node}"
|
||||
test_archi(){
|
||||
local os="$1"
|
||||
local version="$2"
|
||||
local archi="$os-$3"
|
||||
local node="$4"
|
||||
local ext="$5"
|
||||
local command="$6"
|
||||
local command_option="$7"
|
||||
local node_path="$tmp_dir/node-$version-$archi/$node"
|
||||
|
||||
# Create tarball
|
||||
mkdir -p "$(dirname "${node_path}")"
|
||||
echo "node ${version}" > "${node_path}"
|
||||
(cd "${tmp_dir}" && "${command}" "${command_option}" "${node_dir}.${ext}" "node-${version}-${archi}")
|
||||
[ -f "${node_dir}.${ext}" ] || die "Unable to create fake ${ext} file"
|
||||
mkdir -p "$(dirname "$node_path")"
|
||||
echo "node $version" > "$node_path"
|
||||
(cd "$tmp_dir" && "$command" "$command_option" "$tmp_dir/node-$version-$archi.$ext" "node-$version-$archi" && rm -rf "$tmp_dir/node-$version-$archi")
|
||||
[ -f "$tmp_dir/node-$version-$archi.$ext" ] || die "Unable to create fake $ext file"
|
||||
|
||||
# Extract it
|
||||
nvm_install_binary_extract "$os" "$version" "$(expr "${version}" : '.\(.*\)')" "${node_dir}.$ext" "${tmp_dir}/files"
|
||||
[ "$(cat "${NVM_DIR}/versions/node/${version}/bin/node")" = "node ${version}" ] || die "Unable to extract ${ext} file"
|
||||
nvm_install_binary_extract "$os" "$version" "${version:1}" "$tmp_dir/node-$version-$archi.$ext" "$tmp_dir/files"
|
||||
[ "$(cat "$NVM_DIR/versions/node/$version/bin/node")" = "node $version" ] || die "Unable to extract $ext file"
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
@@ -49,18 +39,17 @@ type nvm_install_binary_extract > /dev/null 2>&1 || die 'nvm_install_binary_extr
|
||||
|
||||
NVM_DIR=$(mktemp -d)
|
||||
tmp_dir=$(mktemp -d)
|
||||
if [ -z "${NVM_DIR}" ] || [ -z "${tmp_dir}" ]; then
|
||||
if [ -z "$NVM_DIR" ] || [ -z "$tmp_dir" ]; then
|
||||
die 'Unable to create temporary folder'
|
||||
fi
|
||||
|
||||
# Test windows zip
|
||||
# TODO: enable this
|
||||
# test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
||||
test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
||||
|
||||
# Test linux tar.xz
|
||||
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
|
||||
|
||||
nvm_supports_xz() {
|
||||
nvm_supports_xz(){
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
58
test/fast/Unit tests/nvm_install_no_progress_bar
Executable file → Normal file
58
test/fast/Unit tests/nvm_install_no_progress_bar
Executable file → Normal file
@@ -6,16 +6,18 @@ cleanup () {
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
nvm unalias default || true
|
||||
nvm unalias default
|
||||
}
|
||||
|
||||
die () { >&2 echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
nvm_has_colors() { return 1 ; }
|
||||
|
||||
cleanup
|
||||
|
||||
OUTPUT="$(TERM=dumb 2>&1 nvm install --no-progress v0.12.18)"
|
||||
OUTPUT="$(2>&1 nvm install --no-progress v0.12.18)"
|
||||
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
||||
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
||||
Computing checksum with sha256sum
|
||||
@@ -23,63 +25,19 @@ Checksums matched!
|
||||
Now using node v0.12.18 (npm v2.15.11)
|
||||
Creating default alias: default -> v0.12.18 *"
|
||||
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "1: expected >
|
||||
${EXPECTED_OUTPUT}<, got >
|
||||
${OUTPUT}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
|
||||
OUTPUT="$(TERM=dumb 2>&1 nvm install v0.12.18)"
|
||||
OUTPUT="$(2>&1 nvm install v0.12.18)"
|
||||
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
||||
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
||||
######################################################################### 100.0%
|
||||
######################################################################## 100.0%
|
||||
Computing checksum with sha256sum
|
||||
Checksums matched!
|
||||
Now using node v0.12.18 (npm v2.15.11)
|
||||
Creating default alias: default -> v0.12.18 *"
|
||||
|
||||
[ "$(echo "${OUTPUT}" | wc -l)" = "$(echo "${EXPECTED_OUTPUT}" | wc -l)" ] || die "2: expected 7 lines, got $(echo "${OUTPUT}" | wc -l)"
|
||||
|
||||
# Preprocess function to handle carriage returns and extract final output
|
||||
preprocess_output() {
|
||||
echo "$1" | awk '
|
||||
{
|
||||
# For each line in the input
|
||||
while (index($0, "\r") > 0) {
|
||||
# If a carriage return is found, process it
|
||||
pos = index($0, "\r")
|
||||
before_cr = substr($0, 1, pos - 1)
|
||||
after_cr = substr($0, pos + 1)
|
||||
# Overwrite the line up to the carriage return with content after it
|
||||
$0 = after_cr
|
||||
}
|
||||
print $0
|
||||
}' | sed '/^$/d' # Remove any empty lines
|
||||
}
|
||||
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || {
|
||||
echo "$OUTPUT" \
|
||||
| while IFS= read -r output_line && IFS= read -r expected_line <&3; do
|
||||
line_number=$((line_number + 1))
|
||||
|
||||
# Strip non-visible characters from both lines
|
||||
clean_output=$(preprocess_output "$output_line")
|
||||
|
||||
if [ "${output_line}" != "${expected_line}" ] && ! echo "${clean_output}" | \grep -qE '^#+ 100\.0%$'; then
|
||||
echo "Difference on line ${line_number}:"
|
||||
echo "Output: ${output_line}"
|
||||
echo "Expected: ${expected_line}"
|
||||
echo "Byte-by-byte comparison:"
|
||||
echo "Output: $(echo "${clean_output}" | od -An -tx1 | tr -d '\n')"
|
||||
echo "Expected: $(echo "${expected_line}" | od -An -tx1 | tr -d '\n')"
|
||||
|
||||
die "4: expected >
|
||||
${EXPECTED_OUTPUT}<, got >
|
||||
${OUTPUT}<"
|
||||
fi
|
||||
done 3<<EOF
|
||||
$EXPECTED_OUTPUT
|
||||
EOF
|
||||
}
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
|
||||
cleanup
|
||||
|
||||
0
test/fast/Unit tests/nvm_is_version_installed
Executable file → Normal file
0
test/fast/Unit tests/nvm_is_version_installed
Executable file → Normal 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 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"
|
||||
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"
|
||||
|
||||
# Sanity checks
|
||||
OUTPUT="$(nvm_print_implicit_alias remote stable)"
|
||||
|
||||
@@ -2,44 +2,29 @@
|
||||
|
||||
cleanup() {
|
||||
unset nvm_get_os
|
||||
rm -rf "${NVM_DIR}/alias/lts"
|
||||
mv "${NVM_DIR}/alias/lts-backup" "${NVM_DIR}/alias/lts"
|
||||
}
|
||||
|
||||
die () { cleanup; echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
MOCKS_DIR="../Unit tests/mocks"
|
||||
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
|
||||
STAR="$(cat "${MOCKS_DIR}/lts-star.txt")"
|
||||
|
||||
mv "${NVM_DIR}/alias/lts" "${NVM_DIR}/alias/lts-backup" ||:
|
||||
mkdir -p "${NVM_DIR}/alias/lts"
|
||||
|
||||
echo "${STAR}" > "${NVM_DIR}/alias/lts/\*"
|
||||
printf '%s\n' "$(cat "${LTS_NAMES_PATH}" | tail -n +1)" | while IFS= read -r LTS; do
|
||||
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
||||
done
|
||||
|
||||
ACTUAL="$(nvm_normalize_lts "foo")"
|
||||
EXPECTED='foo'
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "foo: expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
|
||||
ACTUAL="$(nvm_normalize_lts "lts/*")"
|
||||
EXPECTED='lts/*'
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "*: expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
|
||||
if ACTUAL="$(nvm_normalize_lts lts/ARGON)"; then
|
||||
die "ARGON: expected failure, got >${ACTUAL}<"
|
||||
fi
|
||||
|
||||
MOCKS_DIR="../Unit tests/mocks"
|
||||
STAR="$(cat "$MOCKS_DIR/lts-star.txt")"
|
||||
|
||||
ACTUAL="$(nvm_normalize_lts "${STAR}")"
|
||||
EXPECTED="${STAR}"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "${STAR}: expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<"
|
||||
|
||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||
|
||||
INDEX=1
|
||||
@@ -51,4 +36,3 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
||||
|
||||
INDEX=$(($INDEX + 1))
|
||||
done
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () { echo "$@" ; cleanup ; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
echo 'cleaned up'
|
||||
}
|
||||
|
||||
\. ../../../nvm.sh
|
||||
|
||||
\. ../../common.sh
|
||||
|
||||
for f in ../../../test/fixtures/nvmrc/test/fixtures/valid/*; do
|
||||
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||
|
||||
EXPECTED="$(nvm_json_extract node < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${EXIT_CODE}" = "0" ] || die "$(basename "${f}"): expected exit code of 0 but got ${EXIT_CODE}"
|
||||
|
||||
[ "${STDOUT}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDOUT of \`${EXPECTED}\` but got \`${STDOUT}\`"
|
||||
done
|
||||
|
||||
for f in ../../../test/fixtures/nvmrc/test/fixtures/invalid/*; do
|
||||
STDOUT="$(nvm_process_nvmrc $f/.nvmrc 2>/dev/null)"
|
||||
STDERR="$(nvm_process_nvmrc $f/.nvmrc 2>&1 >/dev/null | awk '{if(NR > 8) print $0}' | strip_colors)"
|
||||
EXIT_CODE="$(nvm_process_nvmrc $f/.nvmrc >/dev/null 2>/dev/null; echo $?)"
|
||||
|
||||
EXPECTED="$(nvm_json_extract < "${f}/expected.json" | tr -d '"')"
|
||||
|
||||
[ "${EXIT_CODE}" != "0" ] || die "$(basename "${f}"): expected exit code of 'not 0' but got ${EXIT_CODE}"
|
||||
|
||||
[ "${STDERR}" = "${EXPECTED}" ] || die "$(basename "${f}"): expected STDERR of \`${EXPECTED}\` but got \`${STDERR}\`"
|
||||
done
|
||||
@@ -16,9 +16,3 @@ 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 "
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
#!/bin/sh
|
||||
\. ../../../nvm.sh
|
||||
\. ../../common.sh
|
||||
|
||||
set -e
|
||||
|
||||
TEST_VERSION="v0.2.4"
|
||||
|
||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||
|
||||
del_nvmrc () {
|
||||
rm -f .nvmrc
|
||||
}
|
||||
|
||||
del_alias () {
|
||||
nvm unalias test >/dev/null 2>&1
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
del_nvmrc
|
||||
del_alias
|
||||
nvm cache clear
|
||||
nvm deactivate
|
||||
nvm unalias default
|
||||
rm -rf ${NVM_DIR}/v*
|
||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$@"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
|
||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
||||
nvm_ls_remote() {
|
||||
cat "$REMOTE"
|
||||
}
|
||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||
nvm_ls_remote_iojs() {
|
||||
cat "$REMOTE_IOJS"
|
||||
}
|
||||
|
||||
make_fake_node "$TEST_VERSION"
|
||||
|
||||
test_version () {
|
||||
del_nvmrc
|
||||
VERSION_STRING=${1-}
|
||||
make_fake_node "$VERSION_STRING"
|
||||
|
||||
nvm_write_nvmrc $VERSION_STRING || die "\`nvm_write_nvmrc ${VERSION_STRING}\` failed"
|
||||
OUTPUT="$(cat .nvmrc)"
|
||||
|
||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
||||
|| die "\`nvm install --save ${VERSION_STRING}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||
}
|
||||
|
||||
# 1.
|
||||
|
||||
test_version "$TEST_VERSION" || die
|
||||
|
||||
# 2. with an alias
|
||||
del_alias
|
||||
nvm alias test "$TEST_VERSION"
|
||||
test_version test || die
|
||||
|
||||
# 3. fails with invalid permissions
|
||||
del_nvmrc
|
||||
touch .nvmrc
|
||||
chmod 0 .nvmrc
|
||||
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail with invalid permissions"
|
||||
del_nvmrc
|
||||
|
||||
# 4. respects NVM_SILENT=1
|
||||
export NVM_SILENT=1
|
||||
[ "$(nvm_write_nvmrc $TEST_VERSION)" = "" ] || die "\`nvm_write_nvmrc $TEST_VERSION\` was not silenced by NVM_SILENT=1"
|
||||
unset NVM_SILENT
|
||||
|
||||
# 5. fails with an invalid version number
|
||||
TEST_VERSION="not_a_node_version"
|
||||
nvm_write_nvmrc $TEST_VERSION 2>/dev/null && die "\`nvm_write_nvmrc $TEST_VERSION\` did not fail"
|
||||
|
||||
#
|
||||
|
||||
cleanup
|
||||
0
test/fast/nvm should remove the last trailing slash in $NVM_DIR
Executable file → Normal file
0
test/fast/nvm should remove the last trailing slash in $NVM_DIR
Executable file → Normal file
1
test/fixtures/nvmrc
vendored
1
test/fixtures/nvmrc
vendored
Submodule test/fixtures/nvmrc deleted from 0d325aa903
@@ -27,22 +27,20 @@ setup () {
|
||||
mkdir -p "$npm_config_prefix/lib"
|
||||
}
|
||||
|
||||
|
||||
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; got:\n${message}"
|
||||
[ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed"
|
||||
|
||||
if [ -n "${ORIGINAL_NVM_DIR}" ] && [ -z "${GITHUB_ACTIONS}" ]; then
|
||||
# Admit we're using NVM, just for this one test
|
||||
# TODO: fix this for GHA
|
||||
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
|
||||
# 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"
|
||||
|
||||
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; got:\n${message}"
|
||||
[ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed"
|
||||
|
||||
# Faking an installation of npm
|
||||
mkdir -p "$npm_config_prefix/lib/node_modules/npm"
|
||||
@@ -51,7 +49,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; got:\n${message}"
|
||||
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module"
|
||||
|
||||
# Faking the absence of npm
|
||||
PATH=".:$PATH"
|
||||
@@ -59,7 +57,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; got:\n${message}"
|
||||
[ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable"
|
||||
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -3,16 +3,12 @@
|
||||
setup () {
|
||||
HOME="."
|
||||
NVM_ENV=testing \. ../../install.sh
|
||||
ZDOTDIR="$HOME/zdotdir"
|
||||
mkdir -p zdotdir
|
||||
touch ".bashrc"
|
||||
touch ".bash_profile"
|
||||
touch ".zprofile"
|
||||
touch ".zshrc"
|
||||
touch ".profile"
|
||||
touch "test_profile"
|
||||
touch "zdotdir/.zshrc"
|
||||
touch "zdotdir/.zprofile"
|
||||
}
|
||||
|
||||
cleanup () {
|
||||
@@ -21,9 +17,7 @@ cleanup () {
|
||||
unset NVM_DETECT_PROFILE
|
||||
unset SHELL
|
||||
unset -f setup cleanup die
|
||||
unset ZDOTDIR
|
||||
rm -f ".bashrc" ".bash_profile" ".zprofile" ".zshrc" ".profile" "test_profile" > "/dev/null" 2>&1
|
||||
rm -rf zdotdir 2>&1
|
||||
}
|
||||
|
||||
die () { echo "$@" '$NVM_DETECT_PROFILE:' "$NVM_DETECT_PROFILE"; cleanup; exit 1; }
|
||||
@@ -35,54 +29,49 @@ setup
|
||||
#
|
||||
|
||||
# setting $PROFILE to /dev/null should return no detected profile
|
||||
NVM_DETECT_PROFILE="$(PROFILE='/dev/null' nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(PROFILE='/dev/null'; nvm_detect_profile)"
|
||||
if [ -n "$NVM_DETECT_PROFILE" ]; then
|
||||
die "nvm_detect_profile still detected a profile even though PROFILE=/dev/null"
|
||||
fi
|
||||
|
||||
# .bashrc should be detected for bash
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/bash" PROFILE= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/bash"; unset PROFILE; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then
|
||||
die "nvm_detect_profile didn't pick \$HOME/.bashrc for bash"
|
||||
fi
|
||||
|
||||
# $PROFILE should override .bashrc profile detection
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/bash" PROFILE="test_profile" nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/bash"; PROFILE="test_profile"; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
|
||||
die "nvm_detect_profile ignored \$PROFILE"
|
||||
fi
|
||||
|
||||
# zdotdir/.zshrc should be detected for zsh
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/zsh" PROFILE= nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$ZDOTDIR/.zshrc" ]; then
|
||||
die "nvm_detect_profile didn't pick \$ZDOTDIR/.zshrc for zsh"
|
||||
fi
|
||||
|
||||
# .zshrc should be detected for zsh
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/zsh" PROFILE= ZDOTDIR= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(SHELL="/bin/zsh"; unset PROFILE; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then
|
||||
die "nvm_detect_profile didn't pick \$HOME/.zshrc for zsh"
|
||||
fi
|
||||
|
||||
# $PROFILE should override .zshrc profile detection
|
||||
NVM_DETECT_PROFILE="$(SHELL="/usr/bin/zsh" PROFILE="test_profile" nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(SHELL="/usr/bin/zsh"; PROFILE="test_profile"; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
|
||||
die "nvm_detect_profile ignored \$PROFILE"
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Confirm $PROFILE is only returned when it points to a valid file
|
||||
#
|
||||
|
||||
# $PROFILE is a valid file
|
||||
NVM_DETECT_PROFILE="$(PROFILE="test_profile" SHELL= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(PROFILE="test_profile"; unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then
|
||||
die "nvm_detect_profile didn't pick \$PROFILE when it was a valid file"
|
||||
fi
|
||||
|
||||
# $PROFILE is not a valid file
|
||||
rm "test_profile"
|
||||
NVM_DETECT_PROFILE="$(PROFILE="test_profile" nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(PROFILE="test_profile"; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" = "test_profile" ]; then
|
||||
die "nvm_detect_profile picked \$PROFILE when it was an invalid file"
|
||||
fi
|
||||
@@ -94,58 +83,44 @@ fi
|
||||
#
|
||||
|
||||
# It should favor .profile if file exists
|
||||
NVM_DETECT_PROFILE="$(SHELL= ZDOTDIR= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.profile" ]; then
|
||||
die "nvm_detect_profile should have selected .profile; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have selected .profile"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor .bashrc if file exists
|
||||
rm ".profile"
|
||||
NVM_DETECT_PROFILE="$(SHELL= ZDOTDIR= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then
|
||||
die "nvm_detect_profile should have selected .bashrc; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have selected .bashrc"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor .bash_profile if file exists
|
||||
rm ".bashrc"
|
||||
NVM_DETECT_PROFILE="$(SHELL= ZDOTDIR= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.bash_profile" ]; then
|
||||
die "nvm_detect_profile should have selected .bash_profile; got $NVM_DETECT_PROFILE"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor zdotdir/.zprofile if file exists
|
||||
rm ".bash_profile"
|
||||
NVM_DETECT_PROFILE="$(SHELL= nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$ZDOTDIR/.zprofile" ]; then
|
||||
die "nvm_detect_profile should have selected zdotdir/.zprofile; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have selected .bash_profile"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor .zprofile if file exists
|
||||
rm "zdotdir/.zprofile"
|
||||
NVM_DETECT_PROFILE="$(SHELL= ZDOTDIR= nvm_detect_profile)"
|
||||
rm ".bash_profile"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.zprofile" ]; then
|
||||
die "nvm_detect_profile should have selected .zprofile; got $NVM_DETECT_PROFILE"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor zdotdir/.zshrc if file exists
|
||||
rm ".zprofile"
|
||||
NVM_DETECT_PROFILE="$(SHELL= nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$ZDOTDIR/.zshrc" ]; then
|
||||
die "nvm_detect_profile should have selected zdotdir/.zshrc; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have selected .zprofile"
|
||||
fi
|
||||
|
||||
# Otherwise, it should favor .zshrc if file exists
|
||||
rm "zdotdir/.zshrc"
|
||||
NVM_DETECT_PROFILE="$(SHELL= ZDOTDIR= nvm_detect_profile)"
|
||||
rm ".zprofile"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then
|
||||
die "nvm_detect_profile should have selected .zshrc; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have selected .zshrc"
|
||||
fi
|
||||
|
||||
# It should be empty if none is found
|
||||
rm ".zshrc"
|
||||
NVM_DETECT_PROFILE="$(SHELL= nvm_detect_profile)"
|
||||
NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)"
|
||||
if [ ! -z "$NVM_DETECT_PROFILE" ]; then
|
||||
die "nvm_detect_profile should have returned an empty value; got $NVM_DETECT_PROFILE"
|
||||
die "nvm_detect_profile should have returned an empty value"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -6,13 +6,3 @@ 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}>"
|
||||
|
||||
6
test/install_script/nvm_download
Executable file → Normal file
6
test/install_script/nvm_download
Executable file → Normal file
@@ -8,11 +8,11 @@ die () { echo "$@" ; cleanup ; exit 1; }
|
||||
NVM_ENV=testing \. ../../install.sh
|
||||
|
||||
# nvm_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 "https://raw.githubusercontent.com/nvm-sh/nvm/master/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/HEAD/wrong_install.sh" &>/dev/null; then
|
||||
die "nvm_download should fail to download nonexistent file"
|
||||
if nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/master/wrong_install.sh" &>/dev/null; then
|
||||
die "nvm_download should fail to download no existing file"
|
||||
fi
|
||||
|
||||
cleanup
|
||||
|
||||
@@ -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
|
||||
export NVM_SOURCE="my_location"
|
||||
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")
|
||||
|
||||
@@ -9,20 +9,20 @@ die () { echo "$@" ; exit 1; }
|
||||
nvm unalias default >/dev/null 2>&1 || die 'unable to unalias default'
|
||||
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm install --lts 0.12 2>&1)"
|
||||
EXIT_CODE="$?"
|
||||
OUTPUT="$(nvm install --lts 3 2>&1)"
|
||||
set -ex
|
||||
EXPECTED_OUTPUT="Version '0.12' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
|
||||
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 0.12\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
EXIT_CODE="$(nvm install --lts 3 >/dev/null 2>&1 && echo $? || echo $?)"
|
||||
EXPECTED_OUTPUT="Version '3' (with LTS filter) not found - try \`nvm ls-remote --lts\` to browse available versions."
|
||||
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts 3\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
set +ex # needed for stderr
|
||||
OUTPUT="$(nvm install --lts=argon 0.12 2>&1)"
|
||||
EXIT_CODE="$?"
|
||||
set -x
|
||||
EXPECTED_OUTPUT="Version '0.12' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions."
|
||||
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 0.12\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 0.12\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
OUTPUT="$(nvm install --lts=argon 3 2>&1)"
|
||||
set -ex
|
||||
EXIT_CODE="$(nvm install --lts=argon 3 >/dev/null 2>&1 && echo $? || echo $?)"
|
||||
EXPECTED_OUTPUT="Version '3' (with LTS filter 'argon') not found - try \`nvm ls-remote --lts=argon\` to browse available versions."
|
||||
[ "${EXIT_CODE}" = 3 ] || die "\`nvm install --lts=argon 3\` did not exit with 3, got >${EXIT_CODE}<"
|
||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "\`nvm install --lts=argon 3\` output >${OUTPUT}<, expected >${EXPECTED_OUTPUT}<"
|
||||
|
||||
nvm install --lts 4.2.2 || die 'nvm install --lts 4.2.2 failed'
|
||||
|
||||
|
||||
34
test/installation_node/install from binary with binary flag set
Executable file → Normal file
34
test/installation_node/install from binary with binary flag set
Executable file → Normal file
@@ -1,10 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
die () {
|
||||
unset -f nvm_install_binary nvm_install_source
|
||||
echo "$@"
|
||||
exit 1
|
||||
}
|
||||
die () { echo "$@" ; exit 1; }
|
||||
|
||||
\. ../../nvm.sh
|
||||
|
||||
@@ -26,28 +22,16 @@ nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $N
|
||||
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
|
||||
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
|
||||
|
||||
nvm_install_binary() {
|
||||
>&2 echo 'binary failed'
|
||||
return 1
|
||||
}
|
||||
|
||||
# binary fails, falls back to source, but if -b is set, fails
|
||||
# Falls back to source but if -b is set fails binary download.
|
||||
OUTPUT="$(nvm install -b 9.0.0 2>&1)"
|
||||
EXPECTED_OUTPUT='binary failed'
|
||||
if [ "${OUTPUT#*"${EXPECTED_OUTPUT}"}" = "${OUTPUT}" ]; then
|
||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
|
||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||
fi
|
||||
|
||||
nvm_install_source() {
|
||||
>&2 echo 'source intentionally failed'
|
||||
return 1
|
||||
}
|
||||
|
||||
# binary fails, falls back to source if -b is not set
|
||||
# Falls back to source but if -b is not set.
|
||||
OUTPUT="$(nvm install 9.0.0 2>&1)"
|
||||
EXPECTED_OUTPUT="binary failed
|
||||
Detected that you have 2 CPU core(s)
|
||||
Number of CPU core(s) less than or equal to 2, running in single-threaded mode
|
||||
source intentionally failed"
|
||||
|
||||
[ "${EXPECTED_OUTPUT}" = "${OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
|
||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||
fi
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user