mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-02-04 17:02:48 +08:00
Compare commits
29 Commits
v0.40.3
...
4c3edc5e56
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c3edc5e56 | ||
|
|
35212c1346 | ||
|
|
d2f93c1c8e | ||
|
|
f9dbad9832 | ||
|
|
c451e7a4c8 | ||
|
|
9ba422e561 | ||
|
|
38ffc713a7 | ||
|
|
aa1d829102 | ||
|
|
ec8906b284 | ||
|
|
0509776196 | ||
|
|
01a8749d7f | ||
|
|
0fbe3a6776 | ||
|
|
a36448ffcd | ||
|
|
4d364c2e7b | ||
|
|
81f13638d7 | ||
|
|
26066c10f4 | ||
|
|
34d6d5d6fe | ||
|
|
80cc4cdd1b | ||
|
|
630a01f2e0 | ||
|
|
b7b7e949aa | ||
|
|
e4e34ec7f9 | ||
|
|
7c82abdbef | ||
|
|
44a3cdb9b8 | ||
|
|
34ace599a2 | ||
|
|
18e638e42b | ||
|
|
9602f4f959 | ||
|
|
c3d674f8f9 | ||
|
|
0215ef8203 | ||
|
|
1aab8b2d5a |
117
.github/INCIDENT_RESPONSE_PLAN.md
vendored
Normal file
117
.github/INCIDENT_RESPONSE_PLAN.md
vendored
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
# Incident Response Process for **nvm**
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
We take the security of **nvm** very seriously. If you believe you’ve found a security vulnerability, please inform us responsibly through coordinated disclosure.
|
||||||
|
|
||||||
|
### How to Report
|
||||||
|
|
||||||
|
> **Do not** report security vulnerabilities through public GitHub issues, discussions, or social media.
|
||||||
|
|
||||||
|
Instead, please use one of these secure channels:
|
||||||
|
|
||||||
|
1. **GitHub Security Advisories**
|
||||||
|
Use the **Report a vulnerability** button in the Security tab of the [nvm-sh/nvm repository](https://github.com/nvm-sh/nvm).
|
||||||
|
|
||||||
|
2. **Email**
|
||||||
|
Follow the posted [Security Policy](https://github.com/nvm-sh/nvm/security/policy).
|
||||||
|
|
||||||
|
### What to Include
|
||||||
|
|
||||||
|
**Required Information:**
|
||||||
|
- Brief description of the vulnerability type
|
||||||
|
- Affected version(s) and components
|
||||||
|
- Steps to reproduce the issue
|
||||||
|
- Impact assessment (what an attacker could achieve)
|
||||||
|
|
||||||
|
**Helpful Additional Details:**
|
||||||
|
- Full paths of affected scripts or files
|
||||||
|
- Specific commit or branch where the issue exists
|
||||||
|
- Required configuration to reproduce
|
||||||
|
- Proof-of-concept code (if available)
|
||||||
|
- Suggested mitigation or fix
|
||||||
|
|
||||||
|
## Our Response Process
|
||||||
|
|
||||||
|
**Timeline Commitments:**
|
||||||
|
- **Initial acknowledgment**: Within 24 hours
|
||||||
|
- **Detailed response**: Within 3 business days
|
||||||
|
- **Status updates**: Every 7 days until resolved
|
||||||
|
- **Resolution target**: 90 days for most issues
|
||||||
|
|
||||||
|
**What We’ll Do:**
|
||||||
|
1. Acknowledge your report and assign a tracking ID
|
||||||
|
2. Assess the vulnerability and determine severity
|
||||||
|
3. Develop and test a fix
|
||||||
|
4. Coordinate disclosure timeline with you
|
||||||
|
5. Release a security update and publish an advisory and CVE
|
||||||
|
6. Credit you in our security advisory (if desired)
|
||||||
|
|
||||||
|
## Disclosure Policy
|
||||||
|
|
||||||
|
- **Coordinated disclosure**: We’ll work with you on timing
|
||||||
|
- **Typical timeline**: 90 days from report to public disclosure
|
||||||
|
- **Early disclosure**: If actively exploited
|
||||||
|
- **Delayed disclosure**: For complex issues
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
**In Scope:**
|
||||||
|
- **nvm** project (all supported versions)
|
||||||
|
- Installation and update scripts (`install.sh`, `nvm.sh`)
|
||||||
|
- Official documentation and CI/CD integrations
|
||||||
|
- Dependencies with direct security implications
|
||||||
|
|
||||||
|
**Out of Scope:**
|
||||||
|
- Third-party forks or mirrors
|
||||||
|
- Platform-specific installs outside core scripts
|
||||||
|
- Social engineering or physical attacks
|
||||||
|
- Theoretical vulnerabilities without practical exploitation
|
||||||
|
|
||||||
|
## Security Measures
|
||||||
|
|
||||||
|
**Our Commitments:**
|
||||||
|
- Regular vulnerability scanning via GitHub Actions
|
||||||
|
- Automated security checks in CI/CD pipelines
|
||||||
|
- Secure scripting practices and mandatory code review
|
||||||
|
- Prompt patch releases for critical issues
|
||||||
|
|
||||||
|
**User Responsibilities:**
|
||||||
|
- Keep **nvm** updated
|
||||||
|
- Verify script downloads via PGP signatures
|
||||||
|
- Follow secure configuration guidelines for shell environments
|
||||||
|
|
||||||
|
## Legal Safe Harbor
|
||||||
|
|
||||||
|
**We will NOT:**
|
||||||
|
- Initiate legal action
|
||||||
|
- Contact law enforcement
|
||||||
|
- Suspend or terminate your access
|
||||||
|
|
||||||
|
**You must:**
|
||||||
|
- Only test against your own installations
|
||||||
|
- Not access, modify, or delete user data
|
||||||
|
- Not degrade service availability
|
||||||
|
- Not publicly disclose before coordinated disclosure
|
||||||
|
- Act in good faith
|
||||||
|
|
||||||
|
## Recognition
|
||||||
|
|
||||||
|
- **Advisory Credits**: Credit in GitHub Security Advisories (unless anonymous)
|
||||||
|
|
||||||
|
## Security Updates
|
||||||
|
|
||||||
|
**Stay Informed:**
|
||||||
|
- Subscribe to GitHub releases for **nvm**
|
||||||
|
- Enable GitHub Security Advisory notifications
|
||||||
|
|
||||||
|
**Update Process:**
|
||||||
|
- Patch releases (e.g., v0.40.3 → v0.40.4)
|
||||||
|
- Out-of-band releases for critical issues
|
||||||
|
- Advisories via GitHub Security Advisories
|
||||||
|
|
||||||
|
## Contact Information
|
||||||
|
|
||||||
|
- **Security reports**: Security tab of [nvm-sh/nvm](https://github.com/nvm-sh/nvm/security)
|
||||||
|
- **General inquiries**: GitHub Discussions or Issues
|
||||||
|
|
||||||
24
.github/SECURITY.md
vendored
24
.github/SECURITY.md
vendored
@@ -1,6 +1,13 @@
|
|||||||
# Security
|
# Security
|
||||||
|
|
||||||
Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
|
Please file a private vulnerability report via GitHub, email [@ljharb](https://github.com/ljharb), or see https://tidelift.com/security if you have a potential security vulnerability to report.
|
||||||
|
|
||||||
|
## Escalation
|
||||||
|
|
||||||
|
If you do not receive an acknowledgement of your report within 6 business days, or if you cannot find a private security contact for the project, you may escalate to the OpenJS Foundation CNA at `security@lists.openjsf.org`.
|
||||||
|
|
||||||
|
If the project acknowledges your report but does not provide any further response or engagement within 14 days, escalation is also appropriate.
|
||||||
|
|
||||||
|
|
||||||
## OpenSSF CII Best Practices
|
## OpenSSF CII Best Practices
|
||||||
|
|
||||||
@@ -12,16 +19,17 @@ There are three “tiers”: passing, silver, and gold.
|
|||||||
We meet 100% of the “passing” criteria.
|
We meet 100% of the “passing” criteria.
|
||||||
|
|
||||||
### Silver
|
### Silver
|
||||||
We meet 95% of the “silver” criteria. The gaps are as follows:
|
We meet 100% of the “silver” criteria.
|
||||||
- we do not have a DCO or a CLA process for contributions.
|
|
||||||
- because we only have one maintainer, the project has no way to continue if that maintainer stops being active.
|
|
||||||
- we do not currently document “what the user can and cannot expect in terms of security” for our project. This is planned to be completed in 2023.
|
|
||||||
|
|
||||||
### Gold
|
### Gold
|
||||||
We meet 65% of the “gold” criteria. The gaps are as follows:
|
We meet 78% of the “gold” criteria. The gaps are as follows:
|
||||||
- we do not yet have the “silver” badge; see all the gaps above.
|
- because we only have one maintainer, the project has no way to continue if that maintainer stops being active.
|
||||||
- We do not include a copyright or license statement in each source file. Efforts are underway to change this archaic practice into a suggestion instead of a hard requirement.
|
- We do not include a copyright or license statement in each source file. Efforts are underway to change this archaic practice into a suggestion instead of a hard requirement.
|
||||||
|
|
||||||
## Threat Model
|
## Threat Model
|
||||||
|
|
||||||
See [THREAT_MODEL.md](./THREAT_MODEL.md).
|
See [THREAT_MODEL.md](.github/THREAT_MODEL.md).
|
||||||
|
|
||||||
|
## Incident Response Plan
|
||||||
|
|
||||||
|
Please see our [Incident Response Plan](.github/INCIDENT_RESPONSE_PLAN.md).
|
||||||
|
|||||||
427
.github/copilot-instructions.md
vendored
Normal file
427
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,427 @@
|
|||||||
|
# nvm Copilot Instructions
|
||||||
|
|
||||||
|
This document provides guidance for GitHub Copilot when working with the Node Version Manager (nvm) codebase.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
nvm is a version manager for Node.js, implemented as a POSIX-compliant function that works across multiple shells (sh, dash, bash, ksh, zsh). The codebase is primarily written in shell script and emphasizes portability and compatibility.
|
||||||
|
|
||||||
|
### Core Architecture
|
||||||
|
|
||||||
|
- **Main script**: `nvm.sh` - Contains all core functionality and the main `nvm()` function
|
||||||
|
- **Installation script**: `install.sh` - Handles downloading and installing nvm itself
|
||||||
|
- **Execution wrapper**: `nvm-exec` - Allows running commands with specific Node.js versions
|
||||||
|
- **Bash completion**: `bash_completion` - Provides tab completion for bash users
|
||||||
|
- **Tests**: Comprehensive test suite in `test/` directory using the [urchin](https://www.npmjs.com/package/urchin) test framework
|
||||||
|
|
||||||
|
## Key Files and Their Purposes
|
||||||
|
|
||||||
|
### `nvm.sh`
|
||||||
|
The core functionality file containing:
|
||||||
|
- Main `nvm()` function (starts around line 3000)
|
||||||
|
- All internal helper functions (prefixed with `nvm_`)
|
||||||
|
- Command implementations for install, use, ls, etc.
|
||||||
|
- Shell compatibility logic
|
||||||
|
- POSIX compliance utilities
|
||||||
|
|
||||||
|
### `install.sh`
|
||||||
|
Handles nvm installation via curl/wget/git:
|
||||||
|
- Downloads nvm from GitHub
|
||||||
|
- Sets up directory structure
|
||||||
|
- Configures shell integration
|
||||||
|
- Supports both git clone and script download methods
|
||||||
|
|
||||||
|
### `nvm-exec`
|
||||||
|
Simple wrapper script that:
|
||||||
|
- Sources nvm.sh with `--no-use` flag
|
||||||
|
- Switches to specified Node version via `NODE_VERSION` env var or `.nvmrc`
|
||||||
|
- Executes the provided command with that Node version
|
||||||
|
|
||||||
|
## Top-Level nvm Commands and Internal Functions
|
||||||
|
|
||||||
|
### Core Commands
|
||||||
|
|
||||||
|
#### `nvm install [version]`
|
||||||
|
- **Internal functions**: `nvm_install_binary()`, `nvm_install_source()`, `nvm_download_artifact()`
|
||||||
|
- Downloads and installs specified Node.js version
|
||||||
|
- Automatically `nvm use`s that version after installation
|
||||||
|
- Supports LTS versions, version ranges, and built-in aliases (like `node`, `stable`) and user-defined aliases
|
||||||
|
- Can install from binary or compile from source
|
||||||
|
- When compiling from source, accepts additional arguments that are passed to the compilation task
|
||||||
|
|
||||||
|
#### `nvm use [version]`
|
||||||
|
- **Internal functions**: `nvm_resolve_alias()`, `nvm_version_path()`, `nvm_change_path()`
|
||||||
|
- Switches current shell to use specified Node.js version
|
||||||
|
- Updates PATH environment variable
|
||||||
|
- Supports `.nvmrc` file integration
|
||||||
|
|
||||||
|
#### `nvm ls [pattern]`
|
||||||
|
- **Internal functions**: `nvm_ls()`, `nvm_tree_contains_path()`
|
||||||
|
- Lists installed Node.js versions
|
||||||
|
- Supports pattern matching and filtering
|
||||||
|
- Shows current version and aliases
|
||||||
|
|
||||||
|
#### `nvm ls-remote [pattern]`
|
||||||
|
- **Internal functions**: `nvm_ls_remote()`, `nvm_download()`, `nvm_ls_remote_index_tab()`
|
||||||
|
- Lists available Node.js versions from nodejs.org and iojs.org, or the env-var-configured mirrors
|
||||||
|
- Supports LTS filtering and pattern matching
|
||||||
|
- Downloads version index on-demand
|
||||||
|
|
||||||
|
#### `nvm alias [name] [version]`
|
||||||
|
- **Internal functions**: `nvm_alias()`, `nvm_alias_path()`
|
||||||
|
- Creates text files containing the mapped version, named as the alias name
|
||||||
|
- Special aliases: `default`, `node`, `iojs`, `stable`, `unstable` (note: `stable` and `unstable` are deprecated, from node's pre-v1 release plan)
|
||||||
|
- Stored in `$NVM_DIR/alias/` directory
|
||||||
|
|
||||||
|
#### `nvm current`
|
||||||
|
- **Internal functions**: `nvm_ls_current()`
|
||||||
|
- Shows currently active Node.js version
|
||||||
|
- Returns "system" if using system Node.js
|
||||||
|
|
||||||
|
#### `nvm which [version]`
|
||||||
|
- **Internal functions**: `nvm_version_path()`, `nvm_resolve_alias()`
|
||||||
|
- Shows path to specified Node.js version
|
||||||
|
- Resolves aliases and version strings
|
||||||
|
|
||||||
|
### Utility Commands
|
||||||
|
|
||||||
|
#### `nvm cache clear|dir`
|
||||||
|
- Cache management for downloaded binaries and source code
|
||||||
|
- Clears or shows cache directory path
|
||||||
|
|
||||||
|
#### `nvm debug`
|
||||||
|
- Diagnostic information for troubleshooting
|
||||||
|
- Shows environment, tool versions, and paths
|
||||||
|
|
||||||
|
#### `nvm deactivate`
|
||||||
|
- Removes nvm modifications from current shell
|
||||||
|
- Restores original PATH
|
||||||
|
|
||||||
|
#### `nvm unload`
|
||||||
|
- Completely removes nvm from shell environment
|
||||||
|
- Unsets all nvm functions and variables
|
||||||
|
|
||||||
|
### Internal Function Categories
|
||||||
|
|
||||||
|
#### Version Resolution
|
||||||
|
- `nvm_resolve_alias()` - Resolves aliases to version numbers
|
||||||
|
- `nvm_version()` - Finds best matching local version
|
||||||
|
- `nvm_remote_version()` - Finds best matching remote version
|
||||||
|
- `nvm_normalize_version()` - Standardizes version strings
|
||||||
|
- `nvm_version_greater()` - Compares version numbers
|
||||||
|
- `nvm_version_greater_than_or_equal_to()` - Version comparison with equality
|
||||||
|
- `nvm_get_latest()` - Gets latest version from a list
|
||||||
|
|
||||||
|
#### Installation Helpers
|
||||||
|
- `nvm_install_binary()` - Downloads and installs precompiled binaries
|
||||||
|
- `nvm_install_source()` - Compiles Node.js from source
|
||||||
|
- `nvm_download_artifact()` - Downloads tarballs or binaries
|
||||||
|
- `nvm_compute_checksum()` - Verifies download integrity
|
||||||
|
- `nvm_checksum()` - Checksum verification wrapper
|
||||||
|
- `nvm_get_mirror()` - Gets appropriate download mirror
|
||||||
|
- `nvm_get_arch()` - Determines system architecture
|
||||||
|
|
||||||
|
#### Path Management
|
||||||
|
- `nvm_change_path()` - Updates PATH for version switching
|
||||||
|
- `nvm_strip_path()` - Removes nvm paths from PATH
|
||||||
|
- `nvm_version_path()` - Gets installation path for version
|
||||||
|
- `nvm_version_dir()` - Gets version directory name
|
||||||
|
- `nvm_prepend_path()` - Safely prepends to PATH
|
||||||
|
|
||||||
|
#### Shell Detection and Compatibility
|
||||||
|
- `nvm_is_zsh()` - Shell detection for zsh
|
||||||
|
- `nvm_is_iojs_version()` - Checks if version is io.js
|
||||||
|
- `nvm_get_os()` - Operating system detection
|
||||||
|
- `nvm_supports_source_options()` - Checks if shell supports source options
|
||||||
|
|
||||||
|
#### Network and Remote Operations
|
||||||
|
- `nvm_download()` - Generic download function
|
||||||
|
- `nvm_ls_remote()` - Lists remote versions
|
||||||
|
- `nvm_ls_remote_iojs()` - Lists remote io.js versions
|
||||||
|
- `nvm_ls_remote_index_tab()` - Parses remote version index
|
||||||
|
|
||||||
|
#### Utility Functions
|
||||||
|
- `nvm_echo()`, `nvm_err()` - Output functions
|
||||||
|
- `nvm_has()` - Checks if command exists
|
||||||
|
- `nvm_sanitize_path()` - Cleans sensitive data from paths
|
||||||
|
- `nvm_die_on_prefix()` - Validates npm prefix settings
|
||||||
|
- `nvm_ensure_default_set()` - Ensures default alias is set
|
||||||
|
- `nvm_auto()` - Automatic version switching from .nvmrc
|
||||||
|
|
||||||
|
#### Alias Management
|
||||||
|
- `nvm_alias()` - Creates or lists aliases
|
||||||
|
- `nvm_alias_path()` - Gets path to alias file
|
||||||
|
- `nvm_unalias()` - Removes aliases
|
||||||
|
- `nvm_resolve_local_alias()` - Resolves local aliases
|
||||||
|
|
||||||
|
#### Listing and Display
|
||||||
|
- `nvm_ls()` - Lists local versions
|
||||||
|
- `nvm_ls_current()` - Shows current version
|
||||||
|
- `nvm_tree_contains_path()` - Checks if path is in nvm tree
|
||||||
|
- `nvm_format_version()` - Formats version display
|
||||||
|
|
||||||
|
## Running Tests
|
||||||
|
|
||||||
|
### Test Framework
|
||||||
|
nvm uses the [urchin](https://www.npmjs.com/package/urchin) test framework for shell script testing.
|
||||||
|
|
||||||
|
### Test Structure
|
||||||
|
```
|
||||||
|
test/
|
||||||
|
├── fast/ # Quick unit tests
|
||||||
|
├── slow/ # Integration tests
|
||||||
|
├── sourcing/ # Shell sourcing tests
|
||||||
|
├── install_script/ # Installation script tests
|
||||||
|
├── installation_node/ # Node installation tests
|
||||||
|
├── installation_iojs/ # io.js installation tests
|
||||||
|
└── common.sh # Shared test utilities
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
#### Install Dependencies
|
||||||
|
```bash
|
||||||
|
npm install # Installs urchin, semver, and replace tools
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Run All Tests
|
||||||
|
```bash
|
||||||
|
npm test # Runs tests in current shell (sh, bash, dash, zsh, ksh)
|
||||||
|
make test # Runs tests in all supported shells (sh, bash, dash, zsh, ksh)
|
||||||
|
make test-sh # Runs tests only in sh
|
||||||
|
make test-bash # Runs tests only in bash
|
||||||
|
make test-dash # Runs tests only in dash
|
||||||
|
make test-zsh # Runs tests only in zsh
|
||||||
|
make test-ksh # Runs tests only in ksh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Run Specific Test Suites
|
||||||
|
```bash
|
||||||
|
make TEST_SUITE=fast test # Only fast tests
|
||||||
|
make TEST_SUITE=slow test # Only slow tests
|
||||||
|
make SHELLS=bash test # Only bash shell
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Individual Test Execution
|
||||||
|
```bash
|
||||||
|
./test/fast/Unit\ tests/nvm_get_arch # Run single test (WARNING: This will exit/terminate your current shell session)
|
||||||
|
./node_modules/.bin/urchin test/fast/ # Run fast test suite
|
||||||
|
./node_modules/.bin/urchin 'test/fast/Unit tests/nvm_get_arch' # Run single test safely without shell termination
|
||||||
|
./node_modules/.bin/urchin test/slow/ # Run slow test suite
|
||||||
|
./node_modules/.bin/urchin test/sourcing/ # Run sourcing test suite
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test Writing Guidelines
|
||||||
|
- Tests should work across all supported shells (sh, bash, dash, zsh, ksh)
|
||||||
|
- Define and use a `die()` function for test failures
|
||||||
|
- Clean up after tests in cleanup functions
|
||||||
|
- Mock external dependencies when needed
|
||||||
|
- Place mocks in `test/mocks/` directory
|
||||||
|
- Mock files should only be updated by the existing `update_test_mocks.sh` script, and any new mocks must be added to this script
|
||||||
|
|
||||||
|
## Shell Environment Setup
|
||||||
|
|
||||||
|
### Supported Shells
|
||||||
|
- **bash** - Full feature support
|
||||||
|
- **zsh** - Full feature support
|
||||||
|
- **dash** - Basic POSIX support
|
||||||
|
- **sh** - Basic POSIX support
|
||||||
|
- **ksh** - Limited support (experimental)
|
||||||
|
|
||||||
|
### Installing Shell Environments
|
||||||
|
|
||||||
|
#### Ubuntu/Debian
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install bash zsh dash ksh
|
||||||
|
# sh is typically provided by dash or bash and is available by default
|
||||||
|
```
|
||||||
|
|
||||||
|
#### macOS
|
||||||
|
```bash
|
||||||
|
# bash and zsh are available by default, bash is not the default shell for new user accounts
|
||||||
|
# Install other shells via Homebrew
|
||||||
|
brew install dash ksh
|
||||||
|
# For actual POSIX sh (not bash), install mksh which provides a true POSIX sh
|
||||||
|
brew install mksh
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Manual Shell Testing
|
||||||
|
```bash
|
||||||
|
# Test in specific shell
|
||||||
|
bash -c "source nvm.sh && nvm --version"
|
||||||
|
zsh -c "source nvm.sh && nvm --version"
|
||||||
|
dash -c ". nvm.sh && nvm --version"
|
||||||
|
sh -c ". nvm.sh && nvm --version" # On macOS: mksh -c ". nvm.sh && nvm --version"
|
||||||
|
ksh -c ". nvm.sh && nvm --version"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shell-Specific Considerations
|
||||||
|
- **zsh**: Requires basically any non-default zsh option to be temporarily unset to restore POSIX compliance
|
||||||
|
- **dash**: Limited feature set, avoid bash-specific syntax
|
||||||
|
- **ksh**: Some features may not work, primarily for compatibility testing
|
||||||
|
|
||||||
|
## CI Environment Details
|
||||||
|
|
||||||
|
### GitHub Actions Workflows
|
||||||
|
|
||||||
|
#### `.github/workflows/tests.yml`
|
||||||
|
- Runs test suite across multiple shells and test suites
|
||||||
|
- Uses `script` command for proper TTY simulation
|
||||||
|
- Matrix strategy covers shell × test suite combinations
|
||||||
|
- Excludes install_script tests from non-bash shells
|
||||||
|
|
||||||
|
#### `.github/workflows/shellcheck.yml`
|
||||||
|
- Lints all shell scripts using shellcheck
|
||||||
|
- Tests against multiple shell targets (bash, sh, dash, ksh)
|
||||||
|
- Note: zsh is not included due to [shellcheck limitations](https://github.com/koalaman/shellcheck/issues/809)
|
||||||
|
- Uses Homebrew to install latest shellcheck version
|
||||||
|
|
||||||
|
#### `.github/workflows/lint.yml`
|
||||||
|
- Runs additional linting and formatting checks
|
||||||
|
- Validates documentation and code style
|
||||||
|
|
||||||
|
### Travis CI (Legacy)
|
||||||
|
- Configured in `.travis.yml`
|
||||||
|
- Tests on multiple Ubuntu versions
|
||||||
|
- Installs shell environments via apt packages
|
||||||
|
|
||||||
|
### CI Test Execution
|
||||||
|
```bash
|
||||||
|
# Simulate CI environment locally
|
||||||
|
unset TRAVIS_BUILD_DIR # Disable Travis-specific logic
|
||||||
|
unset GITHUB_ACTIONS # Disable GitHub Actions logic
|
||||||
|
make test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setting Up shellcheck Locally
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
#### macOS (Homebrew)
|
||||||
|
```bash
|
||||||
|
brew install shellcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Ubuntu/Debian
|
||||||
|
```bash
|
||||||
|
sudo apt-get install shellcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
#### From Source
|
||||||
|
```bash
|
||||||
|
# Download from https://github.com/koalaman/shellcheck/releases
|
||||||
|
wget https://github.com/koalaman/shellcheck/releases/download/latest/shellcheck-latest.linux.x86_64.tar.xz
|
||||||
|
tar -xf shellcheck-latest.linux.x86_64.tar.xz
|
||||||
|
sudo cp shellcheck-latest/shellcheck /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
#### Lint Main Files
|
||||||
|
```bash
|
||||||
|
shellcheck -s bash nvm.sh
|
||||||
|
shellcheck -s bash install.sh
|
||||||
|
shellcheck -s bash nvm-exec
|
||||||
|
shellcheck -s bash bash_completion
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Lint Across Shell Types
|
||||||
|
```bash
|
||||||
|
shellcheck -s sh nvm.sh # POSIX sh
|
||||||
|
shellcheck -s bash nvm.sh # Bash extensions
|
||||||
|
shellcheck -s dash nvm.sh # Dash compatibility
|
||||||
|
shellcheck -s ksh nvm.sh # Ksh compatibility
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Common shellcheck Directives in nvm
|
||||||
|
- `# shellcheck disable=SC2039` - Allow bash extensions in POSIX mode
|
||||||
|
- `# shellcheck disable=SC2016` - Allow literal `$` in single quotes
|
||||||
|
- `# shellcheck disable=SC2001` - Allow sed usage instead of parameter expansion
|
||||||
|
- `# shellcheck disable=SC3043` - Allow `local` keyword (bash extension)
|
||||||
|
|
||||||
|
### Fixing shellcheck Issues
|
||||||
|
1. **Quoting**: Always quote variables: `"${VAR}"` instead of `$VAR`
|
||||||
|
2. **POSIX compliance**: Avoid bash-specific features in portable sections
|
||||||
|
3. **Array usage**: Use `set --` for positional parameters instead of arrays, which are not supported in POSIX
|
||||||
|
4. **Local variables**: Declared with `local FOO` and then initialized on the next line (the latter is for ksh support)
|
||||||
|
|
||||||
|
## Development Best Practices
|
||||||
|
|
||||||
|
### Code Style
|
||||||
|
- Use 2-space indentation
|
||||||
|
- Follow POSIX shell guidelines for portability
|
||||||
|
- Prefix internal functions with `nvm_`
|
||||||
|
- Use `nvm_echo` instead of `echo` for output
|
||||||
|
- Use `nvm_err` for error messages
|
||||||
|
|
||||||
|
### Compatibility
|
||||||
|
- Test changes across all supported shells
|
||||||
|
- Avoid bash-specific features in core functionality
|
||||||
|
- Use `nvm_is_zsh` to check when zsh-specific behavior is needed
|
||||||
|
- Mock external dependencies in tests
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- Cache expensive operations (like remote version lists)
|
||||||
|
- Use local variables to avoid scope pollution
|
||||||
|
- Minimize subprocess calls where possible
|
||||||
|
- Implement lazy loading for optional features
|
||||||
|
|
||||||
|
### Debugging
|
||||||
|
- Use `nvm debug` command for environment information
|
||||||
|
- Enable verbose output with `set -x` during development
|
||||||
|
- Test with `NVM_DEBUG=1` environment variable
|
||||||
|
- Check `$NVM_DIR/.cache` for cached data issues
|
||||||
|
|
||||||
|
## Common Gotchas
|
||||||
|
|
||||||
|
1. **PATH modification**: nvm modifies PATH extensively; be careful with restoration
|
||||||
|
2. **Shell sourcing**: nvm must be sourced, not executed as a script
|
||||||
|
3. **Version resolution**: Aliases, partial versions, and special keywords interact complexly
|
||||||
|
4. **Platform differences**: Handle differences between Linux, macOS, and other Unix systems
|
||||||
|
5. **Network dependencies**: Many operations require internet access for version lists
|
||||||
|
6. **Concurrent access**: Multiple shells can conflict when installing versions simultaneously
|
||||||
|
|
||||||
|
## Windows Support
|
||||||
|
|
||||||
|
nvm works on Windows via several compatibility layers:
|
||||||
|
|
||||||
|
### WSL2 (Windows Subsystem for Linux)
|
||||||
|
- Full nvm functionality available
|
||||||
|
- **Important**: Ensure you're using WSL2, not WSL1 - see [Microsoft's WSL2 installation guide](https://docs.microsoft.com/en-us/windows/wsl/install) for up-to-date instructions
|
||||||
|
- Install Ubuntu or other Linux distribution from Microsoft Store
|
||||||
|
- Follow Linux installation instructions within WSL2
|
||||||
|
|
||||||
|
### Cygwin
|
||||||
|
- POSIX-compatible environment for Windows
|
||||||
|
- Download Cygwin from [cygwin.com](https://www.cygwin.com/install.html) and run the installer
|
||||||
|
- During installation, include these packages: bash, curl, git, tar, and wget
|
||||||
|
- May require additional PATH configuration
|
||||||
|
|
||||||
|
### Git Bash (MSYS2)
|
||||||
|
- Comes with Git for Windows
|
||||||
|
- Limited functionality compared to full Linux environment
|
||||||
|
- Some features may not work due to path translation issues, including:
|
||||||
|
- Binary extraction paths may be incorrectly translated
|
||||||
|
- Symlink creation may fail
|
||||||
|
- Some shell-specific features may behave differently
|
||||||
|
- File permissions handling differs from Unix systems
|
||||||
|
|
||||||
|
### Setup Instructions for Windows
|
||||||
|
|
||||||
|
#### WSL2 (recommended)
|
||||||
|
1. Install WSL2 using the official Microsoft guide: https://docs.microsoft.com/en-us/windows/wsl/install
|
||||||
|
2. Install Ubuntu or preferred Linux distribution from Microsoft Store
|
||||||
|
3. Follow standard Linux installation within WSL2
|
||||||
|
|
||||||
|
#### Git Bash
|
||||||
|
1. Install Git for Windows (includes Git Bash) from https://git-scm.com/download/win
|
||||||
|
2. Open Git Bash terminal
|
||||||
|
3. Run nvm installation script
|
||||||
|
|
||||||
|
#### Cygwin
|
||||||
|
1. Download and install Cygwin from https://www.cygwin.com/install.html
|
||||||
|
2. Include bash, curl, git, tar, and wget packages during installation
|
||||||
|
3. Run nvm installation in Cygwin terminal
|
||||||
|
|
||||||
|
This guide should help GitHub Copilot understand the nvm codebase structure, testing procedures, and development environment setup requirements.
|
||||||
52
.github/workflows/codeql-analysis.yml
vendored
Normal file
52
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
name: "Code scanning - action"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 17 * * 4'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CodeQL-Build:
|
||||||
|
|
||||||
|
# CodeQL runs on ubuntu-latest and windows-latest
|
||||||
|
permissions:
|
||||||
|
actions: read # for github/codeql-action/init to get workflow details
|
||||||
|
contents: read # for actions/checkout to fetch code
|
||||||
|
security-events: write # for github/codeql-action/autobuild to send a status report
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v4
|
||||||
|
# Override language selection by uncommenting this and choosing your languages
|
||||||
|
# with:
|
||||||
|
# languages: go, javascript, csharp, python, cpp, java
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v4
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v4
|
||||||
2
.github/workflows/latest-npm.yml
vendored
2
.github/workflows/latest-npm.yml
vendored
@@ -63,7 +63,7 @@ jobs:
|
|||||||
iojs.org:443
|
iojs.org:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'install node'
|
name: 'install node'
|
||||||
with:
|
with:
|
||||||
|
|||||||
8
.github/workflows/lint.yml
vendored
8
.github/workflows/lint.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
pkg-containers.githubusercontent.com:443
|
pkg-containers.githubusercontent.com:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -52,7 +52,7 @@ jobs:
|
|||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
nodejs.org:443
|
nodejs.org:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: ljharb/actions/node/install@main
|
- uses: ljharb/actions/node/install@main
|
||||||
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
name: 'nvm install ${{ matrix.node-version }} && npm install'
|
||||||
with:
|
with:
|
||||||
@@ -67,6 +67,6 @@ jobs:
|
|||||||
allowed-endpoints:
|
allowed-endpoints:
|
||||||
github.com:443
|
github.com:443
|
||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: check tests filenames
|
- name: check tests filenames
|
||||||
run: ./rename_test.sh --check
|
run: ./rename_test.sh --check
|
||||||
|
|||||||
4
.github/workflows/nvm-install-test.yml
vendored
4
.github/workflows/nvm-install-test.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.matrix.outputs.matrix }}
|
matrix: ${{ steps.matrix.outputs.matrix }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- id: matrix
|
- id: matrix
|
||||||
@@ -55,7 +55,7 @@ jobs:
|
|||||||
- 2 shlvls
|
- 2 shlvls
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: resolve HEAD to sha
|
- name: resolve HEAD to sha
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.ref }}' = 'HEAD' ]; then
|
if [ '${{ matrix.ref }}' = 'HEAD' ]; then
|
||||||
|
|||||||
19
.github/workflows/rebase.yml
vendored
19
.github/workflows/rebase.yml
vendored
@@ -2,25 +2,16 @@ name: Automatic Rebase
|
|||||||
|
|
||||||
on: [pull_request_target]
|
on: [pull_request_target]
|
||||||
|
|
||||||
permissions:
|
permissions: read-all
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
_:
|
_:
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
name: "Automatic Rebase"
|
name: "Automatic Rebase"
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- uses: actions/checkout@v6
|
||||||
uses: step-security/harden-runner@v2
|
- uses: ljharb/rebase@master
|
||||||
with:
|
env:
|
||||||
allowed-endpoints:
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
api.github.com:443
|
|
||||||
github.com:443
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: ljharb/rebase@master
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
5
.github/workflows/release.yml
vendored
5
.github/workflows/release.yml
vendored
@@ -17,11 +17,12 @@ jobs:
|
|||||||
api.github.com:443
|
api.github.com:443
|
||||||
objects.githubusercontent.com:443
|
objects.githubusercontent.com:443
|
||||||
raw.githubusercontent.com:443
|
raw.githubusercontent.com:443
|
||||||
|
release-assets.githubusercontent.com:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: "14"
|
node-version: "14"
|
||||||
- run: npm install
|
- run: npm install
|
||||||
|
|||||||
14
.github/workflows/require-allow-edits.yml
vendored
14
.github/workflows/require-allow-edits.yml
vendored
@@ -2,23 +2,13 @@ name: Require “Allow Edits”
|
|||||||
|
|
||||||
on: [pull_request_target]
|
on: [pull_request_target]
|
||||||
|
|
||||||
permissions:
|
permissions: read-all
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
_:
|
_:
|
||||||
permissions:
|
|
||||||
pull-requests: read
|
|
||||||
name: "Require “Allow Edits”"
|
name: "Require “Allow Edits”"
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- uses: ljharb/require-allow-edits@main
|
||||||
uses: step-security/harden-runner@v2
|
|
||||||
with:
|
|
||||||
allowed-endpoints:
|
|
||||||
api.github.com:443
|
|
||||||
- uses: ljharb/require-allow-edits@main
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
2
.github/workflows/shellcheck.yml
vendored
2
.github/workflows/shellcheck.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
github.com:443
|
github.com:443
|
||||||
pkg-containers.githubusercontent.com:443
|
pkg-containers.githubusercontent.com:443
|
||||||
formulae.brew.sh:443
|
formulae.brew.sh:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Set up Homebrew
|
- name: Set up Homebrew
|
||||||
uses: Homebrew/actions/setup-homebrew@master
|
uses: Homebrew/actions/setup-homebrew@master
|
||||||
- name: Install latest shellcheck
|
- name: Install latest shellcheck
|
||||||
|
|||||||
101
.github/workflows/tests-fast.yml
vendored
Normal file
101
.github/workflows/tests-fast.yml
vendored
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
name: 'Tests: fast'
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
fast:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
name: 'fast (${{ matrix.shell }}, ${{ matrix.awk }})'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
shell:
|
||||||
|
- sh
|
||||||
|
- bash
|
||||||
|
- dash
|
||||||
|
- zsh
|
||||||
|
# - ksh
|
||||||
|
awk:
|
||||||
|
- gawk
|
||||||
|
- mawk
|
||||||
|
|
||||||
|
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
|
||||||
|
unofficial-builds.nodejs.org:443
|
||||||
|
azure.archive.ubuntu.com:80
|
||||||
|
packages.microsoft.com:443
|
||||||
|
registry-1.docker.io:443
|
||||||
|
auth.docker.io:443
|
||||||
|
production.cloudflare.docker.com:443
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install zsh, additional shells, and awk variant
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y zsh ${{ matrix.awk }}
|
||||||
|
if [ "${{ matrix.shell }}" != "sh" ] && [ "${{ matrix.shell }}" != "bash" ] && [ "${{ matrix.shell }}" != "zsh" ]; then
|
||||||
|
sudo apt-get install -y ${{ matrix.shell }}
|
||||||
|
fi
|
||||||
|
# Set the selected awk as the default
|
||||||
|
sudo update-alternatives --set awk /usr/bin/${{ matrix.awk }}
|
||||||
|
shell: bash
|
||||||
|
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
|
||||||
|
- run: awk --version 2>&1 | head -1 || awk -W version 2>&1 | head -1
|
||||||
|
- 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
|
||||||
|
- name: Hide system node
|
||||||
|
run: |
|
||||||
|
if [ -f /usr/local/bin/node ]; then sudo mv /usr/local/bin/node /usr/local/bin/node.bak; fi
|
||||||
|
if [ -f /usr/local/bin/npm ]; then sudo mv /usr/local/bin/npm /usr/local/bin/npm.bak; fi
|
||||||
|
if [ -f /usr/local/bin/npx ]; then sudo mv /usr/local/bin/npx /usr/local/bin/npx.bak; fi
|
||||||
|
shell: bash
|
||||||
|
- name: Run fast tests
|
||||||
|
run: |
|
||||||
|
URCHIN_PATH="$(npx which urchin)"
|
||||||
|
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||||
|
export NVM_DIR="${{ github.workspace }}"
|
||||||
|
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
|
||||||
|
make TERM=xterm-256color TEST_SUITE="fast" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||||
|
- name: Restore system node
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
if [ -f /usr/local/bin/node.bak ]; then sudo mv /usr/local/bin/node.bak /usr/local/bin/node; fi
|
||||||
|
if [ -f /usr/local/bin/npm.bak ]; then sudo mv /usr/local/bin/npm.bak /usr/local/bin/npm; fi
|
||||||
|
if [ -f /usr/local/bin/npx.bak ]; then sudo mv /usr/local/bin/npx.bak /usr/local/bin/npx; fi
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
all:
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
|
name: 'all fast tests'
|
||||||
|
needs: [fast]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: true
|
||||||
99
.github/workflows/tests-installation-iojs.yml
vendored
Normal file
99
.github/workflows/tests-installation-iojs.yml
vendored
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
name: 'Tests: installation_iojs'
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
installation_iojs_without_curl:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
name: 'installation_iojs without curl (${{ matrix.shell }})'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
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@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Install zsh and additional shells
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y zsh
|
||||||
|
if [ "${{ matrix.shell }}" != "sh" ] && [ "${{ matrix.shell }}" != "bash" ] && [ "${{ matrix.shell }}" != "zsh" ]; then
|
||||||
|
sudo apt-get install -y ${{ matrix.shell }}
|
||||||
|
fi
|
||||||
|
shell: bash
|
||||||
|
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
|
||||||
|
- 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
|
||||||
|
- name: Remove curl
|
||||||
|
run: sudo apt-get remove curl -y
|
||||||
|
shell: bash
|
||||||
|
- run: '! command -v curl'
|
||||||
|
shell: bash
|
||||||
|
- run: env
|
||||||
|
- name: Hide system node
|
||||||
|
run: |
|
||||||
|
if [ -f /usr/local/bin/node ]; then sudo mv /usr/local/bin/node /usr/local/bin/node.bak; fi
|
||||||
|
if [ -f /usr/local/bin/npm ]; then sudo mv /usr/local/bin/npm /usr/local/bin/npm.bak; fi
|
||||||
|
if [ -f /usr/local/bin/npx ]; then sudo mv /usr/local/bin/npx /usr/local/bin/npx.bak; fi
|
||||||
|
shell: bash
|
||||||
|
- name: Run installation_iojs tests
|
||||||
|
run: |
|
||||||
|
URCHIN_PATH="$(npx which urchin)"
|
||||||
|
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||||
|
export NVM_DIR="${{ github.workspace }}"
|
||||||
|
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
|
||||||
|
make TERM=xterm-256color TEST_SUITE="installation_iojs" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
|
||||||
|
- name: Restore system node
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
if [ -f /usr/local/bin/node.bak ]; then sudo mv /usr/local/bin/node.bak /usr/local/bin/node; fi
|
||||||
|
if [ -f /usr/local/bin/npm.bak ]; then sudo mv /usr/local/bin/npm.bak /usr/local/bin/npm; fi
|
||||||
|
if [ -f /usr/local/bin/npx.bak ]; then sudo mv /usr/local/bin/npx.bak /usr/local/bin/npx; fi
|
||||||
|
shell: bash
|
||||||
|
- name: Restore curl
|
||||||
|
if: always()
|
||||||
|
run: sudo apt-get install curl -y
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
all:
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
|
name: 'all installation_iojs tests'
|
||||||
|
needs: [installation_iojs_without_curl]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: true
|
||||||
122
.github/workflows/tests-installation-node.yml
vendored
Normal file
122
.github/workflows/tests-installation-node.yml
vendored
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
name: 'Tests: installation_node'
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
installation_node:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
name: "installation_node (${{ matrix.shell }}${{ matrix.without_curl && ', without curl' || '' }})"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
shell:
|
||||||
|
- sh
|
||||||
|
- bash
|
||||||
|
- dash
|
||||||
|
- zsh
|
||||||
|
# - ksh
|
||||||
|
without_curl:
|
||||||
|
- false
|
||||||
|
- true
|
||||||
|
|
||||||
|
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
|
||||||
|
archive.ubuntu.com:80
|
||||||
|
security.ubuntu.com:80
|
||||||
|
production.cloudflare.docker.com:443
|
||||||
|
registry-1.docker.io:443
|
||||||
|
auth.docker.io:443
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- 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
|
||||||
|
- name: Run installation_node tests in container
|
||||||
|
run: |
|
||||||
|
docker run --rm \
|
||||||
|
-v "${{ github.workspace }}:/workspace" \
|
||||||
|
-w /workspace \
|
||||||
|
-e "TEST_SHELL=${{ matrix.shell }}" \
|
||||||
|
-e "TERM=xterm-256color" \
|
||||||
|
-e "DEBIAN_FRONTEND=noninteractive" \
|
||||||
|
-e "GITHUB_ACTIONS=true" \
|
||||||
|
-e "WITHOUT_CURL=${{ matrix.without_curl }}" \
|
||||||
|
ubuntu:16.04 \
|
||||||
|
bash -c '
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# Retry apt-get update up to 5 times due to flaky Ubuntu mirrors
|
||||||
|
# apt-get update can return 0 even with partial failures, so check for warnings
|
||||||
|
for i in 1 2 3 4 5; do
|
||||||
|
if apt-get update 2>&1 | tee /tmp/apt-update.log | grep -qE "^(W:|E:|Err:)"; then
|
||||||
|
echo "apt-get update had warnings/errors, attempt $i/5"
|
||||||
|
cat /tmp/apt-update.log
|
||||||
|
sleep $((i * 5))
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
apt-get install -y git curl wget make build-essential python zsh libssl-dev
|
||||||
|
if [ "$TEST_SHELL" != "sh" ] && [ "$TEST_SHELL" != "bash" ]; then
|
||||||
|
apt-get install -y $TEST_SHELL || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use nvm to install Node.js for running urchin
|
||||||
|
# Node 16 is the last version supporting GLIBC 2.23 (Ubuntu 16.04)
|
||||||
|
export NVM_DIR="/workspace"
|
||||||
|
. /workspace/nvm.sh
|
||||||
|
nvm install 16
|
||||||
|
nvm use 16
|
||||||
|
|
||||||
|
npm ls urchin
|
||||||
|
URCHIN_PATH="$(npx which urchin)"
|
||||||
|
|
||||||
|
# Remove curl if testing without it
|
||||||
|
if [ "$WITHOUT_CURL" = "true" ]; then
|
||||||
|
apt-get remove curl -y
|
||||||
|
! command -v curl
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now clean up nvm state for the actual tests, but keep NVM_DIR set
|
||||||
|
nvm deactivate || true
|
||||||
|
nvm unalias default || true
|
||||||
|
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||||
|
export PATH="$(echo "$PATH" | tr ":" "\n" | grep -v "\.nvm" | grep -v "toolcache" | tr "\n" ":")"
|
||||||
|
|
||||||
|
# Clean any cached files from the nvm install above
|
||||||
|
rm -rf "$NVM_DIR/.cache" "$NVM_DIR/versions" "$NVM_DIR/alias"
|
||||||
|
|
||||||
|
make TEST_SUITE="installation_node" SHELL="$TEST_SHELL" URCHIN="$URCHIN_PATH" test-$TEST_SHELL
|
||||||
|
'
|
||||||
|
|
||||||
|
all:
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
|
name: 'all installation_node tests'
|
||||||
|
needs: [installation_node]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: true
|
||||||
112
.github/workflows/tests-xenial.yml
vendored
Normal file
112
.github/workflows/tests-xenial.yml
vendored
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
name: 'Tests: xenial'
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
xenial:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
name: 'xenial (${{ matrix.shell }})'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
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
|
||||||
|
archive.ubuntu.com:80
|
||||||
|
security.ubuntu.com:80
|
||||||
|
production.cloudflare.docker.com:443
|
||||||
|
registry-1.docker.io:443
|
||||||
|
auth.docker.io:443
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- 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
|
||||||
|
- name: Run xenial tests in container
|
||||||
|
run: |
|
||||||
|
docker run --rm \
|
||||||
|
-v "${{ github.workspace }}:/workspace" \
|
||||||
|
-w /workspace \
|
||||||
|
-e "TEST_SHELL=${{ matrix.shell }}" \
|
||||||
|
-e "TERM=xterm-256color" \
|
||||||
|
-e "DEBIAN_FRONTEND=noninteractive" \
|
||||||
|
-e "GITHUB_ACTIONS=true" \
|
||||||
|
ubuntu:16.04 \
|
||||||
|
bash -c '
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# Retry apt-get update up to 5 times due to flaky Ubuntu mirrors
|
||||||
|
# apt-get update can return 0 even with partial failures, so check for warnings
|
||||||
|
for i in 1 2 3 4 5; do
|
||||||
|
if apt-get update 2>&1 | tee /tmp/apt-update.log | grep -qE "^(W:|E:|Err:)"; then
|
||||||
|
echo "apt-get update had warnings/errors, attempt $i/5"
|
||||||
|
cat /tmp/apt-update.log
|
||||||
|
sleep $((i * 5))
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
apt-get install -y git curl wget make build-essential python zsh libssl-dev
|
||||||
|
if [ "$TEST_SHELL" != "sh" ] && [ "$TEST_SHELL" != "bash" ]; then
|
||||||
|
apt-get install -y $TEST_SHELL || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use nvm to install Node.js for running urchin
|
||||||
|
# Node 16 is the last version supporting GLIBC 2.23 (Ubuntu 16.04)
|
||||||
|
export NVM_DIR="/workspace"
|
||||||
|
. /workspace/nvm.sh
|
||||||
|
nvm install 16
|
||||||
|
nvm use 16
|
||||||
|
|
||||||
|
npm ls urchin
|
||||||
|
URCHIN_PATH="$(npx which urchin)"
|
||||||
|
|
||||||
|
# Now clean up nvm state for the actual tests, but keep NVM_DIR set
|
||||||
|
nvm deactivate || true
|
||||||
|
nvm unalias default || true
|
||||||
|
unset NVM_CD_FLAGS NVM_BIN NVM_INC
|
||||||
|
export PATH="$(echo "$PATH" | tr ":" "\n" | grep -v "\.nvm" | grep -v "toolcache" | tr "\n" ":")"
|
||||||
|
|
||||||
|
# Clean any cached files from the nvm install above
|
||||||
|
rm -rf "$NVM_DIR/.cache" "$NVM_DIR/versions" "$NVM_DIR/alias"
|
||||||
|
|
||||||
|
make TEST_SUITE="xenial" SHELL="$TEST_SHELL" URCHIN="$URCHIN_PATH" test-$TEST_SHELL
|
||||||
|
'
|
||||||
|
|
||||||
|
all:
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
|
name: 'all xenial tests'
|
||||||
|
needs: [xenial]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: true
|
||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -52,7 +52,7 @@ jobs:
|
|||||||
iojs.org:443
|
iojs.org:443
|
||||||
azure.archive.ubuntu.com:80
|
azure.archive.ubuntu.com:80
|
||||||
packages.microsoft.com:443
|
packages.microsoft.com:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- run: sudo apt-get update; sudo apt-get install ${{ matrix.shell }}
|
- run: sudo apt-get update; sudo apt-get install ${{ matrix.shell }}
|
||||||
if: matrix.shell == 'zsh' || matrix.shell == 'ksh'
|
if: matrix.shell == 'zsh' || matrix.shell == 'ksh'
|
||||||
# zsh (https://github.com/actions/runner-images/issues/264) and ksh are not in the ubuntu image
|
# zsh (https://github.com/actions/runner-images/issues/264) and ksh are not in the ubuntu image
|
||||||
|
|||||||
4
.github/workflows/toc.yml
vendored
4
.github/workflows/toc.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
github.com:443
|
github.com:443
|
||||||
registry.npmjs.org:443
|
registry.npmjs.org:443
|
||||||
api.github.com:443
|
api.github.com:443
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
# https://github.com/actions/checkout/issues/217#issue-599945005
|
# https://github.com/actions/checkout/issues/217#issue-599945005
|
||||||
# pulls all commits (needed for lerna / semantic release to correctly version)
|
# pulls all commits (needed for lerna / semantic release to correctly version)
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
# pulls all tags (needed for lerna / semantic release to correctly version)
|
# pulls all tags (needed for lerna / semantic release to correctly version)
|
||||||
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
- run: npm install
|
- run: npm install
|
||||||
|
|||||||
48
.github/workflows/windows-npm.yml
vendored
48
.github/workflows/windows-npm.yml
vendored
@@ -72,8 +72,11 @@ jobs:
|
|||||||
unset npm_config_prefix
|
unset npm_config_prefix
|
||||||
export NVM_INSTALL_GITHUB_REPO="$NVM_INSTALL_GITHUB_REPO"
|
export NVM_INSTALL_GITHUB_REPO="$NVM_INSTALL_GITHUB_REPO"
|
||||||
export NVM_INSTALL_VERSION="$NVM_INSTALL_VERSION"
|
export NVM_INSTALL_VERSION="$NVM_INSTALL_VERSION"
|
||||||
|
export HOME="$(cygpath -u "$USERPROFILE")"
|
||||||
|
|
||||||
|
echo "HOME is $HOME"
|
||||||
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | bash
|
curl -fsSLo- "https://raw.githubusercontent.com/${NVM_INSTALL_GITHUB_REPO}/${NVM_INSTALL_VERSION}/install.sh" | bash
|
||||||
|
ls -l $HOME/.nvm
|
||||||
. "$HOME/.nvm/nvm.sh"
|
. "$HOME/.nvm/nvm.sh"
|
||||||
nvm install --lts
|
nvm install --lts
|
||||||
|
|
||||||
@@ -122,14 +125,56 @@ jobs:
|
|||||||
npm-node-version: '21'
|
npm-node-version: '21'
|
||||||
- wsl-distrib: Ubuntu-18.04
|
- wsl-distrib: Ubuntu-18.04
|
||||||
npm-node-version: '18'
|
npm-node-version: '18'
|
||||||
|
# node v24+ doesn't work on WSL1 (exec format error)
|
||||||
|
- wsl-distrib: Debian
|
||||||
|
npm-node-version: '--lts'
|
||||||
|
- wsl-distrib: Ubuntu-20.04
|
||||||
|
npm-node-version: '--lts'
|
||||||
method:
|
method:
|
||||||
- ''
|
- ''
|
||||||
- 'script'
|
- 'script'
|
||||||
steps:
|
steps:
|
||||||
- uses: Vampire/setup-wsl@v3
|
# For Ubuntu: install with packages directly
|
||||||
|
- if: matrix.wsl-distrib != 'Debian'
|
||||||
|
uses: Vampire/setup-wsl@v3
|
||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.wsl-distrib }}
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
additional-packages: bash git curl ca-certificates wget
|
additional-packages: bash git curl ca-certificates wget
|
||||||
|
|
||||||
|
# For Debian: install without packages first (apt-get update fails due to stale sources.list)
|
||||||
|
# see https://github.com/Vampire/setup-wsl/issues/76
|
||||||
|
- if: matrix.wsl-distrib == 'Debian'
|
||||||
|
uses: Vampire/setup-wsl@v3
|
||||||
|
with:
|
||||||
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
|
- if: matrix.wsl-distrib == 'Debian'
|
||||||
|
shell: 'wsl-bash {0}'
|
||||||
|
run: 'sed -i s/ftp.debian.org/archive.debian.org/ /etc/apt/sources.list'
|
||||||
|
- if: matrix.wsl-distrib == 'Debian'
|
||||||
|
name: 'Install packages with retries'
|
||||||
|
shell: 'wsl-bash {0}'
|
||||||
|
run: |
|
||||||
|
retry() {
|
||||||
|
local n=0
|
||||||
|
local max=3
|
||||||
|
local delay=5
|
||||||
|
while true; do
|
||||||
|
"$@" && break || {
|
||||||
|
n=$((n+1))
|
||||||
|
if [ $n -lt $max ]; then
|
||||||
|
echo "Command failed. Attempt $n/$max. Retrying in $delay seconds..."
|
||||||
|
sleep $delay
|
||||||
|
else
|
||||||
|
echo "Command failed after $max attempts."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
retry apt-get update
|
||||||
|
retry apt-get upgrade --yes
|
||||||
|
retry apt-get install --yes bash git curl ca-certificates wget
|
||||||
|
|
||||||
- name: Retrieve nvm on WSL
|
- name: Retrieve nvm on WSL
|
||||||
run: |
|
run: |
|
||||||
if [ -z "${{ matrix.method }}" ]; then
|
if [ -z "${{ matrix.method }}" ]; then
|
||||||
@@ -173,6 +218,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.wsl-distrib }}
|
distribution: ${{ matrix.wsl-distrib }}
|
||||||
additional-packages: bash git curl ca-certificates wget
|
additional-packages: bash git curl ca-certificates wget
|
||||||
|
|
||||||
- name: Retrieve nvm on WSL
|
- name: Retrieve nvm on WSL
|
||||||
run: |
|
run: |
|
||||||
if [ -z "${{ matrix.method }}" ]; then
|
if [ -z "${{ matrix.method }}" ]; then
|
||||||
|
|||||||
94
.travis.yml
94
.travis.yml
@@ -1,94 +0,0 @@
|
|||||||
language: generic
|
|
||||||
dist: focal
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- zsh
|
|
||||||
# - ksh
|
|
||||||
# - gcc-4.8
|
|
||||||
# - g++-4.8
|
|
||||||
|
|
||||||
# https://gist.github.com/iedemam/9830045
|
|
||||||
git:
|
|
||||||
submodules: false
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
# https://gist.github.com/iedemam/9830045
|
|
||||||
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
|
|
||||||
- $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 python
|
|
||||||
- pyenv local 2.7.18 || pyenv install 2.7.18
|
|
||||||
- pyenv local 2.7.18 || echo 'pyenv failed'
|
|
||||||
- python -V
|
|
||||||
install:
|
|
||||||
- if [ -z "${SHELLCHECK-}" ]; then nvm install 16 && nvm unalias default && npm install && npm prune && npm ls urchin doctoc eclint dockerfile_lint; fi
|
|
||||||
- '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y'
|
|
||||||
script:
|
|
||||||
- if [ -n "${SHELL-}" ] && [ -n "${TEST_SUITE}" ]; then if [ "${TEST_SUITE}" = 'installation_iojs' ] || [ "${TEST_SUITE}" = 'xenial' ]; then travis_retry make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL ; else make TEST_SUITE=$TEST_SUITE URCHIN="$(npm bin)/urchin" test-$SHELL; fi; fi
|
|
||||||
before_cache:
|
|
||||||
- if [ -n "$WITHOUT_CURL" ]; then sudo apt-get install curl -y ; fi
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- env: SHELL=bash TEST_SUITE=installation_node
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=bash TEST_SUITE=installation_node WITHOUT_CURL=1
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=sh TEST_SUITE=installation_node
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=sh TEST_SUITE=installation_node WITHOUT_CURL=1
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=dash TEST_SUITE=installation_node
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=dash TEST_SUITE=installation_node WITHOUT_CURL=1
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=zsh TEST_SUITE=installation_node
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=zsh TEST_SUITE=installation_node WITHOUT_CURL=1
|
|
||||||
dist: xenial
|
|
||||||
#- env: SHELL=ksh TEST_SUITE=installation_node
|
|
||||||
# dist: xenial
|
|
||||||
#- env: SHELL=ksh TEST_SUITE=installation_node WITHOUT_CURL=1
|
|
||||||
# dist: xenial
|
|
||||||
- env: SHELL=bash TEST_SUITE=xenial
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=sh TEST_SUITE=xenial
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=dash TEST_SUITE=xenial
|
|
||||||
dist: xenial
|
|
||||||
- env: SHELL=zsh TEST_SUITE=xenial
|
|
||||||
dist: xenial
|
|
||||||
#- env: SHELL=ksh TEST_SUITE=xenial
|
|
||||||
# dist: xenial
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- CXX=g++
|
|
||||||
- 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=installation_iojs WITHOUT_CURL=1
|
|
||||||
- SHELL=dash TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
|
||||||
- SHELL=bash TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
|
||||||
- SHELL=zsh TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
|
||||||
# - SHELL=ksh TEST_SUITE=installation_iojs WITHOUT_CURL=1
|
|
||||||
15
README.md
15
README.md
@@ -6,7 +6,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)
|
# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)
|
||||||
|
|
||||||
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
|
<!-- To update this table of contents, ensure you have run `npm install` then `npm run doctoc` -->
|
||||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
@@ -150,7 +150,7 @@ RUN touch "${BASH_ENV}"
|
|||||||
RUN echo '. "${BASH_ENV}"' >> ~/.bashrc
|
RUN echo '. "${BASH_ENV}"' >> ~/.bashrc
|
||||||
|
|
||||||
# Download and install nvm
|
# Download and install nvm
|
||||||
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | PROFILE="${BASH_ENV}" bash
|
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | PROFILE="${BASH_ENV}" bash
|
||||||
RUN echo node > .nvmrc
|
RUN echo node > .nvmrc
|
||||||
RUN nvm install
|
RUN nvm install
|
||||||
```
|
```
|
||||||
@@ -443,7 +443,7 @@ Node has a [schedule](https://github.com/nodejs/Release#release-schedule) for lo
|
|||||||
|
|
||||||
Any time your local copy of `nvm` connects to https://nodejs.org, it will re-create the appropriate local aliases for all available LTS lines. These aliases (stored under `$NVM_DIR/alias/lts`), are managed by `nvm`, and you should not modify, remove, or create these files - expect your changes to be undone, and expect meddling with these files to cause bugs that will likely not be supported.
|
Any time your local copy of `nvm` connects to https://nodejs.org, it will re-create the appropriate local aliases for all available LTS lines. These aliases (stored under `$NVM_DIR/alias/lts`), are managed by `nvm`, and you should not modify, remove, or create these files - expect your changes to be undone, and expect meddling with these files to cause bugs that will likely not be supported.
|
||||||
|
|
||||||
To get the latest LTS version of node and migrate your existing installed packages, use
|
To get the latest LTS version of node and migrate your existing installed packages, use:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nvm install --reinstall-packages-from=current 'lts/*'
|
nvm install --reinstall-packages-from=current 'lts/*'
|
||||||
@@ -496,7 +496,10 @@ stevemao/left-pad
|
|||||||
|
|
||||||
### io.js
|
### io.js
|
||||||
|
|
||||||
If you want to install [io.js](https://github.com/iojs/io.js/):
|
> [!WARNING]
|
||||||
|
> io.js was a [fork of Node.js](https://en.wikipedia.org/wiki/Node.js#History), created in 2014 and merged back in 2015. io.js shipped v1, v2, and v3 release lines; post-merge, node.js began releasing with v4.
|
||||||
|
|
||||||
|
If you want to install io.js:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nvm install iojs
|
nvm install iojs
|
||||||
@@ -1035,12 +1038,12 @@ To change the user directory and/or account name follow the instructions [here](
|
|||||||
|
|
||||||
[1]: https://github.com/nvm-sh/nvm.git
|
[1]: https://github.com/nvm-sh/nvm.git
|
||||||
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.3/install.sh
|
[2]: https://github.com/nvm-sh/nvm/blob/v0.40.3/install.sh
|
||||||
[3]: https://app.travis-ci.com/nvm-sh/nvm
|
[3]: https://github.com/nvm-sh/nvm/actions/workflows/tests-fast.yml
|
||||||
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.3
|
[4]: https://github.com/nvm-sh/nvm/releases/tag/v0.40.3
|
||||||
[Urchin]: https://git.sdf.org/tlevine/urchin
|
[Urchin]: https://git.sdf.org/tlevine/urchin
|
||||||
[Fish]: https://fishshell.com
|
[Fish]: https://fishshell.com
|
||||||
|
|
||||||
**Homebrew makes zsh directories unsecure**
|
**Homebrew makes zsh directories insecure**
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
zsh compinit: insecure directories, run compaudit for list.
|
zsh compinit: insecure directories, run compaudit for list.
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ install_nvm_from_git() {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
# Cloning repo
|
# Cloning repo
|
||||||
command git clone "$(nvm_source)" --depth=1 "${INSTALL_DIR}" || {
|
command git clone -o origin "$(nvm_source)" --depth=1 "${INSTALL_DIR}" || {
|
||||||
nvm_echo >&2 'Failed to clone nvm repo. Please report this!'
|
nvm_echo >&2 'Failed to clone nvm repo. Please report this!'
|
||||||
exit 2
|
exit 2
|
||||||
}
|
}
|
||||||
@@ -428,7 +428,10 @@ nvm_do_install() {
|
|||||||
COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
|
COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
|
||||||
BASH_OR_ZSH=false
|
BASH_OR_ZSH=false
|
||||||
|
|
||||||
if [ -z "${NVM_PROFILE-}" ] ; then
|
if [ "${PROFILE-}" = '/dev/null' ] ; then
|
||||||
|
# the user has specifically requested NOT to have nvm touch their profile
|
||||||
|
echo
|
||||||
|
elif [ -z "${NVM_PROFILE-}" ] ; then
|
||||||
local TRIED_PROFILE
|
local TRIED_PROFILE
|
||||||
if [ -n "${PROFILE}" ]; then
|
if [ -n "${PROFILE}" ]; then
|
||||||
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
|
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
|
||||||
|
|||||||
9
nvm-exec
9
nvm-exec
@@ -9,9 +9,12 @@ unset NVM_CD_FLAGS
|
|||||||
|
|
||||||
if [ -n "$NODE_VERSION" ]; then
|
if [ -n "$NODE_VERSION" ]; then
|
||||||
nvm use "$NODE_VERSION" > /dev/null || exit 127
|
nvm use "$NODE_VERSION" > /dev/null || exit 127
|
||||||
elif ! nvm use >/dev/null 2>&1; then
|
else
|
||||||
echo "No NODE_VERSION provided; no .nvmrc file found" >&2
|
nvm_rc_version > /dev/null && nvm_ensure_version_installed "$NVM_RC_VERSION";
|
||||||
exit 127
|
if ! nvm use >/dev/null 2>&1; then
|
||||||
|
echo "No NODE_VERSION provided; no .nvmrc file found" >&2
|
||||||
|
exit 127
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|||||||
47
nvm.sh
47
nvm.sh
@@ -83,7 +83,7 @@ nvm_has_colors() {
|
|||||||
if nvm_has tput; then
|
if nvm_has tput; then
|
||||||
NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)"
|
NVM_NUM_COLORS="$(command tput -T "${TERM:-vt100}" colors)"
|
||||||
fi
|
fi
|
||||||
[ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
[ -t 1 ] && [ "${NVM_NUM_COLORS:--1}" -ge 8 ] && [ "${NVM_NO_COLORS-}" != '--no-colors' ]
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_curl_libz_support() {
|
nvm_curl_libz_support() {
|
||||||
@@ -781,6 +781,15 @@ nvm_remote_version() {
|
|||||||
else
|
else
|
||||||
VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" | command tail -1)"
|
VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" | command tail -1)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "${PATTERN}" ] && [ "_${VERSION}" != "_N/A" ] && ! nvm_validate_implicit_alias "${PATTERN}" 2>/dev/null; then
|
||||||
|
local VERSION_NUM
|
||||||
|
VERSION_NUM="$(nvm_echo "${VERSION}" | command awk '{print $1}')"
|
||||||
|
if ! nvm_echo "${VERSION_NUM}" | nvm_grep -q "${PATTERN}"; then
|
||||||
|
VERSION='N/A'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "${NVM_VERSION_ONLY-}" ]; then
|
if [ -n "${NVM_VERSION_ONLY-}" ]; then
|
||||||
command awk 'BEGIN {
|
command awk 'BEGIN {
|
||||||
n = split(ARGV[1], a);
|
n = split(ARGV[1], a);
|
||||||
@@ -969,13 +978,18 @@ nvm_strip_path() {
|
|||||||
nvm_err '${NVM_DIR} not set!'
|
nvm_err '${NVM_DIR} not set!'
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: '
|
local RESULT
|
||||||
|
RESULT="$(command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: '
|
||||||
index($0, NVM_DIR) == 1 {
|
index($0, NVM_DIR) == 1 {
|
||||||
path = substr($0, length(NVM_DIR) + 1)
|
path = substr($0, length(NVM_DIR) + 1)
|
||||||
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
|
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
|
||||||
}
|
}
|
||||||
# The final RT will contain a colon if the input has a trailing colon, or a null string otherwise
|
{ printf "%s%s", sep, $0; sep=RS }')"
|
||||||
{ printf "%s%s", sep, $0; sep=RS } END { printf "%s", RT }'
|
# mawk does not support RT, so preserve trailing colon manually
|
||||||
|
case "${1-}" in
|
||||||
|
*:) command printf '%s:' "${RESULT}" ;;
|
||||||
|
*) command printf '%s' "${RESULT}" ;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_change_path() {
|
nvm_change_path() {
|
||||||
@@ -1294,7 +1308,7 @@ nvm_alias() {
|
|||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
command awk 'NF' "${NVM_ALIAS_PATH}"
|
command sed 's/#.*//; s/[[:space:]]*$//' "${NVM_ALIAS_PATH}" | command awk 'NF'
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_ls_current() {
|
nvm_ls_current() {
|
||||||
@@ -1529,7 +1543,7 @@ nvm_ls() {
|
|||||||
PATTERN='v'
|
PATTERN='v'
|
||||||
SEARCH_PATTERN='.*'
|
SEARCH_PATTERN='.*'
|
||||||
else
|
else
|
||||||
SEARCH_PATTERN="$(nvm_echo "${PATTERN}" | command sed 's#\.#\\\.#g;')"
|
SEARCH_PATTERN="$(nvm_echo "${PATTERN}" | command sed 's#\.#\\\.#g; s|#|\\#|g')"
|
||||||
fi
|
fi
|
||||||
if [ -n "${NVM_DIRS_TO_SEARCH1}${NVM_DIRS_TO_SEARCH2}${NVM_DIRS_TO_SEARCH3}" ]; then
|
if [ -n "${NVM_DIRS_TO_SEARCH1}${NVM_DIRS_TO_SEARCH2}${NVM_DIRS_TO_SEARCH3}" ]; then
|
||||||
VERSIONS="$(command find "${NVM_DIRS_TO_SEARCH1}"/* "${NVM_DIRS_TO_SEARCH2}"/* "${NVM_DIRS_TO_SEARCH3}"/* -name . -o -type d -prune -o -path "${PATTERN}*" \
|
VERSIONS="$(command find "${NVM_DIRS_TO_SEARCH1}"/* "${NVM_DIRS_TO_SEARCH2}"/* "${NVM_DIRS_TO_SEARCH3}"/* -name . -o -type d -prune -o -path "${PATTERN}*" \
|
||||||
@@ -2633,18 +2647,24 @@ nvm_install_source() {
|
|||||||
NVM_OS="$(nvm_get_os)"
|
NVM_OS="$(nvm_get_os)"
|
||||||
|
|
||||||
local make
|
local make
|
||||||
make='make'
|
|
||||||
local MAKE_CXX
|
local MAKE_CXX
|
||||||
|
# For old Node.js versions (< 0.12), explicitly set SHELL=/bin/sh to avoid
|
||||||
|
# issues with zsh's strict glob handling in Makefiles with unquoted globs
|
||||||
|
local MAKE_SHELL_OVERRIDE
|
||||||
|
if nvm_version_greater "0.12.0" "${VERSION}"; then
|
||||||
|
MAKE_SHELL_OVERRIDE=' SHELL=/bin/sh'
|
||||||
|
fi
|
||||||
|
make="make${MAKE_SHELL_OVERRIDE-}"
|
||||||
case "${NVM_OS}" in
|
case "${NVM_OS}" in
|
||||||
'freebsd' | 'openbsd')
|
'freebsd' | 'openbsd')
|
||||||
make='gmake'
|
make="gmake${MAKE_SHELL_OVERRIDE-}"
|
||||||
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
|
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
|
||||||
;;
|
;;
|
||||||
'darwin')
|
'darwin')
|
||||||
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
|
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
|
||||||
;;
|
;;
|
||||||
'aix')
|
'aix')
|
||||||
make='gmake'
|
make="gmake${MAKE_SHELL_OVERRIDE-}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to "$(nvm_clang_version)" 3.5; then
|
if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to "$(nvm_clang_version)" 3.5; then
|
||||||
@@ -2985,7 +3005,8 @@ nvm_check_file_permissions() {
|
|||||||
if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}"; then
|
if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}"; then
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ]; then
|
elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ -z "$(command find "${FILE}" -prune -user "$(command id -u)")" ]; then
|
||||||
|
# ^ file ownership check from https://www.shellcheck.net/wiki/SC3067
|
||||||
nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
|
nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -4514,9 +4535,9 @@ nvm_get_default_packages() {
|
|||||||
NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
|
NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
|
||||||
if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
|
if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
|
||||||
command awk -v filename="${NVM_DEFAULT_PACKAGE_FILE}" '
|
command awk -v filename="${NVM_DEFAULT_PACKAGE_FILE}" '
|
||||||
/^[[:space:]]*#/ { next } # Skip lines that begin with #
|
/^[ \t]*#/ { next } # Skip lines that begin with #
|
||||||
/^[[:space:]]*$/ { next } # Skip empty lines
|
/^[ \t]*$/ { next } # Skip empty lines
|
||||||
/[[:space:]]/ && !/^[[:space:]]*#/ {
|
/[ \t]/ && !/^[ \t]*#/ {
|
||||||
print "Only one package per line is allowed in `" filename "`. Please remove any lines with multiple space-separated values." > "/dev/stderr"
|
print "Only one package per line is allowed in `" filename "`. Please remove any lines with multiple space-separated values." > "/dev/stderr"
|
||||||
err = 1
|
err = 1
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -45,9 +45,9 @@
|
|||||||
"dockerfile_lint": "^0.3.4",
|
"dockerfile_lint": "^0.3.4",
|
||||||
"doctoc": "^2.2.1",
|
"doctoc": "^2.2.1",
|
||||||
"eclint": "^2.8.1",
|
"eclint": "^2.8.1",
|
||||||
"markdown-link-check": "^3.13.7",
|
"markdown-link-check": "^3.14.2",
|
||||||
"replace": "^1.2.2",
|
"replace": "^1.2.2",
|
||||||
"semver": "^7.7.1",
|
"semver": "^7.7.3",
|
||||||
"urchin": "^0.0.5"
|
"urchin": "^0.0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ die() { echo "$@" ; exit 1; }
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. "${NVM_DIR}/nvm.sh"
|
\. "${NVM_DIR}/nvm.sh"
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
@@ -14,11 +15,11 @@ fi
|
|||||||
nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed'
|
nvm alias test-stable-1 0.0.2 || die '`nvm alias test-stable-1 0.0.2` failed'
|
||||||
|
|
||||||
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
||||||
EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2)'
|
EXPECTED_OUTPUT='test-stable-1 -> 0.0.2 (-> v0.0.2 *)'
|
||||||
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '$OUTPUT'"
|
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2: got '$OUTPUT'"
|
||||||
|
|
||||||
nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed'
|
nvm alias test-stable-1 0.0.1 || die '`nvm alias test-stable-1 0.0.1` failed'
|
||||||
|
|
||||||
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
OUTPUT="$(nvm alias test-stable-1 | strip_colors)"
|
||||||
EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1)'
|
EXPECTED_OUTPUT='test-stable-1 -> 0.0.1 (-> v0.0.1 *)'
|
||||||
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '$OUTPUT'"
|
echo "$OUTPUT" | \grep -F "$EXPECTED_OUTPUT" || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1: got '$OUTPUT'"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
[ $(nvm alias test-stable-1 | wc -l) = '2' ]
|
[ $(nvm alias test-stable-1 | wc -l) = '2' ]
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
@@ -9,18 +10,18 @@ NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
|||||||
|
|
||||||
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
|
EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)"
|
||||||
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
|
STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "stable -> $EXPECTED_STABLE (-> $STABLE_VERSION) (default)" \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F "stable -> $EXPECTED_STABLE (-> $STABLE_VERSION *) (default)" \
|
||||||
|| die "nvm alias did not contain the default local stable node version; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the default local stable node version; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "node -> stable (-> $STABLE_VERSION) (default)" \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F "node -> stable (-> $STABLE_VERSION *) (default)" \
|
||||||
|| die "nvm alias did not contain the default local stable node version under 'node'; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the default local stable node version under 'node'; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)"
|
EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)"
|
||||||
UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")"
|
UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION) (default)" \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F "unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION *) (default)" \
|
||||||
|| die "nvm alias did not contain the default local unstable node version; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the default local unstable node version; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
EXPECTED_IOJS="$(nvm_print_implicit_alias local iojs)"
|
EXPECTED_IOJS="$(nvm_print_implicit_alias local iojs)"
|
||||||
IOJS_VERSION="$(nvm_version "$EXPECTED_IOJS")"
|
IOJS_VERSION="$(nvm_version "$EXPECTED_IOJS")"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F "iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION) (default)" \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F "iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION *) (default)" \
|
||||||
|| die "nvm alias did not contain the default local iojs version; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the default local iojs version; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
@@ -34,16 +35,16 @@ nvm alias iojs unstable
|
|||||||
|
|
||||||
NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
NVM_ALIAS_OUTPUT=$(nvm alias | strip_colors)
|
||||||
|
|
||||||
echo "$NVM_ALIAS_OUTPUT" | command grep -F "stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION)" \
|
echo "$NVM_ALIAS_OUTPUT" | command grep -F "stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION *)" \
|
||||||
|| die "nvm alias did not contain the overridden 'stable' alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the overridden 'stable' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
echo "$NVM_ALIAS_OUTPUT" | command grep -F "unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION)" \
|
echo "$NVM_ALIAS_OUTPUT" | command grep -F "unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION *)" \
|
||||||
|| die "nvm alias did not contain the overridden 'unstable' alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the overridden 'unstable' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
echo "$NVM_ALIAS_OUTPUT" | command grep -F "node -> stable (-> $UNSTABLE_VERSION)" \
|
echo "$NVM_ALIAS_OUTPUT" | command grep -F "node -> stable (-> $UNSTABLE_VERSION *)" \
|
||||||
|| die "nvm alias did not contain the overridden 'node' alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the overridden 'node' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
echo "$NVM_ALIAS_OUTPUT" | command grep -F "iojs -> unstable (-> $STABLE_VERSION)" \
|
echo "$NVM_ALIAS_OUTPUT" | command grep -F "iojs -> unstable (-> $STABLE_VERSION *)" \
|
||||||
|| die "nvm alias did not contain the overridden 'iojs' alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "nvm alias did not contain the overridden 'iojs' alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|||||||
@@ -1,48 +1,49 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
NVM_ALIAS_OUTPUT="$(nvm alias | strip_colors)"
|
NVM_ALIAS_OUTPUT="$(nvm alias | strip_colors)"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-1 -> 0.0.1 (-> v0.0.1)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-1 -> 0.0.1 (-> v0.0.1 *)' \
|
||||||
|| die "did not find test-stable-1 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-1 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-2 -> 0.0.2 (-> v0.0.2)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-2 -> 0.0.2 (-> v0.0.2 *)' \
|
||||||
|| die "did not find test-stable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-3 -> 0.0.3 (-> v0.0.3)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-3 -> 0.0.3 (-> v0.0.3 *)' \
|
||||||
|| die "did not find test-stable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-4 -> 0.0.4 (-> v0.0.4)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-4 -> 0.0.4 (-> v0.0.4 *)' \
|
||||||
|| die "did not find test-stable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-5 -> 0.0.5 (-> v0.0.5)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-5 -> 0.0.5 (-> v0.0.5 *)' \
|
||||||
|| die "did not find test-stable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-6 -> 0.0.6 (-> v0.0.6)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-6 -> 0.0.6 (-> v0.0.6 *)' \
|
||||||
|| die "did not find test-stable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-7 -> 0.0.7 (-> v0.0.7)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-7 -> 0.0.7 (-> v0.0.7 *)' \
|
||||||
|| die "did not find test-stable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-8 -> 0.0.8 (-> v0.0.8)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-8 -> 0.0.8 (-> v0.0.8 *)' \
|
||||||
|| die "did not find test-stable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-9 -> 0.0.9 (-> v0.0.9)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-9 -> 0.0.9 (-> v0.0.9 *)' \
|
||||||
|| die "did not find test-stable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-10 -> 0.0.10 (-> v0.0.10)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-stable-10 -> 0.0.10 (-> v0.0.10 *)' \
|
||||||
|| die "did not find test-stable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-stable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-1 -> 0.1.1 (-> v0.1.1)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-1 -> 0.1.1 (-> v0.1.1 *)' \
|
||||||
|| die "did not find test-unstable-1 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-1 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-2 -> 0.1.2 (-> v0.1.2)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-2 -> 0.1.2 (-> v0.1.2 *)' \
|
||||||
|| die "did not find test-unstable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-2 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-3 -> 0.1.3 (-> v0.1.3)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-3 -> 0.1.3 (-> v0.1.3 *)' \
|
||||||
|| die "did not find test-unstable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-3 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-4 -> 0.1.4 (-> v0.1.4)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-4 -> 0.1.4 (-> v0.1.4 *)' \
|
||||||
|| die "did not find test-unstable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-4 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-5 -> 0.1.5 (-> v0.1.5)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-5 -> 0.1.5 (-> v0.1.5 *)' \
|
||||||
|| die "did not find test-unstable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-5 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-6 -> 0.1.6 (-> v0.1.6)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-6 -> 0.1.6 (-> v0.1.6 *)' \
|
||||||
|| die "did not find test-unstable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-6 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-7 -> 0.1.7 (-> v0.1.7)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-7 -> 0.1.7 (-> v0.1.7 *)' \
|
||||||
|| die "did not find test-unstable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-7 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-8 -> 0.1.8 (-> v0.1.8)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-8 -> 0.1.8 (-> v0.1.8 *)' \
|
||||||
|| die "did not find test-unstable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-8 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-9 -> 0.1.9 (-> v0.1.9)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-9 -> 0.1.9 (-> v0.1.9 *)' \
|
||||||
|| die "did not find test-unstable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-9 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-10 -> 0.1.10 (-> v0.1.10)' \
|
echo "$NVM_ALIAS_OUTPUT" | \grep -F 'test-unstable-10 -> 0.1.10 (-> v0.1.10 *)' \
|
||||||
|| die "did not find test-unstable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
|| die "did not find test-unstable-10 alias; got '$NVM_ALIAS_OUTPUT'"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../../nvm.sh
|
\. ../../../../nvm.sh
|
||||||
|
|
||||||
ALIAS="$(nvm_resolve_alias loopback | strip_colors)"
|
ALIAS="$(nvm_resolve_alias loopback | strip_colors)"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../../nvm.sh
|
\. ../../../../nvm.sh
|
||||||
|
|
||||||
ALIAS="$(nvm_resolve_local_alias loopback | strip_colors)"
|
ALIAS="$(nvm_resolve_local_alias loopback | strip_colors)"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../../nvm.sh
|
\. ../../../../nvm.sh
|
||||||
\. ../../../common.sh
|
\. ../../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../../nvm.sh
|
\. ../../../../nvm.sh
|
||||||
|
|
||||||
LTS_ALIAS_PATH="$(nvm_alias_path)/lts"
|
LTS_ALIAS_PATH="$(nvm_alias_path)/lts"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../../nvm.sh
|
\. ../../../../nvm.sh
|
||||||
|
|
||||||
LTS_ALIAS_PATH="$(nvm_alias_path)/lts"
|
LTS_ALIAS_PATH="$(nvm_alias_path)/lts"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm alias default 0.1 >/dev/null || die "'nvm alias default 0.1' failed"
|
nvm alias default 0.1 >/dev/null || die "'nvm alias default 0.1' failed"
|
||||||
@@ -13,7 +14,7 @@ nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing def
|
|||||||
nvm unalias default || die "'nvm unalias default' failed"
|
nvm unalias default || die "'nvm unalias default' failed"
|
||||||
|
|
||||||
OUTPUT="$(nvm_ensure_default_set 0.2)"
|
OUTPUT="$(nvm_ensure_default_set 0.2)"
|
||||||
EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)"
|
EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10 *)"
|
||||||
EXIT_CODE="$?"
|
EXIT_CODE="$?"
|
||||||
|
|
||||||
[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
[ "_$(echo "$OUTPUT" | strip_colors)" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'"
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
nvm_get_colors(){
|
nvm_get_colors(){
|
||||||
echo "0;95m"
|
echo "0;95m"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
@@ -10,6 +11,8 @@ die () {
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
nvm_get_colors(){
|
nvm_get_colors(){
|
||||||
echo "0;95m"
|
echo "0;95m"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
@@ -8,6 +9,9 @@ die () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
# # # expecting in red and two grays:
|
# # # expecting in red and two grays:
|
||||||
OUTPUT=$(echo $(nvm_print_formatted_alias fakealias fakedest) | awk '{ print substr($0, 1, 21); }')
|
OUTPUT=$(echo $(nvm_print_formatted_alias fakealias fakedest) | awk '{ print substr($0, 1, 21); }')
|
||||||
EXPECTED_OUTPUT="$(command printf %b "\033[0;31mfakealias\033[0m ")"
|
EXPECTED_OUTPUT="$(command printf %b "\033[0;31mfakealias\033[0m ")"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ die () { echo "$@" ; exit 1; }
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. "${NVM_DIR}/nvm.sh"
|
\. "${NVM_DIR}/nvm.sh"
|
||||||
|
|
||||||
EXIT_CODE=$(nvm_resolve_alias ; echo $?)
|
EXIT_CODE=$(nvm_resolve_alias ; echo $?)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
EXIT_CODE=$(nvm_resolve_local_alias ; echo $?)
|
EXIT_CODE=$(nvm_resolve_local_alias ; echo $?)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm which nonexistent_version
|
nvm which nonexistent_version
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm ls nonexistent_version
|
nvm ls nonexistent_version
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm ls io
|
nvm ls io
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm ls node_
|
nvm ls node_
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../../.. && pwd)"
|
export NVM_DIR="$(cd ../../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -ex
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../.. && pwd)"
|
export NVM_DIR="$(cd ../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm alias test v0.1.2
|
nvm alias test v0.1.2
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ die () { echo "$@" ; exit 1; }
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../.. && pwd)"
|
export NVM_DIR="$(cd ../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm deactivate 2>&1
|
nvm deactivate 2>&1
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ die () { echo "$@" ; exit 1; }
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../.. && pwd)"
|
export NVM_DIR="$(cd ../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ cleanup () {
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../.. && pwd)"
|
export NVM_DIR="$(cd ../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ die () { echo "$@" ; exit 1; }
|
|||||||
|
|
||||||
export NVM_DIR="$(cd ../.. && pwd)"
|
export NVM_DIR="$(cd ../.. && pwd)"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
set +ex # needed for stderr
|
set +ex # needed for stderr
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ ALIAS_PATH="../../alias"
|
|||||||
|
|
||||||
echo v0.1.2 > "${ALIAS_PATH}/test"
|
echo v0.1.2 > "${ALIAS_PATH}/test"
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm unalias test
|
nvm unalias test
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ 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_ | grep -v TRAVIS_ | sort >> "${BEFORE}"
|
||||||
|
|
||||||
set +e # TODO: fix
|
set +e # TODO: fix
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ cleanup() {
|
|||||||
rm -rf "$(nvm_alias_path)/foo"
|
rm -rf "$(nvm_alias_path)/foo"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm_make_alias foo foo
|
nvm_make_alias foo foo
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ cleanup() {
|
|||||||
rm -rf "$(nvm_version_path "iojs-${VERSION}")"
|
rm -rf "$(nvm_version_path "iojs-${VERSION}")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm deactivate || die "unable to deactivate; current: >$(nvm current)<"
|
nvm deactivate || die "unable to deactivate; current: >$(nvm current)<"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ cleanup() {
|
|||||||
}
|
}
|
||||||
die() { echo "$@" ; cleanup ; exit 1; }
|
die() { echo "$@" ; cleanup ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm_has_system_node() { return 0; }
|
nvm_has_system_node() { return 0; }
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
export NVM_SYMLINK_CURRENT=true
|
export NVM_SYMLINK_CURRENT=true
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
\. ../common.sh
|
\. ../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ cleanup() {
|
|||||||
rm .nvmrc
|
rm .nvmrc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
# normal .nvmrc
|
# normal .nvmrc
|
||||||
|
|||||||
25
test/fast/Running 'nvm-exec' should display required node version
Executable file
25
test/fast/Running 'nvm-exec' should display required node version
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
: nvm.sh
|
||||||
|
\. ../../nvm.sh
|
||||||
|
|
||||||
|
cleanup() { rm -f .nvmrc; }
|
||||||
|
|
||||||
|
die () { echo "$@" ; cleanup ; exit 1; }
|
||||||
|
|
||||||
|
NVM_TEST_VERSION=v0.42
|
||||||
|
|
||||||
|
# Write it to nvmrc
|
||||||
|
echo "$NVM_TEST_VERSION" > .nvmrc
|
||||||
|
|
||||||
|
OUTPUT="$(../../nvm-exec 2>&1)";
|
||||||
|
EXPECTED="N/A: version \"${NVM_TEST_VERSION}\" is not yet installed.
|
||||||
|
|
||||||
|
You need to run \`nvm install ${NVM_TEST_VERSION}\` to install and use it.
|
||||||
|
No NODE_VERSION provided; no .nvmrc file found";
|
||||||
|
|
||||||
|
# Skip install, we want to test the error message
|
||||||
|
[ "${EXPECTED}" = "${OUTPUT}" ] || die "expected >${EXPECTED}<, got >${OUTPUT}<"
|
||||||
|
|
||||||
|
cleanup
|
||||||
@@ -11,6 +11,7 @@ cleanup() {
|
|||||||
echo "Tested nvm_echo_with_colors"
|
echo "Tested nvm_echo_with_colors"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
OUTPUT="$(nvm_echo_with_colors "\033[0;36mCyan-colored text")"
|
OUTPUT="$(nvm_echo_with_colors "\033[0;36mCyan-colored text")"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ cleanup() {
|
|||||||
echo "Tested nvm_err_with_colors"
|
echo "Tested nvm_err_with_colors"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
set +ex
|
set +ex
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
@@ -10,6 +11,8 @@ die () {
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
nvm_get_colors(){
|
nvm_get_colors(){
|
||||||
echo "0;95m"
|
echo "0;95m"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
set -e
|
#set -e #nvm use system returns 127 and No system set message
|
||||||
|
|
||||||
die () {
|
die () {
|
||||||
# echo "$@" ;
|
# echo "$@" ;
|
||||||
@@ -21,10 +22,12 @@ if [ -n ${NVM_COLORS} ]; then
|
|||||||
unset NVM_COLORS
|
unset NVM_COLORS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
# default system color
|
# default system color
|
||||||
nvm use system
|
nvm use system
|
||||||
OUTPUT=$(nvm_print_versions system)
|
OUTPUT=$(nvm_print_versions system)
|
||||||
FORMAT="\033[0;32m-> %12s\033[0m"
|
FORMAT="\033[0;33m%15s\033[0m"
|
||||||
VERSION='system'
|
VERSION='system'
|
||||||
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
||||||
|
|
||||||
@@ -34,7 +37,7 @@ nvm_ls_current() { echo "current";}
|
|||||||
|
|
||||||
# default current color
|
# default current color
|
||||||
OUTPUT=$(nvm_print_versions current)
|
OUTPUT=$(nvm_print_versions current)
|
||||||
FORMAT="\033[0;32m-> %12s\033[0m"
|
FORMAT="\033[0;32m->%13s\033[0m"
|
||||||
VERSION="current"
|
VERSION="current"
|
||||||
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
||||||
|
|
||||||
@@ -43,7 +46,7 @@ EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
|||||||
# custom current color
|
# custom current color
|
||||||
nvm set-colors YCMGR
|
nvm set-colors YCMGR
|
||||||
OUTPUT=$(nvm_print_versions current)
|
OUTPUT=$(nvm_print_versions current)
|
||||||
FORMAT="\033[1;35m-> %12s\033[0m"
|
FORMAT="\033[1;35m->%13s\033[0m"
|
||||||
VERSION="current"
|
VERSION="current"
|
||||||
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
EXPECTED_OUTPUT=$(command printf -- "${FORMAT}\\n" "${VERSION}")
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
nvm
|
nvm
|
||||||
|
|||||||
@@ -3,5 +3,6 @@
|
|||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
set -- yes
|
set -- yes
|
||||||
|
: nvm.sh
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
[ "$1" = yes ]
|
[ "$1" = yes ]
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm_install_source() {
|
nvm_install_source() {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () { echo "$@" ; exit 1; }
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ cleanup() {
|
|||||||
mv "${NVM_DIR}/alias/lts-backup" "${NVM_DIR}/alias/lts"
|
mv "${NVM_DIR}/alias/lts-backup" "${NVM_DIR}/alias/lts"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
if [ -n "${NVM_COLORS-}" ]; then
|
if [ -n "${NVM_COLORS-}" ]; then
|
||||||
export TEMP_NVM_COLORS=NVM_COLORS
|
export TEMP_NVM_COLORS=NVM_COLORS
|
||||||
@@ -32,6 +33,8 @@ printf '%s\n' "$(cat "${LTS_NAMES_PATH}" | tail -n +1)" | while IFS= read -r LTS
|
|||||||
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
cp "${NVM_DIR}/alias/lts-backup/${LTS}" "${NVM_DIR}/alias/lts/"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
|
|
||||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
||||||
|
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
@@ -66,12 +69,14 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
|||||||
INDEX=$(($INDEX + 1))
|
INDEX=$(($INDEX + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
|
nvm_has_colors() { return 1; }
|
||||||
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
|
OUTPUT="$(nvm ls-remote lts/ARGON 2>&1)"
|
||||||
EXIT_CODE=$?
|
EXIT_CODE=$?
|
||||||
|
nvm_has_colors() { return 0; }
|
||||||
[ $EXIT_CODE -eq 3 ] || die "nvm ls-remote lts/ARGON did not exit 3, got '${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
|
EXPECTED_OUTPUT="LTS names must be lowercase
|
||||||
N/A"
|
N/A *"
|
||||||
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/ARGON did not output expected error message; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
[ "_${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"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ cleanup() {
|
|||||||
unset TEMP_NVM_COLORS
|
unset TEMP_NVM_COLORS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
: nvm.sh
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
# NVM_COLORS is not set
|
# NVM_COLORS is not set
|
||||||
if [ -n ${NVM_COLORS} ]; then
|
if [ -n ${NVM_COLORS} ]; then
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user