parent
e0eb9f8a03
commit
1fca4658fb
@ -0,0 +1,34 @@
|
||||
// pinned-packages.js
|
||||
// Copyright (C) 2022 DTP Technologies, LLC
|
||||
// License: Apache 2.0
|
||||
|
||||
/*
|
||||
* The update-deps.js script automates updating dependencies, and will honor
|
||||
* version specifications found here, if any.
|
||||
*
|
||||
* This enables the developer to "pin" a package at a version specification that
|
||||
* is guaranteed to work with the application.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
/*
|
||||
* FontAwesome is being held back because they've lost their damn mind if they
|
||||
* think I'm changing every CSS class. I'll stay on 5.15.4 forever.
|
||||
*/
|
||||
"@fortawesome/fontawesome-free": {
|
||||
version: "5.15.4",
|
||||
exact: true,
|
||||
},
|
||||
|
||||
/*
|
||||
* node-fetch is being held at latest 2.x because I can't convert everything
|
||||
* to a module quite yet (required for 3+). And, it's not that critical of a
|
||||
* tool in this application stack.
|
||||
*/
|
||||
"node-fetch": {
|
||||
version: "2",
|
||||
exact: false,
|
||||
},
|
||||
};
|
@ -1,76 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
yarn \
|
||||
add @fortawesome/fontawesome-free \
|
||||
anchorme \
|
||||
argv \
|
||||
bull \
|
||||
chart.js \
|
||||
compression \
|
||||
connect-redis \
|
||||
cookie-parser \
|
||||
cron \
|
||||
cropperjs \
|
||||
diskusage-ng \
|
||||
disposable-email-provider-domains \
|
||||
dotenv \
|
||||
ein-validator \
|
||||
email-domain-check \
|
||||
email-validator \
|
||||
execa \
|
||||
express \
|
||||
express-limiter \
|
||||
express-session \
|
||||
feed \
|
||||
geoip-lite \
|
||||
glob \
|
||||
highlight.js \
|
||||
html-filter \
|
||||
ioredis \
|
||||
jsdom \
|
||||
libphonenumber-js \
|
||||
mailgun-js \
|
||||
marked \
|
||||
method-override \
|
||||
minio \
|
||||
moment \
|
||||
mongoose \
|
||||
morgan \
|
||||
multer \
|
||||
node-fetch@2 \
|
||||
numeral \
|
||||
otplib \
|
||||
passport \
|
||||
passport-local \
|
||||
pug \
|
||||
qrcode \
|
||||
rate-limiter-flexible \
|
||||
rotating-file-stream \
|
||||
serve-favicon \
|
||||
sharp \
|
||||
slug \
|
||||
socket.io \
|
||||
socket.io-emitter \
|
||||
@socket.io/redis-adapter \
|
||||
striptags \
|
||||
systeminformation \
|
||||
tinymce \
|
||||
uikit \
|
||||
uniqid \
|
||||
uuid \
|
||||
zxcvbn
|
||||
|
||||
yarn add -D \
|
||||
browser-sync \
|
||||
gulp \
|
||||
gulp-concat \
|
||||
gulp-jshint \
|
||||
gulp-less \
|
||||
gulp-nodemon \
|
||||
gulp-plumber \
|
||||
gulp-rename \
|
||||
gulp-uglify-es \
|
||||
terser-webpack-plugin \
|
||||
webpack \
|
||||
webpack-stream \
|
||||
workbox-webpack-plugin
|
@ -0,0 +1,78 @@
|
||||
// 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!');
|
||||
})();
|
Loading…
Reference in new issue