You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
78 lines
2.1 KiB
// update-deps.js
|
|
// Copyright (C) 2022 DTP Technologies, LLC
|
|
// License: Apache 2.0
|
|
|
|
'use strict';
|
|
|
|
const DTP_COMPONENT_NAME = 'webapp';
|
|
|
|
require('dotenv').config();
|
|
|
|
const path = require('path');
|
|
|
|
const { spawn } = require('child_process');
|
|
|
|
const { SiteAsync, SiteLog } = require(path.join(__dirname, 'lib', 'site-lib'));
|
|
|
|
module.rootPath = __dirname;
|
|
module.pkg = require(path.join(module.rootPath, 'package.json'));
|
|
module.pinnedPackages = require(path.join(module.rootPath, 'config', 'pinned-packages'));
|
|
module.log = new SiteLog(module, DTP_COMPONENT_NAME);
|
|
|
|
module.runCommand = async (command, args) => {
|
|
return new Promise((resolve, reject) => {
|
|
module.log.info(command, { args });
|
|
const cmd = spawn(command, args);
|
|
cmd.stdout.on('data', (data) => {
|
|
const output = data.toString('utf8');
|
|
module.log.info(output);
|
|
});
|
|
cmd.stderr.on('data', (data) => {
|
|
const output = data.toString('utf8');
|
|
module.log.error(output);
|
|
});
|
|
cmd.on('error', (err) => {
|
|
reject(err);
|
|
});
|
|
cmd.on('close', (code) => {
|
|
resolve(code);
|
|
});
|
|
});
|
|
};
|
|
|
|
module.generateDepKeys = (dependencies) => {
|
|
const depKeys = Object.keys(dependencies).map((packageName) => {
|
|
const pin = module.pinnedPackages[packageName];
|
|
if (!pin) {
|
|
return packageName;
|
|
}
|
|
if (pin.exact) {
|
|
return `${packageName}@${pin.version} --exact`;
|
|
}
|
|
return `${packageName}@${pin.version}`;
|
|
});
|
|
return depKeys;
|
|
};
|
|
|
|
(async ( ) => {
|
|
|
|
try {
|
|
module.log.info('updating dependencies');
|
|
const depKeys = module.generateDepKeys(module.pkg.dependencies);
|
|
await module.runCommand('yarn', ['add', ...depKeys]);
|
|
} catch (error) {
|
|
module.error('failed to update dependencies', { error });
|
|
process.exit(-1);
|
|
}
|
|
|
|
try {
|
|
module.log.info('updating dev dependencies');
|
|
const depKeys = module.generateDepKeys(module.pkg.devDependencies);
|
|
await module.runCommand('yarn', ['add', '--dev', ...depKeys]);
|
|
} catch (error) {
|
|
module.error('failed to update dev dependencies', { error });
|
|
process.exit(-1);
|
|
}
|
|
|
|
module.log.info('dependencies updated successfully. Good luck with that!');
|
|
})(); |