From 5c3409efa4711e0decc15a64ad39afb2b1c6447c Mon Sep 17 00:00:00 2001 From: bingtsingw Date: Sat, 20 Aug 2022 13:23:25 +0800 Subject: [PATCH] feat: add task: commitizen --- .husky/commit-msg | 4 ++++ README.md | 19 ++++++++++++++++--- commitizen/index.js | 43 +++++++++++++++++++++++++++++++++++++++++++ husky/index.js | 2 +- prettier/index.js | 6 +++--- 5 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 .husky/commit-msg create mode 100644 commitizen/index.js diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..fc28b52 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no -- commitlint --edit "${1}" diff --git a/README.md b/README.md index 94dbfc0..018af51 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,9 @@ # @bingtsingw/mrm-preset -[mrm](https://github.com/sapegin/mrm) preset to keep configuration files in-sync and consistent across various projects. -Inspired by [mrm-preset-default](https://github.com/sapegin/mrm/tree/master/packages/mrm-preset-default) and [@adonisjs/mrm-preset](https://github.com/adonisjs/mrm-preset) +[mrm](https://github.com/sapegin/mrm) preset to keep configuration files in-sync and consistent across various projects. Highly inspired by [mrm-preset-default](https://github.com/sapegin/mrm/tree/master/packages/mrm-preset-default) and [@adonisjs/mrm-preset](https://github.com/adonisjs/mrm-preset). -> :warning: I use [@antfu/ni](https://github.com/antfu/ni) in this readme file to install npm packages. +> :warning: This documentation uses [@antfu/ni](https://github.com/antfu/ni) for npm operations. ## Usage @@ -50,6 +49,16 @@ $ nr mrm vscode $ nr mrm husky ``` +### Commitizen + +1. Remove all `commitizen` configs +2. Add `commitizen` packages and configs +3. Install husky hook if exists + +```bash +$ nr mrm commitizen +``` + ### Typescript 1. Create `tsconfig.json` @@ -68,3 +77,7 @@ $ nr mrm typescript 4. Add `package.json` scripts 5. install `prettier` 1. install `prettier-plugin-organize-imports` if in a typescript project + +```bash +$ nr mrm prettier +``` diff --git a/commitizen/index.js b/commitizen/index.js new file mode 100644 index 0000000..76dcaf0 --- /dev/null +++ b/commitizen/index.js @@ -0,0 +1,43 @@ +const { install, packageJson, deleteFiles, lines } = require('mrm-core'); + +const hasHusky = !!packageJson().get('devDependencies.husky'); + +const removeMatch = (lines, match) => { + lines = lines.filter((value) => !value.match(match)); + return lines; +}; + +const task = async () => { + deleteFiles([ + '.commitlintrc', + '.commitlintrc.json', + '.commitlintrc.yaml', + '.commitlintrc.yml', + '.commitlintrc.js', + '.commitlintrc.cjs', + '.commitlintrc.ts', + 'commitlint.config.js', + 'commitlint.config.cjs', + 'commitlint.config.ts', + ]); + deleteFiles(['.czrc']); + + install(['commitizen', 'cz-conventional-changelog']); + packageJson().setScript('commit', 'cz').set('config.commitizen', { path: 'cz-conventional-changelog' }).save(); + + install(['@commitlint/cli', '@commitlint/config-conventional']); + packageJson() + .set('commitlint', { extends: ['@commitlint/config-conventional'] }) + .save(); + + if (hasHusky) { + const commitMsg = '.husky/commit-msg'; + lines(commitMsg) + .set(removeMatch(lines(commitMsg).get(), /commitlint/)) + .add('npx --no -- commitlint --edit $1') + .save(); + } +}; + +task.description = 'Add commitizen'; +module.exports = task; diff --git a/husky/index.js b/husky/index.js index f25ad60..0dc1cc5 100644 --- a/husky/index.js +++ b/husky/index.js @@ -7,7 +7,7 @@ const task = async () => { packageJson().setScript('prepare', "if [ -d './node_modules/husky' ]; then husky install; fi").save(); install(['husky']); - await execa('npx husky install'); + await execa('npx husky install', { shell: true }); }; task.description = 'Add husky'; diff --git a/prettier/index.js b/prettier/index.js index 7891d20..9508242 100644 --- a/prettier/index.js +++ b/prettier/index.js @@ -1,6 +1,6 @@ const { install, packageJson, lines, json, deleteFiles } = require('mrm-core'); -const isTs = !!packageJson().get('devDependencies.typescript'); +const hasTypescript = !!packageJson().get('devDependencies.typescript'); const task = () => { deleteFiles([ @@ -26,7 +26,7 @@ const task = () => { trailingComma: 'all', proseWrap: 'never', }); - if (isTs) { + if (hasTypescript) { prettierrc.merge({ plugins: ['prettier-plugin-organize-imports'], }); @@ -84,7 +84,7 @@ const task = () => { * Install required dependencies */ install(['prettier']); - if (isTs) { + if (hasTypescript) { install(['prettier-plugin-organize-imports']); } };