UNPKG

@financial-times/n-gage

Version:
102 lines (87 loc) 2.65 kB
const jsonfile = require('jsonfile') const packageJsonFilepath = `${process.cwd()}/package.json`; const getPackageJson = () => { const packageJson = jsonfile.readFileSync(packageJsonFilepath); return packageJson; } const writePackageJsonFile = json => { try { jsonfile.writeFileSync(packageJsonFilepath, json(), {spaces: 2}) } catch (err) { console.error(err) } }; const addScript = (json, config) => { const name = config.name; const value = config.value; const newJson = JSON.parse(JSON.stringify(json)); if (!newJson.scripts) { newJson.scripts = {}; } if (!newJson.scripts[name]) { newJson.scripts[name] = value; } else if (newJson.scripts[name].indexOf(value) === -1) { newJson.scripts[name] = `${newJson.scripts[name]} && ${value}`; } return newJson; } const addScripts = () => { const json = getPackageJson(); const newJson = [ { name: 'precommit', value: 'secret-squirrel' }, { name: 'commitmsg', value: 'secret-squirrel-commitmsg' }, { name: 'prepush', value: 'make verify -j3' } ].reduce((returnObject, row) => addScript(returnObject, row), json); return newJson; } const removePreGitHooks = () => { const json = getPackageJson(); delete json.config['pre-git']; delete json.commit; delete json.devDependencies['pre-git']; return json; }; const find = test => { try { return test(); } catch (err) { return false; }; }; const secretSquirrelPreCommitScriptExists = () => { const json = getPackageJson(); return find(() => json.scripts.precommit.indexOf('secret-squirrel') !== -1); }; const secretSquirrelCommitmsgScriptExists = () => { const json = getPackageJson(); return find(() => json.scripts.commitmsg.indexOf('secret-squirrel-commitmsg') !== -1); }; const preGitHookExists = () => { const json = getPackageJson(); return find(() => !!json.config['pre-git'] || json.devDependencies['pre-git']); }; const run = () => { return new Promise(resolve => { var response = ''; // Only run locally (not in CI) if (process.env.CIRCLECI) { return resolve(response); } if (!secretSquirrelPreCommitScriptExists() || !secretSquirrelCommitmsgScriptExists()) { writePackageJsonFile(addScripts); response += 'It added some githook scripts. '; }; if (preGitHookExists()) { writePackageJsonFile(removePreGitHooks); response += 'It deleted some config > pre-git hooks. IMPORTANT: Delete the old local hooks with: "rm -rf .git/hooks/*" '; }; if (response !== '') { response = `✗ Note: n-gage just edited package.json. ${response} Please review and commit`; } return resolve(response); }); } run().then(response => { console.log(response) });