2019-08-03 21:49:54 -04:00
# setup-node
2019-08-12 15:10:38 -04:00
< p align = "left" >
2020-05-19 09:57:20 -04:00
< a href = "https://github.com/actions/setup-node/actions?query=workflow%3Abuild-test" > < img alt = "build-test status" src = "https://github.com/actions/setup-node/workflows/build-test/badge.svg" > < / a > < a href = "https://github.com/actions/setup-node/actions?query=workflow%3Aversions" > < img alt = "versions status" src = "https://github.com/actions/setup-node/workflows/versions/badge.svg" > < / a > < a href = "https://github.com/actions/setup-node/actions?query=workflow%3Aproxy" > < img alt = "proxy status" src = "https://github.com/actions/setup-node/workflows/proxy/badge.svg" > < / a >
2019-08-12 15:10:38 -04:00
< / p >
2021-06-25 12:06:49 +03:00
This action provides the following functionality for GitHub Actions users:
2019-08-03 21:49:54 -04:00
2021-06-22 18:32:22 +03:00
- Optionally downloading and caching distribution of the requested Node.js version, and adding it to the PATH
2021-07-15 20:14:30 +01:00
- Optionally caching npm/yarn/pnpm dependencies
2021-06-22 18:32:22 +03:00
- Registering problem matchers for error output
- Configuring authentication for GPR or npm
2019-08-03 21:49:54 -04:00
2021-06-22 18:32:22 +03:00
# Usage
2020-05-19 09:57:20 -04:00
2021-06-22 18:32:22 +03:00
See [action.yml ](action.yml )
2020-05-19 09:57:20 -04:00
2021-06-22 18:32:22 +03:00
**Basic:**
2020-05-19 09:57:20 -04:00
```yaml
steps:
- uses: actions/checkout@v2
2020-12-15 13:36:18 +03:00
- uses: actions/setup-node@v2
2020-05-19 09:57:20 -04:00
with:
2021-02-24 05:21:23 +01:00
node-version: '14'
2021-06-22 18:32:22 +03:00
- run: npm install
- run: npm test
2020-05-19 09:57:20 -04:00
```
2021-09-24 12:11:27 +01:00
The `node-version` input is optional. If not supplied, the following files are checked:
1. `.n-node-version`
2. `.naverc`
3. `.node-version`
4. `.nodeenvrc`
5. `.nvmrc` (accurately [parsing nvm versions ](https://github.com/ehmicky/node-version-alias ))
6. `package.json#engines.node`
and finally the following environment variables:
7. `NODIST_NODE_VERSION`
8. `NODE_VERSION`
9. `DEFAULT_NODE_VERSION`
If none of these are present, finally the node version from PATH will be used. However, it is recommended to always specify Node.js version and don't rely on the system one.
> Behind the scenes, it uses [@ehmicky](https://github.com/ehmicky)'s [`preferred-node-version`](https://www.npmjs.com/package/) 😍.
2020-05-19 09:57:20 -04:00
2021-06-22 18:32:22 +03:00
The action will first check the local cache for a semver match. If unable to find a specific version in the cache, the action will attempt to download a version of Node.js. It will pull LTS versions from [node-versions releases ](https://github.com/actions/node-versions/releases ) and on miss or failure will fall back to the previous behavior of downloading directly from [node dist ](https://nodejs.org/dist/ ).
2020-05-19 09:57:20 -04:00
2021-06-22 18:32:22 +03:00
For information regarding locally cached versions of Node.js on GitHub hosted runners, check out [GitHub Actions Virtual Environments ](https://github.com/actions/virtual-environments ).
2019-08-03 21:49:54 -04:00
2021-06-30 15:07:45 +03:00
#### Supported version syntax
The `node-version` input supports the following syntax:
major versions: `12` , `14` , `16`
more specific versions: `10.15` , `14.2.0` , `16.3.0`
nvm lts syntax: `lts/erbium` , `lts/fermium` , `lts/*`
2021-08-05 12:00:47 +00:00
## Caching packages dependencies
2021-06-22 18:32:22 +03:00
2021-08-05 12:00:47 +00:00
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache ](https://github.com/actions/cache ) under hood for caching dependencies but requires less configuration settings. Supported package managers are `npm` , `yarn` , `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
2021-08-03 17:18:13 +03:00
2021-08-05 12:00:47 +00:00
The action defaults to search for the dependency file (`package-lock.json` or `yarn.lock` ) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
2021-08-03 17:18:13 +03:00
2021-08-05 12:00:47 +00:00
See the examples of using cache for `yarn` / `pnpm` and `cache-dependency-path` input in the [Advanced usage ](docs/advanced-usage.md#caching-packages-dependencies ) guide.
2019-08-03 21:49:54 -04:00
2021-06-30 15:07:45 +03:00
**Caching npm dependencies:**
2019-08-03 21:49:54 -04:00
```yaml
steps:
2020-02-06 14:52:33 -05:00
- uses: actions/checkout@v2
2020-12-15 13:36:18 +03:00
- uses: actions/setup-node@v2
2019-08-03 21:49:54 -04:00
with:
2021-02-24 05:21:23 +01:00
node-version: '14'
2021-06-22 18:32:22 +03:00
cache: 'npm'
2019-08-03 21:49:54 -04:00
- run: npm install
- run: npm test
```
2021-08-05 12:00:47 +00:00
**Caching npm dependencies in monorepos:**
2021-07-15 20:14:30 +01:00
```yaml
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14'
2021-08-05 12:00:47 +00:00
cache: 'npm'
cache-dependency-path: subdir/package-lock.json
- run: npm install
- run: npm test
2021-06-30 16:44:51 +01:00
```
2021-08-05 12:00:47 +00:00
## Matrix Testing:
2019-08-03 21:49:54 -04:00
```yaml
jobs:
build:
2021-06-22 18:32:22 +03:00
runs-on: ubuntu-latest
2019-08-03 21:49:54 -04:00
strategy:
matrix:
2021-06-30 15:07:45 +03:00
node: [ '12', '14', '16' ]
2019-08-03 21:49:54 -04:00
name: Node ${{ matrix.node }} sample
steps:
2020-02-06 14:52:33 -05:00
- uses: actions/checkout@v2
2019-08-03 21:49:54 -04:00
- name: Setup node
2020-12-15 13:36:18 +03:00
uses: actions/setup-node@v2
2019-08-03 21:49:54 -04:00
with:
2019-08-13 16:32:09 -04:00
node-version: ${{ matrix.node }}
2019-08-03 21:49:54 -04:00
- run: npm install
- run: npm test
```
2021-06-22 18:32:22 +03:00
## Advanced usage
1. [Check latest version ](docs/advanced-usage.md#check-latest-version )
2. [Using different architectures ](docs/advanced-usage.md#architecture )
2021-08-02 20:44:59 +03:00
3. [Caching packages dependencies ](docs/advanced-usage.md#caching-packages-dependencies )
4. [Using multiple operating systems and architectures ](docs/advanced-usage.md#multiple-operating-systems-and-architectures )
5. [Publishing to npmjs and GPR with npm ](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-npm )
6. [Publishing to npmjs and GPR with yarn ](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-yarn )
7. [Using private packages ](docs/advanced-usage.md#use-private-packages )
2019-09-10 13:32:30 -04:00
2019-08-03 21:49:54 -04:00
# License
The scripts and documentation in this project are released under the [MIT License ](LICENSE )
# Contributions
Contributions are welcome! See [Contributor's Guide ](docs/contributors.md )
2020-04-16 18:43:02 -04:00
## Code of Conduct
:wave: Be nice. See [our code of conduct ](CONDUCT )