dhis2-frontend-code-quality
Version:
Code quality tools that are easily installable to your repo
89 lines (73 loc) • 2.31 kB
JavaScript
var inquirer = require("inquirer");
var Validate = require('git-validate');
var SCRIPT_NAME = 'D2CQT: ';
var OVERWRITE = true;
function copyFiles(answers) {
log('Copying files ...');
Validate.copy('templates/editorconfig', '.editorconfig');
Validate.copy('templates/gitignore', '.gitignore');
Validate.copy('templates/npmignore', '.npmignore');
Validate.copy('templates/eslintrc', '.eslintrc');
if (answers.uses_scss) {
Validate.copy('templates/scss-lint.yml', '.scss-lint.yml', {overwrite: OVERWRITE});
}
log('Done!');
}
function createLintScript(answers) {
var lintScript = ['eslint src'];
if (answers.writes_tests) {
lintScript.push("eslint --env node,mocha --global expect,sinon --rule 'no-unused-expressions: 0' test");
}
if (answers.uses_scss) {
lintScript.push('scss-lint');
}
return lintScript.join(' && ');
}
function getPrePushActions(answers) {
var prePushActions = ['lint'];
if (answers.writes_tests) {
prePushActions.push('test');
}
return prePushActions;
}
function installGitHook(answers) {
log('Creating git hooks ...');
Validate.installScript('lint', createLintScript(answers), {overwrite: OVERWRITE});
Validate.configureHook('pre-push', getPrePushActions(answers));
log('Done!');
}
function log(logValue) {
console.log(SCRIPT_NAME + logValue);
}
function askQuestions() {
inquirer.prompt([
{
type: "list",
name: "project_type",
message: "Please pick the type of DHIS2 project are you creating!",
choices: [
new inquirer.Separator(),
"WebApp",
"Library",
],
filter: function( val ) { return val.toLowerCase().replace(/\W/, '_'); }
},
{
type: "confirm",
name: "uses_scss",
message: "Will you use scss in your project?",
default: true,
},
{
type: "confirm",
name: "writes_tests",
message: "Will you write tests?",
default: true,
}
], function(answers) {
copyFiles(answers);
installGitHook(answers);
log('Totally done! :) Happy hacking!');
});
}
askQuestions();