Skip to content

Instantly share code, notes, and snippets.

@emersonlaurentino
Created March 31, 2025 13:00
Show Gist options
  • Save emersonlaurentino/b0f34428a3dfc5b4507f466c6664e0ad to your computer and use it in GitHub Desktop.
Save emersonlaurentino/b0f34428a3dfc5b4507f466c6664e0ad to your computer and use it in GitHub Desktop.
Publicando no npm Automaticamente com GitHub Actions

Publicando no npm Automaticamente com GitHub Actions

Este guia explica como configurar um workflow no GitHub Actions para publicar automaticamente um pacote no npm quando um pull request é mergeado na branch principal (main), mesmo com a branch protegida. Ele inclui instruções para configurar o repositório, o workflow e as permissões necessárias.


Pré-requisitos

  • Um repositório GitHub com um projeto Node.js.
  • Um pacote configurado no package.json pronto para publicação no npm.
  • Uma conta no npm com permissões para publicar o pacote.

Configuração Necessária

1. Configurar o Token do npm

  1. Acesse npmjs.com e faça login.
  2. Vá em Account > Access Tokens.
  3. Crie um novo token do tipo Automation (recomendado para CI/CD).
  4. Copie o token gerado.
  5. No repositório GitHub:
    • Vá em Settings > Secrets and variables > Actions.
    • Clique em New repository secret.
    • Nomeie o secret como NPM_TOKEN e cole o token do npm.
    • Salve.

2. Configurar a Branch Protegida

A branch principal (main) será protegida, mas permitiremos que o GitHub Actions faça alterações diretas.

  1. No repositório GitHub, vá em Settings > Branches.
  2. Na seção "Branch protection rules", clique em Add rule (ou edite a regra existente para main).
  3. Configure:
    • Branch name pattern: main
    • Marque Require a pull request before merging.
    • (Opcional) Adicione outras regras como "Require status checks" ou "Require approvals".
    • Role até Allow specified actors to bypass required pull requests:
      • Marque essa opção.
      • Adicione github-actions[bot] como ator permitido.
    • (Opcional) Marque Do not allow bypassing the above settings para evitar que administradores ignorem as regras (não afeta o github-actions[bot]).
  4. Clique em Create (ou Save changes).

Essa configuração permite que o GitHub Actions faça push na main enquanto mantém as proteções para usuários humanos.


Implementação do Workflow

1. Criar o Arquivo de Workflow

Crie um arquivo chamado npm-publish.yml na pasta .github/workflows/ do seu repositório com o seguinte conteúdo:

name: Publish to npm

on:
  pull_request:
    branches:
      - main
    types: [closed]

jobs:
  publish:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18' # Ajuste para a versão do Node.js que você usa
          registry-url: 'https://registry.npmjs.org'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test # Opcional, remova se não houver testes

      - name: Build project
        run: npm run build # Opcional, ajuste ou remova conforme seu projeto

      - name: Version bump and publish
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          npm version patch -m "Bump version to %s [skip ci]"
          git push
          npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment