diff --git a/.gitignore b/.gitignore index 618871d..8297107 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -autoGeneratedList.json +dist/* node_modules .DS_Store diff --git a/package.json b/package.json index 2b85b5f..631fb09 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "One Click App Repository for CapRover", "scripts": { - "build": "node ./scripts/build_one_click_apps.js", + "build": "rm -rf ./dist/ && mkdir -p dist && node ./scripts/build_one_click_apps.js", "validate_json": "node ./scripts/validate_json.js", "publish": "npm run build && ./scripts/publish-from-actions.sh" }, diff --git a/public/v1/apps/___READ_DEPRECATION_NOTICE___ b/public/v1/apps/___READ_DEPRECATION_NOTICE___ deleted file mode 100644 index f53cf4d..0000000 --- a/public/v1/apps/___READ_DEPRECATION_NOTICE___ +++ /dev/null @@ -1,3 +0,0 @@ -# V1 is no longer being updated. - -We use v2, which has an additional parameter of `$$cap_root_domain` \ No newline at end of file diff --git a/public/v1/apps/__upgrade_caprover__.json b/public/v1/apps/__upgrade_caprover__.json deleted file mode 100644 index e1270cf..0000000 --- a/public/v1/apps/__upgrade_caprover__.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "captainVersion": "1", - "documentation": "Just a placeholder for upgrade message", - "dockerCompose": { - "services": { - "$$cap_appname": { - "image": "this-is-not-a-real-app:$$cap_adminer_version" - } - } - }, - "instructions": { - "start": "You CapRover is not supported anymore. Navigate to SETTINGS and update your CapRover.", - "end": "" - }, - "variables": [{ - "id": "$$cap_adminer_version", - "label": "Update CapRover", - "description": "", - "defaultValue": "NOT SUPPORTED", - "validRegex": "/.{100,}/" - } - ] - -} \ No newline at end of file diff --git a/scripts/build_one_click_apps.js b/scripts/build_one_click_apps.js index be96b2b..67260fc 100644 --- a/scripts/build_one_click_apps.js +++ b/scripts/build_one_click_apps.js @@ -1,76 +1,83 @@ - /*jshint esversion: 6 */ - const path = require('path'); - const fs = require('fs-extra') +/*jshint esversion: 6 */ +const path = require('path'); +const fs = require('fs-extra'); - const PUBLIC = `public` - const pathOfPublic = path.join(__dirname, '..', PUBLIC); +const pathOfPublic = path.join(__dirname, '..', `public`); + +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 pathOfSourceDirectory = path.join(pathOfPublic, 'v2'); +const pathOfSourceDirectoryApps = path.join(pathOfSourceDirectory, 'apps'); +const pathOfSourceDirectoryLogos = path.join(pathOfSourceDirectory, 'logos'); - function copyVersion(version) { +function createAppList(appsList, pathOfApps) { + const apps = appsList.filter(v => v.includes('.json')); + const appDetails = []; - const pathOfVersion = path.join(pathOfPublic, 'v' + version); - const pathOfApps = path.join(pathOfVersion, 'apps'); - const pathOfList = path.join(pathOfVersion, 'autoGeneratedList.json'); //kept for backward compat - const pathOfList2 = path.join(pathOfVersion, 'list'); + for (var i = 0; i < apps.length; i++) { + const contentString = fs.readFileSync(path.join(pathOfApps, apps[i])); + const content = JSON.parse(contentString); + const captainVersion = (content.captainVersion + ''); - return fs.readdir(pathOfApps) - .then(function (items) { + apps[i] = apps[i].replace('.json', ''); - const apps = items.filter(v => v.includes('.json')); - const appDetails = []; + if (captainVersion + '' === '2') { + if (!content.displayName) { + content.displayName = apps[i]; + content.displayName = content.displayName.substr(0, 1).toUpperCase() + content.displayName.substring(1, content.displayName.length); + } + if (!content.description) content.description = ''; - for (var i = 0; i < apps.length; i++) { - const contentString = fs.readFileSync(path.join(pathOfApps, apps[i])); - const content = JSON.parse(contentString) - const captainVersion = (content.captainVersion + ''); - const versionString = (version + ''); - if (versionString !== captainVersion) - throw new Error(`unmatched versions ${versionString} ${captainVersion} for ${apps[i]}`) - if (captainVersion === "1") { - if (contentString.includes("$$cap_root_domain")) - throw new Error('V1 should not have root domain') - } + appDetails[i] = { + name: apps[i], + displayName: content.displayName, + description: content.description, + logoUrl: apps[i] + '.png' + }; + } else { + throw new Error('Unknown captain-version: ' + captainVersion); + } - apps[i] = apps[i].replace('.json', ''); + } - if (captainVersion + '' === '2') { - if (!content.displayName) { - content.displayName = apps[i] - content.displayName = content.displayName.substr(0, 1).toUpperCase() + content.displayName.substring(1, content.displayName.length) - } - if (!content.description) content.description = '' - - appDetails[i] = { - name: apps[i], - displayName: content.displayName, - description: content.description, - logoUrl: apps[i] + '.png' - } - } - - } - - fs.outputJsonSync(pathOfList, { - appList: apps, - appDetails: appDetails - }); - - fs.outputJsonSync(pathOfList2, { - oneClickApps: appDetails - }); - - }) - } + return { + appList: apps, + appDetails: appDetails + }; +} - Promise.resolve() - .then(function () { - return copyVersion(1) - }) - .then(function () { - return copyVersion(2) - }) - .catch(function (err) { - console.error(err) - process.exit(127) - }) \ No newline at end of file +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])); + }); + + fs.copySync(pathOfSourceDirectoryLogos, path.join(pathOfDistV2, `logos`)); + fs.copySync(pathOfSourceDirectoryLogos, path.join(pathOfDistV3, `logos`)); + + fs.outputJsonSync(path.join(pathOfDistV2, 'autoGeneratedList.json'), createAppList(appsFileNames, pathOfSourceDirectoryApps)); + fs.outputJsonSync(path.join(pathOfDistV2, 'list'), createAppList(appsFileNames, pathOfSourceDirectoryApps)); // TODO delete + fs.outputJsonSync(path.join(pathOfDistV3, 'list'), createAppList(appsFileNames, pathOfSourceDirectoryApps)); + }) + .then(function () { + return fs.copySync(path.join(pathOfPublic, 'CNAME'), path.join(pathOfDist, 'CNAME')) + }); +} + + +Promise.resolve() + .then(function () { + return buildDist(); + }) + .catch(function (err) { + console.error(err); + process.exit(127); + }); \ No newline at end of file diff --git a/scripts/publish-from-actions.sh b/scripts/publish-from-actions.sh index 05466dd..404086b 100755 --- a/scripts/publish-from-actions.sh +++ b/scripts/publish-from-actions.sh @@ -26,7 +26,7 @@ set -e -BUILD_DIR=public +BUILD_DIR=dist SOURCE_DIRECTORY_DEPLOY_GH=~/temp-gh-deploy-src CLONED_DIRECTORY_DEPLOY_GH=~/temp-gh-deploy-cloned