summaryrefslogtreecommitdiffhomepage
path: root/scripts/build_one_click_apps.js
diff options
context:
space:
mode:
authorKasra Bigdeli <[email protected]>2020-08-09 07:54:27 -0400
committerKasra Bigdeli <[email protected]>2020-08-09 07:54:27 -0400
commita4234efee30b03fa8d84459df4b9a53a34269df8 (patch)
treef55834399fc6ef146d011b5aa7da3195ee324879 /scripts/build_one_click_apps.js
parentd2befaf8da352c56a058d5b51017eb834cb51912 (diff)
downloadcaprover-one-click-apps-a4234efee30b03fa8d84459df4b9a53a34269df8.tar.gz
caprover-one-click-apps-a4234efee30b03fa8d84459df4b9a53a34269df8.zip
Added support for v4
Diffstat (limited to 'scripts/build_one_click_apps.js')
-rw-r--r--scripts/build_one_click_apps.js62
1 files changed, 60 insertions, 2 deletions
diff --git a/scripts/build_one_click_apps.js b/scripts/build_one_click_apps.js
index e9b0a66..f2f5f3d 100644
--- a/scripts/build_one_click_apps.js
+++ b/scripts/build_one_click_apps.js
@@ -1,5 +1,6 @@
/*jshint esversion: 6 */
const path = require('path');
+const yaml = require('yaml');
const fs = require('fs-extra');
const pathOfPublic = path.join(__dirname, '..', `public`);
@@ -8,6 +9,7 @@ const pathOfDist = path.join(__dirname, '..', `dist`);
// const pathOfDistV1 = path.join(pathOfDist, 'v1');
const pathOfDistV2 = path.join(pathOfDist, 'v2');
const pathOfDistV3 = path.join(pathOfDist, 'v3');
+const pathOfDistV4 = path.join(pathOfDist, 'v4');
const pathOfSourceDirectory = path.join(pathOfPublic, 'v2');
const pathOfSourceDirectoryApps = path.join(pathOfSourceDirectory, 'apps');
@@ -50,18 +52,73 @@ function createAppList(appsList, pathOfApps) {
};
}
+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.captainVersion = 4;
+ parsed.caproverOneClickApp = {};
+
+ parsed.services = parsed.dockerCompose.services;
+ parsed.dockerCompose = undefined;
+
+ moveProperty('variables');
+ moveProperty('instructions');
+ moveProperty('displayName');
+ 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 parsed;
+}
+
function buildDist() {
return fs.readdir(pathOfSourceDirectoryApps)
.then(function (appsFileNames) { // [ app1.json app2.json .... ]
appsFileNames.forEach(appFileName => {
- fs.copySync(path.join(pathOfSourceDirectoryApps, appFileName), path.join(pathOfDistV2, `apps`, appFileName));
- fs.copySync(path.join(pathOfSourceDirectoryApps, appFileName), path.join(pathOfDistV3, `apps`, appFileName.split('.')[0]));
+ const pathOfAppFileInSource = path.join(pathOfSourceDirectoryApps, appFileName);
+
+ //v2
+ fs.copySync(pathOfAppFileInSource, path.join(pathOfDistV2, `apps`, appFileName));
+
+ //v3
+ fs.copySync(pathOfAppFileInSource, path.join(pathOfDistV3, `apps`, appFileName.split('.')[0]));
+
+ //v4
+ const contentString = fs.readFileSync(pathOfAppFileInSource);
+ fs.outputJsonSync(path.join(pathOfDistV4, `apps`, appFileName.split('.')[0]), convertV2toV4(contentString));
});
fs.copySync(pathOfSourceDirectoryLogos, path.join(pathOfDistV2, `logos`));
fs.copySync(pathOfSourceDirectoryLogos, path.join(pathOfDistV3, `logos`));
+ fs.copySync(pathOfSourceDirectoryLogos, path.join(pathOfDistV4, `logos`));
const allAppsList = createAppList(appsFileNames, pathOfSourceDirectoryApps);
const v3List = {
@@ -70,6 +127,7 @@ function buildDist() {
fs.outputJsonSync(path.join(pathOfDistV2, 'autoGeneratedList.json'), allAppsList);
fs.outputJsonSync(path.join(pathOfDistV2, 'list'), v3List); // TODO delete oneClickApps:
fs.outputJsonSync(path.join(pathOfDistV3, 'list'), v3List);
+ fs.outputJsonSync(path.join(pathOfDistV4, 'list'), v3List);
})
.then(function () {
return fs.copySync(path.join(pathOfPublic, 'CNAME'), path.join(pathOfDist, 'CNAME'));