Ce que vous accomplirez
Vous configurerez l'automatisation du bump de version et la génération de changelog dirigées par Conventional Commits.
Le mécanisme
Le tooling lit les messages de commit suivant le format Conventional Commits et décide du type de release à couper.
Étape 1 : adopter 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."
Étape 2 : faire respecter le format
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
Étape 3 : installer le 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
Étape 4 : comment fonctionne release-please
- Lit les commits depuis le dernier tag de release.
- Catégorise par type et décide la prochaine version.
- Met à jour
CHANGELOG.mdet la version danspackage.json. - Ouvre un "release PR".
Étape 5 : déclencher le 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 }}
Étape 6 : alternative - changesets
npm install --save-dev @changesets/cli
npx changeset init
Étape 7 : alternative - 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"
]
}
Étape 8 : pre-releases
git checkout -b beta
git push -u origin beta
Étape 9 : écrire de bons messages de commit
feat(checkout): add Apple Pay support
Implémente Apple Pay via la Web Payments API. Tombe en repli sur le
flux de carte existant si Apple Pay est indisponible. Closes #1234.
Étape 10 : gérer les squashes
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}