Cyrille Perois
Lead front-end developer @ Wandi Teaches front-end development @ IUT Paris Descartes
Paris JS #73
25/04/2018
Respecter SemVer (presque) sans avoir à y penser avec semantic-release
X.Y.Z
Major
Minor
Patch
Breaking
Feature
1.0.0
1.0.1
1.1.0
2.0.0
Fix d'un bug
Ajout d'une feature, sans modification de l'API existante
Modification de l'API
SemVer est un contrat que vous signez avec vos utilisateurs, une forme de respect qui leur permet d'adapter leur code ou non en fonction des versions que vous proposez.
-- « SemVer, c'est quoi ? », putaindecode.io
Incrémente X, Y ou Z dans le package.json; crée un commit de version et un tag
$ npm version [major | minor | patch]
Envoie les fichiers du module sur le registry npm
$ npm publish
🤔
Major ?
Minor ?
Patch ?
Breaking or not breaking ?
MEH.
La publication sur npm n'est qu'une petite partie du processus de release
📦🚀 semantic-release
Fully automated version management and package publishing
$ npm install -g semantic-release-cli $ semantic-release-cli setup
Push sur la
« release branch »
Build CI
Tests
Release
La publication d'une nouvelle release ne nécessite plus d'autre action humaine qu'un git push
=> Comment la machine peut deviner le sens de mes commits ?
type(scope): subject body footer
type
: feat / fix / chore / refactor / perf / style / test...
scope
: décrit la partie du code à laquelle les changements s'appliquent
subject
: description succinte des changements
: description longue des changements
: références, breaking changes
feat(pencil): add 'graphiteWidth' option
fix(graphite): stop graphite breaking when width < 0.1 Closes #28
perf(pencil): remove graphiteWidth option BREAKING CHANGE: The graphiteWidth option has been removed. The default graphite width of 10mm is always used for performance reason.
Patch release
Minor release
Major release
😍👍💕
En utilisant semantic-release, vous mettez en place de bonnes pratiques, et celles-ci vous permettent d'automatiser entièrement votre processus de release.
Pourquoi se priver ?
semantic-release est pré-configuré pour faire des releases sur npm et Github, mais chaque étape du processus est un plugin et tout est configurable. Il est donc possible de faire des releases sur n'importe quelle plateforme et/ou de personnaliser le processus de release.
By Cyrille Perois