@dotgov/core
Version:
DGS core.
52 lines (48 loc) • 1.87 kB
JavaScript
const exec = require('child_process').exec;
function getGitUser(callback) {
exec("git config --global user.name", function (err, name) {
if (err) {
console.error(`Could not extract git user.\nPerhaps it's running on server.`);
return;
}
callback(name.replace('\n', ''));
});
};
function updatePackage(packageName) {
return new Promise((resolve) => {
if (packageName === '@dotgov/core') {
return resolve({ packageName, success: true, message: 'Could not update myself.' });
}
console.log(`Updating ${packageName}`);
exec(`npm i ${packageName}@latest --force`, function (err) {
const errorMessage = `Could not update ${packageName}.`;
const successMessage = `Successfully update ${packageName}`
console.log(err ? `${errorMessage}.\n${err}` : successMessage);
return resolve({ packageName, success: !err, message: err ? errorMessage : successMessage, debug: err });
});
});
};
function updateDotgovs(activeDir) {
const packageJson = require(`${activeDir}\\package.json`);
const dotgovs = [
...Object.keys(packageJson['dependencies']),
...Object.keys(packageJson['devDependencies']),
...Object.keys(packageJson['peerDependencies'] || {}),
].filter((key) => key.startsWith('@dotgov'));
return dotgovs.reduce((prev, curr) => (
prev.then((accumulator) =>
updatePackage(curr).then((result) => accumulator.concat(result)))
), Promise.resolve([]));
};
const updateDgs = (activeDir = process.cwd()) => {
return new Promise((resolve, reject) => {
getGitUser((user) => {
if (user === 'Azure DevOps') {
console.log('Skipping dotgov modules update for Azure.');
return reject();
}
return updateDotgovs(activeDir).then(resolve);
});
});
};
module.exports = { updateDgs };