diff --git a/.gitattributes b/.gitattributes index 5af187f0..307a0319 100644 --- a/.gitattributes +++ b/.gitattributes @@ -22,6 +22,7 @@ *.txt text eol=lf *.xml text eol=lf *.yml text eol=lf +.husky/* text eol=lf # Exclude the `.htaccess` file from GitHub's language statistics # https://github.com/github/linguist#using-gitattributes diff --git a/.husky/commit_msg b/.husky/commit_msg new file mode 100644 index 00000000..e8105222 --- /dev/null +++ b/.husky/commit_msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no -- commitlint --edit $1 diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 00000000..d5a85978 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm test && npm run typings diff --git a/package-lock.json b/package-lock.json index d4d88084..ded13a5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.1", + "is-ci": "^3.0.1", "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", @@ -1550,6 +1551,12 @@ "node": ">= 6" } }, + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -3022,6 +3029,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -8729,6 +8748,12 @@ } } }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -9830,6 +9855,15 @@ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", diff --git a/package.json b/package.json index b036cc99..0921cb6d 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "node": ">=8.0" }, "scripts": { + "prepare": "is-ci || husky install", "pretest": "prettier --check . && eslint \"lib/**/*.js\" \"test/**/*.js\"", "prettier:fix": "prettier --write .", "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", @@ -63,6 +64,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.1", + "is-ci": "^3.0.1", "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", @@ -83,11 +85,5 @@ "require": [ "./test/sandbox-coverage" ] - }, - "husky": { - "hooks": { - "commit-msg": "validate-commit-msg", - "pre-push": "npm test && npm run typings" - } } }