Lo que lograrás
Configurarás bump automatizado de versiones y generación de changelog dirigida por Conventional Commits.
El mecanismo
El tooling lee mensajes de commit siguiendo el formato Conventional Commits y decide qué tipo de release cortar.
Paso 1: adoptar Conventional Commits
git commit -m "feat(checkout): add Apple Pay support"
git commit -m "fix(auth): handle expired refresh tokens"
git commit -m "chore(deps): bump axios to 1.7.0"
git commit -m "feat!: drop Node 16 support
BREAKING CHANGE: minimum Node version is now 18."
Paso 2: forzar el formato
npm install --save-dev @commitlint/cli @commitlint/config-conventional husky
# commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] };
# .husky/commit-msg
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit $1
Paso 3: instalar tooling de release
# .github/workflows/release-please.yml
name: release-please
on:
push:
branches: [main]
permissions:
contents: write
pull-requests: write
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v4
with:
release-type: node
package-name: my-app
Paso 4: cómo funciona release-please
- Lee commits desde el último tag de release.
- Categoriza por tipo y decide la próxima versión.
- Actualiza
CHANGELOG.mdy la versión enpackage.json. - Abre un "release PR".
Paso 5: disparar el workflow de publish
# .github/workflows/publish.yml
name: publish
on:
push:
tags: ['v*.*.*']
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm run build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Paso 6: alternativa - changesets
npm install --save-dev @changesets/cli
npx changeset init
Paso 7: alternativa - semantic-release
npm install --save-dev semantic-release
# .releaserc.json
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/git"
]
}
Paso 8: pre-releases
git checkout -b beta
git push -u origin beta
Paso 9: escribir buenos mensajes de commit
feat(checkout): add Apple Pay support
Implementa Apple Pay vía la Web Payments API. Cae al flujo
existente de tarjeta si Apple Pay no está disponible. Closes #1234.
Paso 10: manejar squashes
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}