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.
- 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.
- Acesse npmjs.com e faça login.
- Vá em Account > Access Tokens.
- Crie um novo token do tipo Automation (recomendado para CI/CD).
- Copie o token gerado.
- 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.
A branch principal (main
) será protegida, mas permitiremos que o GitHub Actions faça alterações diretas.
- No repositório GitHub, vá em Settings > Branches.
- Na seção "Branch protection rules", clique em Add rule (ou edite a regra existente para
main
). - 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]
).
- Branch name pattern:
- 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.
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 }}