diff options
| author | Kasra Bigdeli <[email protected]> | 2020-08-09 07:54:27 -0400 |
|---|---|---|
| committer | Kasra Bigdeli <[email protected]> | 2020-08-09 07:54:27 -0400 |
| commit | a4234efee30b03fa8d84459df4b9a53a34269df8 (patch) | |
| tree | f55834399fc6ef146d011b5aa7da3195ee324879 /scripts | |
| parent | d2befaf8da352c56a058d5b51017eb834cb51912 (diff) | |
| download | caprover-one-click-apps-a4234efee30b03fa8d84459df4b9a53a34269df8.tar.gz caprover-one-click-apps-a4234efee30b03fa8d84459df4b9a53a34269df8.zip | |
Added support for v4
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/build_one_click_apps.js | 62 |
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')); |
