setup-node/README.md

131 lines
5.1 KiB
Markdown
Raw Normal View History

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
- 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
- Registering problem matchers for error output
- Configuring authentication for GPR or npm
2019-08-03 21:49:54 -04:00
# Usage
2020-05-19 09:57:20 -04:00
See [action.yml](action.yml)
2020-05-19 09:57:20 -04: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:
node-version: '14'
- run: npm install
- run: npm test
2020-05-19 09:57:20 -04: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
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
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-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-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-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:
- 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:
node-version: '14'
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:
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:
- 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:
node-version: ${{ matrix.node }}
2019-08-03 21:49:54 -04:00
- run: npm install
- run: npm test
```
## Advanced usage
1. [Check latest version](docs/advanced-usage.md#check-latest-version)
2. [Using different architectures](docs/advanced-usage.md#architecture)
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-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)