Esta versión de GitHub Enterprise se discontinuó el 2021-09-23. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Publicar paquetes Node.js

Puedes publicar paquetes Node.js en un registro como parte de tu flujo de trabajo de integración continua (CI).

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.


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:

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.

YAML
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.

YAML
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.

YAML
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).

YAML
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 }}