Skip to main content

Esta versão do GitHub Enterprise foi descontinuada em 2023-01-18. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, segurança aprimorada e novos recursos, atualize para a última versão do GitHub Enterprise. Para obter ajuda com a atualização, entre em contato com o suporte do GitHub Enterprise.

Publicar pacotes do Node.js

Você pode publicar pacotes do Node.js em um registro como parte do seu fluxo de trabalho de integração contínua (CI).

Observação: no momento, não há suporte para os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.

Introdução

Este guia mostra como criar um fluxo de trabalho que publica pacotes do Node.js em GitHub Packages e nos registros npm após os testes de integração contínua (CI) serem aprovados.

Pré-requisitos

Recomendamos que você tenha um entendimento básico das opções de configuração do fluxo de trabalho e de como criar um arquivo do fluxo de trabalho. Para obter mais informações, confira "Aprenda a usar o GitHub Actions".

Para obter mais informações sobre como criar um fluxo de trabalho de CI para seu projeto Node.js, confira "Usar Node.js com GitHub Actions".

Você também pode achar útil ter um entendimento básico do seguinte:

Sobre a configuração do pacote

Os campos name e version no arquivo package.json criam um identificador exclusivo que os registros usam para vincular seu pacote a um registro. Você pode adicionar um resumo para a página de listagem de pacotes incluindo um campo description no arquivo package.json. Para obter mais informações, confira "Criar um arquivo package.json" e "Criar módulos Node.js" na documentação npm.

Quando um arquivo .npmrc local existe e tem um valor especificado registry, o comando npm publish usa o registro configurado no arquivo .npmrc. Você pode usar a ação setup-node para criar um arquivo .npmrc local no executor que configura o registro e o escopo padrão. A ação setup-node também aceita um token de autenticação como entrada, usado para acessar registros privados ou publicar pacotes de nós. Para obter mais informações, confira setup-node.

Você pode especificar a versão do Node.js instalada no executor usando a ação setup-node.

Se você adicionar etapas ao seu fluxo de trabalho para configurar os campos publishConfig no seu arquivo package.json, você não precisará especificar o registry-url usando a ação de setup-node. No entanto, você estará limitado à publicação do pacote em um registro. Para obter mais informações, confira "publishConfig" na documentação do npm.

Publicar pacotes no registro npm

Cada vez que você criar uma nova versão, você poderá acionar um fluxo de trabalho para publicar o seu pacote. O fluxo de trabalho no exemplo abaixo é executado quando o evento release é disparado com o tipo created. O fluxo de trabalho publica o pacote no registro npm se o teste de CI for aprovado.

Para executar operações autenticadas para o registro npm em seu fluxo de trabalho, você precisará armazenar seu token de autenticação npm como um segredo. Por exemplo, crie um segredo do repositório chamado NPM_TOKEN. Para obter mais informações, confira "Como criar e usar segredos criptografados".

Por padrão, o npm usa o campo name do arquivo package.json para determinar o nome do seu pacote publicado. Ao publicar em um namespace global, você precisa incluir apenas o nome do pacote. Por exemplo, você publicaria um pacote nomeado npm-hello-world-test para https://www.npmjs.com/package/npm-hello-world-test.

Se você estiver publicando um pacote que inclui um prefixo de escopo, inclua o escopo no nome do arquivo package.json. Por exemplo, se o prefixo do escopo do npm for octocat e o nome do pacote for hello-world, o name no seu arquivo package.json deverá ser @octocat/hello-world. Se o seu pacote npm usar um prefixo de escopo e for público, você deverá usar a opção npm publish --access public. Essa é uma opção que o npm requer para impedir que alguém publique um pacote privado de forma não intencional.

Este exemplo armazena o segredo NPM_TOKEN na variável de ambiente NODE_AUTH_TOKEN. Quando a ação setup-node cria um arquivo .npmrc, ela faz referência ao token da variável de ambiente NODE_AUTH_TOKEN.

YAML
name: Publish Package to npmjs
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: '16.x'
          registry-url: 'https://registry.npmjs.org'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

No exemplo acima, a ação setup-node cria um arquivo .npmrc no executor com o seguinte conteúdo:

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true

Observe que você precisa definir o registry-url para https://registry.npmjs.org/ no setup-node para configurar corretamente suas credenciais.

Publicar pacotes em GitHub Packages

Cada vez que você criar uma nova versão, você poderá acionar um fluxo de trabalho para publicar o seu pacote. O fluxo de trabalho no exemplo abaixo é executado sempre que o evento release com tipo created ocorre. O fluxo de trabalho publica o pacote em GitHub Packages se o teste de CI for aprovado.

Configurar o repositório de destino

Vincular seu pacote a GitHub Packages usando a chave repository é opcional. Se você optar por não fornecer a chave repository em seu arquivo package.json, então GitHub Packages publicará um pacote no repositório GitHub especificado no campo name do arquivo package.json. Por exemplo, você publicará um pacote chamado @my-org/test no repositório my-org/test do GitHub. Se o url especificado na chave repository for inválido, seu pacote ainda poderá ser publicado, no entanto, ele não será vinculado à origem do repositório conforme o esperado.

Se você fornecer a chave repository no seu arquivo package.json, o repositório nessa chave será usado como o registro de npm de destino para GitHub Packages. Por exemplo, publicar o package.json abaixo resulta em um pacote nomeado my-amazing-package publicado no repositório octocat/my-other-repo GitHub. Após a publicação, somente a origem do repositório é atualizada e o pacote não herda nenhuma permissão do repositório de destino.

{
  "name": "@octocat/my-amazing-package",
  "repository": {
    "type": "git",
    "url": "https://github.com/octocat/my-other-repo.git"
  },

Efetuar a autenticação no repositório de destino

Para realizar operações autenticadas no registro do GitHub Packages em seu fluxo de trabalho, você pode usar o GITHUB_TOKEN. O segredo GITHUB_TOKEN é definido como um token de acesso para o repositório sempre que um trabalho em um fluxo de trabalho é iniciado. Você deve definir as permissões desse token de acesso no arquivo de fluxo de trabalho para permitir acesso de leitura ao escopo contents e acesso de gravação ao escopo packages. Para obter mais informações, confira "Como se autenticar com o GITHUB_TOKEN".

Se quiser publicar seu pacote em um repositório diferente, você deverá usar um personal access token que tenha permissão para gravar em pacotes do repositório de destino. Para obter mais informações, confira "Como criar um personal access token" e "Segredos criptografados."

Fluxo de trabalho de exemplo

Este exemplo armazena o segredo GITHUB_TOKEN na variável de ambiente NODE_AUTH_TOKEN. Quando a ação setup-node cria um arquivo .npmrc, ela faz referência ao token da variável de ambiente NODE_AUTH_TOKEN.

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v2
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v2
        with:
          node-version: '16.x'
          registry-url: 'https://npm.pkg.github.com'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

A ação setup-node cria um arquivo .npmrc no executor. Quando você usa a entrada scope para a ação setup-node, o arquivo .npmrc inclui o prefixo de escopo. Por padrão, a ação setup-node define o escopo no arquivo .npmrc para a conta que contém esse arquivo de fluxo de trabalho.

//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true

Publicar pacotes usando o yarn

Se você usar o gerenciador de pacotes Yarn, você poderá instalar e publicar pacotes usando o Yarn.

YAML
name: Publish Package to npmjs
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: '16.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 }}