summaryrefslogtreecommitdiffhomepage
path: root/scripts/migrate_v2_to_v4.js
diff options
context:
space:
mode:
authorKasra Bigdeli <[email protected]>2020-08-16 20:02:16 -0400
committerKasra Bigdeli <[email protected]>2020-08-16 20:03:15 -0400
commit0e70ec541e7441b71460db230975d4614473ed6d (patch)
tree6e8bafcd18f41d09bc893dc75f36398a0c1f7dde /scripts/migrate_v2_to_v4.js
parent83103a180914dff274188594132c1395f12a1645 (diff)
downloadcaprover-one-click-apps-0e70ec541e7441b71460db230975d4614473ed6d.tar.gz
caprover-one-click-apps-0e70ec541e7441b71460db230975d4614473ed6d.zip
migrate to v4
Diffstat (limited to 'scripts/migrate_v2_to_v4.js')
-rw-r--r--scripts/migrate_v2_to_v4.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/scripts/migrate_v2_to_v4.js b/scripts/migrate_v2_to_v4.js
new file mode 100644
index 0000000..84fe45b
--- /dev/null
+++ b/scripts/migrate_v2_to_v4.js
@@ -0,0 +1,111 @@
+/*jshint esversion: 6 */
+const path = require('path');
+const yaml = require('yaml');
+const types = require('yaml/types');
+const fs = require('fs-extra');
+types.strOptions.fold.lineWidth = 0;
+
+// Next, for V4:
+// ============================================================================
+// ============================================================================
+// *********** THIS IS ONLY TO BE DONE AFTER CAPROVER 1.8 RELEASE *************
+// ============================================================================
+// ============================================================================
+//
+// 1- DUPLICATE this script. The new script is to ONLY read from /public/v4/*.yaml
+// 2- Test with a new YAML file
+// 3- Write script to convert all v2 JSON to V4 yaml and place them in /public/v4/*.yaml
+// 4- Update readme!!!!
+// 5- Push all 3 steps above at the same time to GITHUB
+
+const pathOfPublic = path.join(__dirname, '..', `public`);
+
+const pathOfDist = path.join(__dirname, '..', `dist`);
+
+const pathOfDistV2 = path.join(pathOfDist, 'v2');
+const pathOfDistV3 = path.join(pathOfDist, 'v3');
+const pathOfDistV4 = path.join(pathOfDist, 'v4');
+
+const pathOfSourceDirectoryV2 = path.join(pathOfPublic, 'v2');
+const pathOfSourceDirectoryAppsV2 = path.join(pathOfSourceDirectoryV2, 'apps');
+const pathOfSourceDirectoryLogosV2 = path.join(pathOfSourceDirectoryV2, 'logos');
+
+
+
+function convertV2toV4(v2String) {
+ const parsed = JSON.parse(v2String);
+ if (`${parsed.captainVersion}` !== '2') {
+ throw new Error('CaptainVersion must be 2 for this conversion');
+ }
+
+ function moveProperty(propertyName) {
+ parsed.caproverOneClickApp[propertyName] = parsed[propertyName];
+ parsed[propertyName] = undefined;
+ }
+
+ parsed.services = parsed.dockerCompose.services;
+ parsed.dockerCompose = undefined;
+
+ parsed.captainVersion = 4;
+ parsed.caproverOneClickApp = {};
+
+ moveProperty('variables');
+ moveProperty('instructions');
+ moveProperty('displayName');
+ moveProperty('isOfficial');
+ moveProperty('description');
+ moveProperty('documentation');
+
+ Object.keys(parsed.services).forEach(serviceName => {
+ const service = parsed.services[serviceName];
+ if (service.containerHttpPort) {
+ service.caproverExtra = service.caproverExtra || {};
+ service.caproverExtra.containerHttpPort = service.containerHttpPort;
+ }
+ if (service.dockerfileLines) {
+ service.caproverExtra = service.caproverExtra || {};
+ service.caproverExtra.dockerfileLines = service.dockerfileLines;
+ }
+ if (service.notExposeAsWebApp) {
+ service.caproverExtra = service.caproverExtra || {};
+ service.caproverExtra.notExposeAsWebApp = service.notExposeAsWebApp;
+ }
+ service.containerHttpPort = undefined;
+ service.dockerfileLines = undefined;
+ service.notExposeAsWebApp = undefined;
+ });
+
+
+ return JSON.parse(JSON.stringify(parsed));
+}
+
+
+function buildDist() {
+ return fs.readdir(pathOfSourceDirectoryAppsV2)
+ .then(function (appsFileNames) { // [ app1.json app2.json .... ]
+
+ appsFileNames.forEach(appFileName => {
+ const pathOfAppFileInSource = path.join(pathOfSourceDirectoryAppsV2, appFileName);
+
+ //v4
+ const pathOfSourceDirectoryV4 = path.join(pathOfPublic, 'v4');
+ const contentString = fs.readFileSync(pathOfAppFileInSource);
+
+ fs.outputFileSync(path.join(pathOfSourceDirectoryV4, `apps`, appFileName.split('.')[0] + '.yml'), yaml.stringify(convertV2toV4(contentString)));
+ fs.moveSync(path.join(pathOfSourceDirectoryV2, `logos`, appFileName.split('.')[0] + '.png'),
+ path.join(pathOfSourceDirectoryV4, `logos`, appFileName.split('.')[0] + '.png'));
+ fs.removeSync(path.join(pathOfSourceDirectoryV2, `apps`, appFileName.split('.')[0] + '.json'));
+ });
+
+ });
+ }
+
+
+ Promise.resolve()
+ .then(function () {
+ return buildDist();
+ })
+ .catch(function (err) {
+ console.error(err);
+ process.exit(127);
+ }); \ No newline at end of file