dashboard/shell/creators/update/init

57 lines
1.6 KiB
JavaScript
Executable File

#!/usr/bin/env node
const path = require('path');
const fs = require('fs-extra');
const { spawnSync } = require('child_process');
const scriptFolder = __dirname;
const dest = path.resolve('.');
// Remove first two args
let args = process.argv;
args.splice(0, 2);
const res = spawnSync(`${__dirname}/upgrade`, args, {
cwd: dest,
shell: false,
stdio: [ 'ignore', process.stdout, process.stderr ],
});
if (res.status !== 0) {
process.exit(res.status);
}
// Read the existing package.json
let rawdata = fs.readFileSync(path.join(dest, 'package.json'));
const appPackage = JSON.parse(rawdata);
// Read the package.json from the app creator
rawdata = fs.readFileSync(path.join(scriptFolder, 'app', 'package.json'));
const latestPackage = JSON.parse(rawdata);
// Read the package.json from the upgrade creator
rawdata = fs.readFileSync(path.join(scriptFolder, 'package.json'));
const upgradePackage = JSON.parse(rawdata);
// Update dependency versions to match the latest from the creator
Object.keys(latestPackage._pkgs).forEach((key) => {
appPackage.dependencies[key] = latestPackage._pkgs[key];
});
// Add in the webpack resolution
appPackage.resolutions = appPackage.resolutions || {};
appPackage.resolutions['**/webpack'] = '4';
// Update the version of @rancher/shell
const shellVersion = upgradePackage.version;
appPackage.dependencies['@rancher/shell'] = shellVersion;
fs.writeFileSync(path.join(dest, 'package.json'), JSON.stringify(appPackage, null, 2) + '\n');
spawnSync(`yarn`, ['install'], {
cwd: dest,
shell: false,
stdio: [ 'ignore', process.stdout, process.stderr ],
});