Nota:
Actualmente los ejecutores hospedados por GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.
Introduction
This guide shows you how to create a continuous integration (CI) workflow that builds and tests Node.js code. If your CI tests pass, you may want to deploy your code or publish a package.
Prerequisites
We recommend that you have a basic understanding of Node.js, YAML, workflow configuration options, and how to create a workflow file. For more information, see:
Utilizar ejecutores auto-hospedados en GitHub Enterprise Server
Cuando use acciones de configuración, (como actions/setup-LANGUAGE
) en GitHub Enterprise Server con ejecutores autohospedados, es posible que necesite configurar la caché de herramientas en los ejecutores que no tienen acceso a Internet. Para más información, consulta Configurar el caché de la herramienta en ejecutores auto-hospedados sin acceso a internet.
Using a Node.js workflow template
Para comenzar rápidamente, agregue una plantilla de flujo de trabajo al directorio .github/workflows
del repositorio.
GitHub provides a workflow template for Node.js that should work for most Node.js projects. The subsequent sections of this guide give examples of how you can customize this workflow template.
-
En GitHub, navegue hasta la página principal del repositorio.
-
En el nombre del repositorio, haz clic en Acciones.
-
Si ya tiene un flujo de trabajo en su repositorio, haga clic en New workflow (Nuevo flujo de trabajo).
-
The "Choose a workflow" page shows a selection of recommended workflow templates. Search for "Node.js".
-
Filter the selection of workflows by clicking Continuous integration.
-
On the "Node.js" workflow, click Configure.
If you don't find the "Node.js" workflow template, copy the following workflow code to a new file called
node.js.yml
in the.github/workflows
directory of your repository.YAML name: Node.js CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x, 20.x] # See supported Node.js release schedule at http://nodejs.org/en/about/releases/ steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npm run build --if-present - run: npm test
name: Node.js CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x, 20.x] # See supported Node.js release schedule at http://nodejs.org/en/about/releases/ steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npm run build --if-present - run: npm test
-
Edit the workflow as required. For example, change the Node versions you want to use.
-
Click Commit changes.
Specifying the Node.js version
The easiest way to specify a Node.js version is by using the setup-node
action provided by GitHub. For more information see, setup-node
.
The setup-node
action takes a Node.js version as an input and configures that version on the runner. The setup-node
action finds a specific version of Node.js from the tools cache on each runner and adds the necessary binaries to PATH
, which persists for the rest of the job. Using the setup-node
action is the recommended way of using Node.js with GitHub Actions because it ensures consistent behavior across different runners and different versions of Node.js. If you are using a self-hosted runner, you must install Node.js and add it to PATH
.
The workflow template includes a matrix strategy that builds and tests your code with the Node.js versions listed in node-version
. The 'x' in the version number is a wildcard character that matches the latest minor and patch release available for a version. Each version of Node.js specified in the node-version
array creates a job that runs the same steps.
Each job can access the value defined in the matrix node-version
array using the matrix
context. The setup-node
action uses the context as the node-version
input. The setup-node
action configures each job with a different Node.js version before building and testing code. For more information about matrix strategies and contexts, see Sintaxis del flujo de trabajo para GitHub Actions and Acceso a información contextual sobre ejecuciones de flujo de trabajo.
strategy: matrix: node-version: ['18.x', '20.x'] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}
strategy:
matrix:
node-version: ['18.x', '20.x']
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
Alternatively, you can build and test with exact Node.js versions.
strategy: matrix: node-version: ['10.17.0', '17.9.0']
strategy:
matrix:
node-version: ['10.17.0', '17.9.0']
Or, you can build and test using a single version of Node.js too.
name: Node.js CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - run: npm ci - run: npm run build --if-present - run: npm test
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- run: npm ci
- run: npm run build --if-present
- run: npm test
If you don't specify a Node.js version, GitHub uses the environment's default Node.js version. For more information, see Using GitHub-hosted runners.
Installing dependencies
GitHub-hosted runners have npm and Yarn dependency managers installed. You can use npm and Yarn to install dependencies in your workflow before building and testing your code. The Windows and Linux GitHub-hosted runners also have Grunt, Gulp, and Bower installed.
You can also cache dependencies to speed up your workflow. For more information, see Caching dependencies to speed up workflows.
Example using npm
This example installs the versions in the package-lock.json
or npm-shrinkwrap.json
file and prevents updates to the lock file. Using npm ci
is generally faster than running npm install
. For more information, see npm ci
and Introducing npm ci
for faster, more reliable builds.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - name: Install dependencies run: npm ci
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install dependencies
run: npm ci
Using npm install
installs the dependencies defined in the package.json
file. For more information, see npm install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - name: Install dependencies run: npm install
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install dependencies
run: npm install
Example using Yarn
This example installs the dependencies defined in the yarn.lock
file and prevents updates to the yarn.lock
file. For more information, see yarn install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - name: Install dependencies run: yarn --frozen-lockfile
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install dependencies
run: yarn --frozen-lockfile
Alternatively, you can install the dependencies defined in the package.json
file.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - name: Install dependencies run: yarn
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install dependencies
run: yarn
Example using a private registry and creating the .npmrc file
Puedes usar la acción setup-node
para crear un archivo .npmrc
local en el ejecutor que configure el registro y el ámbito predeterminados. La acción setup-node
también acepta un token de autenticación como entrada, que se usa para acceder a los registros privados o publicar paquetes de nodos. Para más información, vea setup-node
.
To authenticate to your private registry, you'll need to store your npm authentication token as a secret. For example, create a repository secret called NPM_TOKEN
. For more information, see Using secrets in GitHub Actions.
In the example below, the secret NPM_TOKEN
stores the npm authentication token. The setup-node
action configures the .npmrc
file to read the npm authentication token from the NODE_AUTH_TOKEN
environment variable. When using the setup-node
action to create an .npmrc
file, you must set the NODE_AUTH_TOKEN
environment variable with the secret that contains your npm authentication token.
Before installing dependencies, use the setup-node
action to create the .npmrc
file. The action has two input parameters. The node-version
parameter sets the Node.js version, and the registry-url
parameter sets the default registry. If your package registry uses scopes, you must use the scope
parameter. For more information, see npm-scope
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: always-auth: true node-version: '20.x' registry-url: http://registry.npmjs.org scope: '@octocat' - name: Install dependencies run: npm ci env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
always-auth: true
node-version: '20.x'
registry-url: http://registry.npmjs.org
scope: '@octocat'
- name: Install dependencies
run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
The example above creates an .npmrc
file with the following contents:
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=http://registry.npmjs.org/
always-auth=true
Example caching dependencies
You can cache and restore the dependencies using the setup-node
action.
The following example caches dependencies for npm.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - run: npm install - run: npm test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm install
- run: npm test
The following example caches dependencies for Yarn.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'yarn' - run: yarn - run: yarn test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'yarn'
- run: yarn
- run: yarn test
The following example caches dependencies for pnpm (v6.10+).
# Este flujo de trabajo usa acciones que no GitHub no certifica. # Estas las proporcionan entidades terceras y las gobiernan # condiciones de servicio, políticas de privacidad y documentación de soporte # en línea. # NOTE: pnpm caching support requires pnpm version >= 6.10.0 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad with: version: 6.10.0 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'pnpm' - run: pnpm install - run: pnpm test
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad
with:
version: 6.10.0
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- run: pnpm install
- run: pnpm test
If you have a custom requirement or need finer controls for caching, you can use the cache
action. For more information, see Caching dependencies to speed up workflows.
Building and testing your code
You can use the same commands that you use locally to build and test your code. For example, if you run npm run build
to run build steps defined in your package.json
file and npm test
to run your test suite, you would add those commands in your workflow file.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - run: npm install - run: npm run build --if-present - run: npm test
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- run: npm install
- run: npm run build --if-present
- run: npm test
Packaging workflow data as artifacts
You can save artifacts from your build and test steps to view after a job completes. For example, you may need to save log files, core dumps, test results, or screenshots. For more information, see Storing and sharing data from a workflow.
Publishing to package registries
You can configure your workflow to publish your Node.js package to a package registry after your CI tests pass. For more information about publishing to npm and GitHub Packages, see Publishing Node.js packages.