ddc-commit-hooks
Version:
Configurable commit hook setup
104 lines (103 loc) • 4.11 kB
JavaScript
;
var fs = require("fs");
var path = require("path");
var chalk = require("chalk");
var filename = process.cwd();
var simpleGit = require("simple-git")(filename);
var preCommit = {
handleDiffResult: function (err, result, config) {
var overSizedFiles = 0;
for (var _i = 0, _a = result.files; _i < _a.length; _i++) {
var file = _a[_i];
try {
var stats = fs.statSync(file.file);
var fileSizeInBytes = stats.size;
var fileSizeInMegabytes = fileSizeInBytes / 1000000.0;
if (fileSizeInMegabytes > config.preCommit.maxFileSize) {
console.log(chalk.red(file.file + ": File size is too big"));
++overSizedFiles;
}
}
catch (error) {
continue;
}
}
if (overSizedFiles) {
console.log(chalk.red("Please un-stage " + overSizedFiles + " oversized file" + (overSizedFiles > 1 ? "s" : "") + " before committing"));
process.exit(1);
return;
}
if (config.preCommit.dotOnlyCheck) {
var _loop_1 = function (file) {
fs.readFile(file.file, "utf8", function (err, data) {
if (data && data.indexOf(".only") >= 0) {
console.log(chalk.red(file.file + ": Contains a '.only', please remove"));
process.exit(1);
}
});
};
for (var _b = 0, _c = result.files; _b < _c.length; _b++) {
var file = _c[_b];
_loop_1(file);
}
}
if (config.preCommit.gitlabCi) {
if (!this.fileExists("/.gitlab-ci.yml")) {
console.log(chalk.red("No Gitlab config detected, aborting pre-commit checks"));
process.exit(1);
return;
}
console.log(chalk.cyan(".gitlab-ci.yml file detected"));
}
if (config.preCommit.circleCi) {
if (!this.fileExists("/.circleci")) {
console.log(chalk.red("No CircleCi config detected, aborting pre-commit checks"));
process.exit(1);
return;
}
}
if (config.preCommit.esLintCheck) {
if (!this.fileExists("/.eslintrc")) {
console.log(chalk.red("No esLint config detected, aborting pre-commit checks"));
process.exit(1);
return;
}
console.log(chalk.cyan(".esLint file detected"));
}
if (config.preCommit.cypress && config.preCommit.cypress.length) {
if (!this.fileExists(config.preCommit.cypress)) {
console.log(chalk.red("No Cypress directory detected, aborting pre-commit checks"));
process.exit(1);
return;
}
console.log(chalk.cyan("Cypress directory detected"));
}
if (config.preCommit.robot && config.preCommit.robot.length) {
if (!this.fileExists(config.preCommit.robot)) {
console.log(chalk.red("No Robot directory detected, aborting pre-commit checks"));
process.exit(1);
return;
}
console.log(chalk.cyan("Cypress directory detected"));
}
console.log(chalk.green("All pre-commit checks passed"));
},
fileExists: function (filePath) {
if (fs.existsSync(path.join(process.env.PWD, filePath))) {
console.log(chalk.cyan(filePath + " file found"));
return true;
}
else {
console.log(chalk.red(filePath + " - file not detected"));
return false;
}
},
check: function (config) {
var _this = this;
console.log(chalk.cyan("Beginning pre-commit checks"));
simpleGit.diffSummary(["--cached"], function (err, result) {
_this.handleDiffResult(err, result, config);
});
}
};
module.exports = preCommit;