Nota: GitHub Actions estuvo disponible para GitHub Enterprise Server 2.22 como un beta limitado. El beta terminó. GitHub Actions está ahora disponible habitualmente en GitHub Enterprise Server 3.0 o superior. Para obtener más información, consulta la sección de notas de lanzamiento para GitHub Enterprise Server 3.0.
- Para obtener más información acerca de cómo mejorar a GitHub Enterprise Server 3.0 o superior, consulta la sección "Mejorar a GitHub Enterprise Server".
- Para obtener más información acerca de configurar las GitHub Actions después de tu mejora, consulta la documentación de GitHub Enterprise Server 3.0.
Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.
Introducción
Esta guía te muestra cómo crear un flujo de trabajo que publique paquetes Node.js en el Registro del paquete de GitHub y registros npm después de que se aprueben las pruebas de integración continua (CI). Con un solo flujo de trabajo, puedes publicar paquetes en un solo registro o varios registros.
Prerrequisitos
Te recomendamos que tengas una comprensión básica de las opciones de configuración de flujo de trabajo y cómo crear un archivo de flujo de trabajo. Para obtener más información, consulta la sección "Aprende sobre GitHub Actions".
Para obtener más información acerca de la creación de un flujo de trabajo de CI para tu proyecto Node.js, consulta "Usar Node.js con las GitHub Actions".
También puede ser útil tener un entendimiento básico de lo siguiente:
- "Trabajar con el registro de npm"
- "Variables de ambiente"
- "Secretos cifrados"
- "Autenticación en un flujo de trabajo"
Acerca de la configuración del paquete
Los campos Nombre
y Versión
en el archivo package.json crean un identificador único que los registros usan para vincular tu paquete a un registro. Puedes agregar un resumen para la página de descripción del paquete al incluir un campo Descripción
en el archivo package.json. Para obtener más información, consulta "Crear un archivo package.json y Crear módulos Node.js"en la documentación de npm.
Cuando existe un archivo .npmrc local y tiene un valor especificado de registro
, el comando npm publish
usa el registro configurado en el archivo .npmrc. Puedes utilizar la acción setup-node
para crear un archivo local de tipo .npmrc en el ejecutor que configura el registro y alcance predeterminados. La acción setup-node
también acepta un token de autenticación como entrada, el cual se utiliza para acceder a los registros privados o paquetes de nodo publicados. Para obtener más información, consulta la sección setup-node
.
Puedes especificar la versión de Node.js instalada en el ejecutor utilizando la acción setup-node
.
Si agregas pasos en tu flujo de trabajo para configurar los campos publishConfig
en tu archivo package.json, no es necesario que especifiques la Url del registro utilizando la acción setup-node
, pero se limitará a publicar el paquete en un registro. Para obtener más información, consulta "publishConfig" en la documentación de npm.
Publicar paquetes en el registro npm
Cada vez que creas un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo en el ejemplo a continuación se ejecuta cuando el evento lanzamiento
desencadena con tipo creado
. El flujo de trabajo publica el paquete en el registro npm si se pasan las pruebas de CI.
Para realizar operaciones autenticadas frente al registro npm en tu flujo de trabajo, necesitarás almacenar tu token de autenticación npm como un secreto. Por ejemplo, crea un repositorio secreto que se llame NPM_TOKEN
. Para más información, consulta "Crear y usar secretos cifrados."
Por defecto, npm usa el campo Nombre
del archivo package.json para determinar el registro npm. Al publicar en un espacio de nombres global, solo necesitas incluir el nombre del paquete. Por ejemplo, publicarías un paquete llamado npm-hello-world-test
en https://www.npmjs.com/package/npm-hello-world-test
.
Si estás publicando un paquete que incluye un prefijo de alcance, incluye el ámbito en el nombre de tu archivo package.json. Por ejemplo, si el prefijo del ámbito npm es octocat y el nombre del paquete es hello-world, el nombre
en tu archivo package.json debe ser @octocat/hello-world
. Si su paquete npm usa un prefijo de ámbito y el paquete es público, debes usar la opción npm publish --access public
. Esta es una opción que npm requiere para evitar que alguien publique un paquete privado involuntariamente.
Este ejemplo almacena el secreto NPM_TOKEN
en la variable de entorno NODE_AUTH_TOKEN
. Cuando la acción setup-node
crea un archivo .npmrc, hace referencia al token de la variable de entorno NODE_AUTH_TOKEN
.
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v2
with:
node-version: '12.x'
registry-url: 'https://registry.npmjs.org'
- run: npm install
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
En el ejemplo anterior, la acción setup-node
crea un archivo .npmrc en el ejecutor con el siguiente contenido:
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true
Sube paquetes al Registro del paquete de GitHub
Cada vez que creas un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo en el ejemplo a continuación se ejecuta cada vez que se produce el evento lanzamiento
con tipo creado
. El flujo de trabajo publica el paquete en el Registro del paquete de GitHub si se superan las pruebas de CI.
Configurar el repositorio de destino
Si no proporcionas la clave del repository
en tu archivo package.json, entonces el Registro del paquete de GitHub publicará un paquete en el repositorio de GitHub que especifiques en el campo name
del archivo package.json. Por ejemplo, un paquete denominado @my-org/test
se publicará en el repositorio my-org/test
de GitHub.
Sin embargo, si no proporcionas la clave del repository
, entonces el repositorio en esa clave se utilizará como el registro de npm de destino para el Registro del paquete de GitHub. Por ejemplo, el publicar el siguiente package.json dará como resultado un paquete denominado my-amazing-package
que se publicará en el repositorio octocat/my-other-repo
de GitHub.
{
"name": "@octocat/my-amazing-package",
"repository": {
"type": "git",
"url": "https://github.com/octocat/my-other-repo.git"
},
Autenticarse en el repositorio de destino
Para realizar operaciones autenticadas en el registro Registro del paquete de GitHub de tu flujo de trabajo, puedes utilizar el GITHUB_TOKEN
. El secreto de GITHUB_TOKEN
se configuro para un token de acceso para el repositorio cada vez que comienza un job en un flujo de trabajo. Tiene permisos de lectura y escritura para los paquetes del repositorio en donde se ejecuta el flujo de trabajo. Para obtener más información, consulta la sección "Autenticarte con el GITHUB_TOKEN".
Si quieres publicar tu paquete en un repositorio diferente, debes utilizar un token de acceso personal (PAT) que tenga permisos de escritura en los paquetes del repositorio destino. Para obtener más información, consulta las secciones "Crear un token de acceso personal" y "Secretos cifrados".
Ejemplo de flujo de trabajo
Este ejemplo almacena el secreto GITHUB_TOKEN
en la variable de entorno NODE_AUTH_TOKEN
. Cuando la acción setup-node
crea un archivo .npmrc, hace referencia al token de la variable de entorno NODE_AUTH_TOKEN
.
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v2
with:
node-version: '12.x'
registry-url: 'https://npm.pkg.github.com'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: npm install
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
La acción setup-node
crea un archivo .npmrc en el ejecutor. Cuando utilizas la entrada scope
a la acción setup-node
, el archivo .npmrc incluye el prefijo de alcance. Por defecto, la acción setup-node
establece el ámbito en el archivo .npmrc en la cuenta que contiene ese archivo de flujo de trabajo.
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true
Publicar paquetes mediante yarn
Si usas el gestor de paquetes Yarn, puedes instalar y publicar paquetes mediante Yarn.
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v2
with:
node-version: '12.x'
registry-url: 'https://registry.npmjs.org'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: yarn
- run: yarn publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Publicar paquetes en npm y Registro del paquete de GitHub
Nota: Si necesitas publicar en los registros que tienen diferentes prefijos de ámbito, deberás modificar el archivo package.json en el ejecutor para cambiar el prefijo de ámbito. Por ejemplo, si publicas un paquete en el ámbito @mona
para npm y @octocat
para Registro del paquete de GitHub, puedes reemplazar el ámbito @mona
por @octocat
en el archivo package.json del ejecutor después de publicar en npm y antes de publicar en Registro del paquete de GitHub.
Puedes publicar tus paquetes tanto en el registro npm como en Registro del paquete de GitHub mediante la acción setup-node
para cada registro.
Si publicas un paquete en ambos registros, tendrás que asegurarte de que tu prefijo de ámbito en npm coincida con tu nombre de usuario u organización de GitHub. Para publicar paquetes en un registro público con un prefijo de ámbito, puedes utilizar el comando npm publish --access public
. Para obtener más información, consulta npm-scope
y "Crear y publicar paquetes públicos con ámbitos" en la documentación de npm.
Asegúrate de que tu archivo package.json incluya el ámbito de tu repositorio de GitHub y el registro de npm. Por ejemplo, si planeas publicar un paquete en el repositorio octocat/npm-hello-world-test
en GitHub y https://www.npmjs. om/package/@octocat/npm-hello-world-test, el nombre en tu archivo package.json debería ser "name": "@octocat/npm-hello-world-test"
.
Para realizar operaciones autenticadas en el registro Registro del paquete de GitHub de tu flujo de trabajo, puedes utilizar el GITHUB_TOKEN
. El secreto de GITHUB_TOKEN
se configuro para un token de acceso para el repositorio cada vez que comienza un job en un flujo de trabajo. Tiene permisos de lectura y escritura para los paquetes del repositorio en donde se ejecuta el flujo de trabajo. Para obtener más información, consulta la sección "Autenticarte con el GITHUB_TOKEN".
Cuando utilizas la entrada scope
a la acción setup-node
, la acción crea un archivo .npmrc que incluye el prefijo de alcance. Por defecto, la acción setup-node
establece el ámbito en el archivo .npmrc al usuario u organización que posee el archivo de flujo de trabajo.
Este flujo de trabajo llama a la acción setup-node
dos veces. Cada vez que se ejecuta la acción setup-node
, sobrescribe el archivo .npmrc. El archivo .npmrc hace referencia al token que te permite realizar operaciones autenticadas frente al registro del paquete desde la variable de entorno NODE_AUTH_TOKEN
. El flujo de trabajo establece la variable de entorno NODE_AUTH_TOKEN
cada vez que se ejecuta el comando npm publish
, primero con un token para publicar en el (NPM_TOKEN
) de npm y luego con un token para publicar en el Registro del paquete de GitHub (GITHUB_TOKEN
).
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v2
with:
node-version: '10.x'
registry-url: 'https://registry.npmjs.org'
- run: npm install
# Publish to npm
- run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v2
with:
registry-url: 'https://npm.pkg.github.com'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
# Publish to GitHub Packages
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}