NodeJs bumping: un exemple d'utilisation dans nos projets

Le précédent article "NodeJs et le bumping: déjà présent !" avait pour vocation de montrer la commande "npm version" afin de gérer la gestion de version de nos projets NodeJs. Cette fois-ci, j'aimerai montrer un exemple concret d'usage de cette commande et comment l'automatiser.

J'ai fait un petit projet, "sequelize-mocking", permettant de nous faciliter les tests autour de Sequelize. Et du coup, j'en ai profité pour introduire ces nouvelles commandes. Voici un aperçu du "package.json" avant d'expliquer plus en détail ce que je vais faire:

{
  "name": "sequelize-mocking",
  "version": "0.1.0",
  "description": "A Sequelize extension to deal with mocking for tests",
  "main": ".index.js",
  "files": [
    "index.js",
    "lib",
    "npm-shrinkwrap.json"
  ],
  "scripts": {
    "build-docker": "docker build -t jroche/sequelize-mocking .",
    "build-es5": "npm run delete lib-es5 && node ./node_modules/babel-cli/bin/babel.js lib --presets es2015 --out-dir lib-es5",
    "delete": "node node_modules/rimraf/bin.js",
    "checkstyle": "npm run delete ./target/eslint-reporter-checkstyle.xml && node node_modules/eslint/bin/eslint.js --config=.eslintrc --output-file ./target/eslint-reporter-checkstyle.xml --format checkstyle ./lib",
    "test": "node ./node_modules/mocha/bin/mocha --recursive --ui bdd --colors ./test",
    "test-with-docker": "docker run jroche/sequelize-mocking"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/rochejul/sequelize-mocking.git"
  },
  "keywords": [
    "Sequelize",
    "mocking",
    "fixtures",
    "test",
    "mocha"
  ],
  "author": "Julien Roche",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/rochejul/sequelize-mocking/issues"
  },
  "homepage": "https://github.com/rochejul/sequelize-mocking#readme",
  "dependencies": {
    "semver": "5.1.0",
    "sequelize": "3.19.3",
    "sequelize-fixtures": "0.4.8",
    "sqlite3": "3.1.1"
  },
  "engines": {
    "node": ">=4.0.0",
    "npm": ">=2.0.0"
  },
  "devDependencies": {
    "babel-cli": "6.5.1",
    "babel-preset-es2015": "6.5.0",
    "chai": "3.5.0",
    "eslint": "2.2.0",
    "lodash": "4.5.1",
    "mocha": "2.4.5",
    "mysql": "2.10.2",
    "rimraf": "2.5.2",
    "sinon": "1.17.3"
  }
}

D'abord, parlons un peu de mon besoin: j'ai besoin avant de publier une nouvelle version de mon projet que les tests unitaires soient lancés. Cela me permettant de m'assurer que je n'ai pas fais de régressions.

Ensuite, j'ai envie, une fois que le commit et le tag Git ont été crée, de les pousser. Mais avant, j'ai un répertoire à régénérer. En effet, j'ai écrit mon module NodeJs en ES6, car je me base sur la version NodeJs 4.x. Mais pour permettre à ceux n'ayant pas encore cette version d'utiliser quand même mon module, je génère l'équivalent en ES5 et je le charge si je vois que la version de NodeJs n'est pas la bonne.

Du coup, une fois que les tests sont bien passés, je souhaite que la génération ES5 se fasse et se rajoute au commit qui va être créé.

Je vais donc faire en sorte d'utiliser les "run-scripts" NodeJs:
  • "preversion" pour lancer les tests
  • "version" pour compiler en ES5 et rajouter dans dans le commit Git
  • "postversion" pour pousser à la fois le commit et le tag Git.

Ce qui nous donne:


"scripts": {
    "build-docker": "docker build -t jroche/sequelize-mocking .",
    "build-es5": "npm run delete lib-es5 && node ./node_modules/babel-cli/bin/babel.js lib --presets es2015 --out-dir lib-es5",
    "delete": "node node_modules/rimraf/bin.js",
    "checkstyle": "npm run delete ./target/eslint-reporter-checkstyle.xml && node node_modules/eslint/bin/eslint.js --config=.eslintrc --output-file ./target/eslint-reporter-checkstyle.xml --format checkstyle ./lib",
    "test": "node ./node_modules/mocha/bin/mocha --recursive --ui bdd --colors ./test",
    "test-with-docker": "docker run jroche/sequelize-mocking",

    "preversion": "npm test",
    "version": "npm run build-es5 && git add -A lib-es5",
    "postversion": "git push && git push --tags"
}


Maintenant, j'aimerai me faciliter la tâche un peu plus encore. En effet, nous devons lancer la commande "npm version" en précisant si nous souhaitons "bumper" en version "major", "minor" ou "patch", mais également ,donner un commentaire.

Pour ça, je vais rajouter des raccourcis afin d'éviter d'avoir à les repréciser à chaque fois:


"scripts": {
    "build-docker": "docker build -t jroche/sequelize-mocking .",
    "build-es5": "npm run delete lib-es5 && node ./node_modules/babel-cli/bin/babel.js lib --presets es2015 --out-dir lib-es5",
    "delete": "node node_modules/rimraf/bin.js",
    "checkstyle": "npm run delete ./target/eslint-reporter-checkstyle.xml && node node_modules/eslint/bin/eslint.js --config=.eslintrc --output-file ./target/eslint-reporter-checkstyle.xml --format checkstyle ./lib",
    "test": "node ./node_modules/mocha/bin/mocha --recursive --ui bdd --colors ./test",
    "test-with-docker": "docker run jroche/sequelize-mocking",

    "bump-major": "npm version major -m \"Upgrade to major version: %s\"",
    "bump-minor": "npm version minor -m \"Upgrade to minor version: %s\"",
    "bump-patch": "npm version patch -m \"Upgrade to version: %s\"",

    "preversion": "npm test",
    "version": "npm run build-es5 && git add -A lib-es5",
    "postversion": "git push && git push --tags"
}


Pour m'assurer que tout fonctionne bien, j'ai essayé la commande "bump-patch". Nous voyons bien que les tests sont lançés:


Puis que la génération ES5 est faite



Et enfin que nous envoyons le tout sur Github.


Ce qui nous donne bien:



Enjoy!

Commentaires

  1. This is a very nice article. thank you for publishing this. i can understand this easily.!!.. AngularJS 5 Online Course

    RépondreSupprimer

Enregistrer un commentaire

Posts les plus consultés de ce blog

ISO: liens & outils utiles

NodeJs et SSL: une petite analyse

Créer sa commande slack en quelques minutes