Déployer un package sur npm de manière automatisée et en respectant SemVer avec semantic-release

Paris JS #73
25/04/2018

Cyrille Perois

 

@JesmoDrazik

jesmodrazik.fr

 

Développeur front-end @

Respecter SemVer (presque) sans avoir à y penser avec semantic-release

Semantic Versioning

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

Publier un module sur npm

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

Alors, quel est le problème ?

Problème n°1 : vous êtes humains

🤔

Major ?

Minor ?

Patch ?

Breaking or not breaking ?

MEH.

Problème n°2 : une release, ce n'est pas qu'une incrémentation du numéro de version et une publication sur le registry

  • Écrire le changelog
  • Pousser le commit de release et le tag
  • Créer une release github
  • Autre selon votre process (notification...)

Tâches « annexes » :

La publication sur npm n'est qu'une petite partie du processus de release

Problème n°3 : pourquoi attendre n commits pour faire une release ?

AUTOMATISER

Une seule solution :

📦🚀 semantic-release

Fully automated version management and package publishing

Installation

$ 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

Ce que ça apporte ?

  • La possibilité de déterminer le prochain numéro de version automatiquement
  • La génération automatique du changelog
  • Un historique git clair

Démo ?

Démo !

Utilizé semantik-riliz, c b1

😍👍💕

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 ?

Bonus

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.

Merci

Déployer un package sur npm de manière automatisée et en respectant SemVer avec semantic-release

By Cyrille Perois

Déployer un package sur npm de manière automatisée et en respectant SemVer avec semantic-release

  • 821