diff --git a/README.md b/README.md index a957faaf..33a3a983 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,33 @@ module.exports = Object.assign(jestConfig, { }); ``` +Or, for `commitlint`, a `commitlint.config.js` file or `commitlint` prop in package.json: + +```js +// commitlint.config.js or .commitlintrc.js +const { commitlint: commitlintConfig } = require('cod-scripts/commitlint'); + +module.exports = { + ...commitlintConfig, + rules: { + // overrides here + }, +}; +``` + +```json +// package.json +{ + "commitlint": { + "extends": ["./node_modules/cod-scripts/commitlint"], + "rules": { + // your overrides here + // https://commitlint.js.org/#/reference-rules + } + } +} +``` + > Note: `cod-scripts` intentionally does not merge things for you when you start configuring things > to make it less magical and more straightforward. Extending can take place on your terms. I think > this is actually a great way to do this. diff --git a/package.json b/package.json index 6e297447..b795606f 100644 --- a/package.json +++ b/package.json @@ -14,17 +14,14 @@ "test:update": "node src test --updateSnapshot", "build": "node src build", "lint": "node src lint", + "commitlint": "node src commitlint", "format": "node src format", "validate": "node src validate" }, - "husky": { - "hooks": { - "pre-commit": "node src pre-commit" - } - }, "files": [ "dist", "babel.js", + "commitlint.js", "eslint.js", "config.js", "prettier.js", @@ -43,6 +40,8 @@ "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.0.0", "@babel/runtime": "^7.5.5", + "@commitlint/cli": "^8.1.0", + "@commitlint/config-conventional": "^8.1.0", "arrify": "^2.0.1", "babel-core": "^7.0.0-0", "babel-jest": "^24.8.0", @@ -96,6 +95,34 @@ "no-useless-catch": "off" } }, + "husky": { + "hooks": { + "pre-commit": "node src pre-commit", + "commit-msg": "node src commitlint -E HUSKY_GIT_PARAMS" + } + }, + "commitlint": { + "extends": [ + "./src/config/commitlint.config" + ], + "rules": { + "scope-enum": [ + 2, + "always", + [ + "eslint", + "babel", + "rollup", + "commitlint", + "jest", + "lintstaged", + "lint-staged", + "husky", + "prettier" + ] + ] + } + }, "repository": { "type": "git", "url": "https://github.com/codfish/cod-scripts.git" @@ -105,8 +132,6 @@ }, "homepage": "https://github.com/codfish/cod-scripts#readme", "devDependencies": { - "@commitlint/cli": "^8.1.0", - "@commitlint/config-conventional": "^8.1.0", "jest-in-case": "^1.0.2", "slash": "^3.0.0" } diff --git a/src/__tests__/__snapshots__/index.js.snap b/src/__tests__/__snapshots__/index.js.snap index 3256635f..60b7d5c1 100644 --- a/src/__tests__/__snapshots__/index.js.snap +++ b/src/__tests__/__snapshots__/index.js.snap @@ -28,6 +28,7 @@ Usage: ../ [script] [--flags] Available Scripts: build + commitlint format lint pre-commit diff --git a/src/config/__tests__/umbrella.js b/src/config/__tests__/umbrella.js index a104af05..45e09478 100644 --- a/src/config/__tests__/umbrella.js +++ b/src/config/__tests__/umbrella.js @@ -1,6 +1,7 @@ test('requiring some files does not blow up', () => { require('../babel-transform'); require('../babelrc'); + require('../commitlint.config'); require('../eslintrc'); require('../jest.config'); require('../lintstagedrc'); diff --git a/src/config/commitlint.config.js b/src/config/commitlint.config.js index 84dcb122..418698da 100644 --- a/src/config/commitlint.config.js +++ b/src/config/commitlint.config.js @@ -1,3 +1,5 @@ +// https://commitlint.js.org/#/reference-rules module.exports = { + // https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional#type-enum extends: ['@commitlint/config-conventional'], }; diff --git a/src/config/index.js b/src/config/index.js index 86fe9ee0..d9b7d4a3 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -1,5 +1,6 @@ module.exports = { babel: require('./babelrc'), + commitlint: require('./commitlint.config'), eslint: require('./eslintrc'), jest: require('./jest.config'), lintStaged: require('./lintstagedrc'), diff --git a/src/scripts/commitlint.js b/src/scripts/commitlint.js new file mode 100644 index 00000000..36ec5bb7 --- /dev/null +++ b/src/scripts/commitlint.js @@ -0,0 +1,24 @@ +const path = require('path'); +const spawn = require('cross-spawn'); +const { hasPkgProp, resolveBin, hasFile } = require('../utils'); + +const args = process.argv.slice(2); +const here = p => path.join(__dirname, p); +const hereRelative = p => here(p).replace(process.cwd(), '.'); + +const useBuiltinConfig = + !args.includes('--config') && + !args.includes('-g') && + !hasFile('commitlint.config.js') && + !hasFile('.commitlintrc.js') && + !hasFile('.commitlintrc.json') && + !hasFile('.commitlintrc.yml') && + !hasPkgProp('commitlint'); + +const config = useBuiltinConfig ? ['--config', hereRelative('../config/commitlint.config.js')] : []; + +const result = spawn.sync(resolveBin('commitlint'), [...config, ...args], { + stdio: 'inherit', +}); + +process.exit(result.status);