diff options
| author | Kasra Bigdeli <[email protected]> | 2020-08-16 08:58:13 -0400 |
|---|---|---|
| committer | Kasra Bigdeli <[email protected]> | 2020-08-16 08:58:13 -0400 |
| commit | 7bab4b4afcc60edf01c96817de5c5c208a2904c6 (patch) | |
| tree | b8ffad8be07339fc7f5331f94bbbeeb9d6040edb /scripts | |
| parent | b643e1709a296c137832408d459abe36bbb8ca20 (diff) | |
| download | caprover-one-click-apps-7bab4b4afcc60edf01c96817de5c5c208a2904c6.tar.gz caprover-one-click-apps-7bab4b4afcc60edf01c96817de5c5c208a2904c6.zip | |
Validating v4
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/validate_apps.js | 138 | ||||
| -rw-r--r-- | scripts/validate_json.js | 104 |
2 files changed, 138 insertions, 104 deletions
diff --git a/scripts/validate_apps.js b/scripts/validate_apps.js new file mode 100644 index 0000000..5923fac --- /dev/null +++ b/scripts/validate_apps.js @@ -0,0 +1,138 @@ + /*jshint esversion: 6 */ + const path = require('path'); + const yaml = require('yaml'); + const fs = require('fs-extra'); + + const PUBLIC = `public`; + const pathOfPublic = path.join(__dirname, '..', PUBLIC); + + + // validating version 4 + function validateV4() { + + const version = '4'; + const pathOfVersion = path.join(pathOfPublic, 'v' + version); + const pathOfApps = path.join(pathOfVersion, 'apps'); + + return fs.readdir(pathOfApps) + .then(function (items) { + + const apps = items.filter(v => v.includes('.yml')); + + if (items.length !== apps.length) { + throw new Error('All files in v4 must end with .yml'); + } + + for (var i = 0; i < apps.length; i++) { + const contentString = fs.readFileSync(path.join(pathOfApps, apps[i]), 'utf-8'); + const content = yaml.parse(contentString); + const captainVersion = (content.captainVersion + ''); + const versionString = (version + ''); + if (versionString !== captainVersion) + throw new Error(`unmatched versions ${versionString} ${captainVersion} for ${apps[i]}`); + + apps[i] = apps[i].replace('.yml', ''); + + if (!content.caproverOneClickApp) { + throw new Error(`Cannot find caproverOneClickApp for ${apps[i]}`); + } + + if (!content.caproverOneClickApp.description) { + throw new Error(`Cannot find description for ${apps[i]}`); + } + + if (!content.caproverOneClickApp.instructions || + !content.caproverOneClickApp.instructions.start || + !content.caproverOneClickApp.instructions.end) { + throw new Error(`Cannot find instructions.start or instructions.end for ${apps[i]}`); + } + + if (!content.services) { + throw new Error(`Cannot find services for ${apps[i]}`); + } + + Object.keys(content.services).forEach( + (serviceName) => { // jshint ignore:line + const s = content.services[serviceName]; + if (s.image && s.image.endsWith(':latest')) { + throw new Error(`"latest" tag is not allowed as it can change and break the setup, see ${apps[i]}`); + } + }); + + const logoFileName = apps[i] + '.png'; + + const logoFullPath = path.join(pathOfVersion, 'logos', logoFileName); + + if (!fs.existsSync(logoFullPath) || + !fs.statSync(logoFullPath).isFile()) { + let printablePath = logoFullPath; + printablePath = printablePath.substr(printablePath.indexOf(`/${PUBLIC}`)); + throw new Error(`Cannot find logo for ${apps[i]} ${printablePath}`); + } + + console.log(`Validated ${apps[i]}`); + + } + + }); + } + + // validating version 2 + function validateV2() { + + const version = '2'; + const pathOfVersion = path.join(pathOfPublic, 'v' + version); + const pathOfApps = path.join(pathOfVersion, 'apps'); + + return fs.readdir(pathOfApps) + .then(function (items) { + + const apps = items.filter(v => v.includes('.json')); + + if (items.length !== apps.length) { + throw new Error('All files in v2 must end with .json'); + } + + 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]}`); + + apps[i] = apps[i].replace('.json', ''); + + if (!content.description) { + throw new Error(`Cannot find description for ${apps[i]}`); + } + + const logoFileName = apps[i] + '.png'; + + const logoFullPath = path.join(pathOfVersion, 'logos', logoFileName); + + if (!fs.existsSync(logoFullPath) || + !fs.statSync(logoFullPath).isFile()) { + let printablePath = logoFullPath; + printablePath = printablePath.substr(printablePath.indexOf(`/${PUBLIC}`)); + throw new Error(`Cannot find logo for ${apps[i]} ${printablePath}`); + } + + console.log(`Validated ${apps[i]}`); + + } + + }); + } + + Promise.resolve() + .then(function () { + return validateV2(); + }) + .then(function () { + return validateV4(); + }) + .catch(function (err) { + console.error(err); + process.exit(127); + });
\ No newline at end of file diff --git a/scripts/validate_json.js b/scripts/validate_json.js deleted file mode 100644 index 3e58338..0000000 --- a/scripts/validate_json.js +++ /dev/null @@ -1,104 +0,0 @@ - /*jshint esversion: 6 */ - const path = require('path'); - const fs = require('fs-extra'); - - const PUBLIC = `public`; - const pathOfPublic = path.join(__dirname, '..', PUBLIC); - - - // validating version 4 - // function validateV4() { - - // const version = '2'; - // const pathOfVersion = path.join(pathOfPublic, 'v' + version); - // const pathOfApps = path.join(pathOfVersion, 'apps'); - - // return fs.readdir(pathOfApps) - // .then(function (items) { - - // const apps = items.filter(v => v.includes('.json')); - - // 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]}`); - - // apps[i] = apps[i].replace('.json', ''); - - // if (!content.description){ - // throw new Error(`Cannot find description for ${apps[i]}`); - // } - - // const logoFileName = apps[i] + '.png'; - - // const logoFullPath = path.join(pathOfVersion, 'logos', logoFileName); - - // if (!fs.existsSync(logoFullPath) || - // !fs.statSync(logoFullPath).isFile()) { - // let printablePath = logoFullPath; - // printablePath = printablePath.substr(printablePath.indexOf(`/${PUBLIC}`)); - // throw new Error(`Cannot find logo for ${apps[i]} ${printablePath}`); - // } - - // console.log(`Validated ${apps[i]}`); - - // } - - // }); - // } - - // validating version 2 - function validateV2() { - - const version = '2'; - const pathOfVersion = path.join(pathOfPublic, 'v' + version); - const pathOfApps = path.join(pathOfVersion, 'apps'); - - return fs.readdir(pathOfApps) - .then(function (items) { - - const apps = items.filter(v => v.includes('.json')); - - 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]}`); - - apps[i] = apps[i].replace('.json', ''); - - if (!content.description) { - throw new Error(`Cannot find description for ${apps[i]}`); - } - - const logoFileName = apps[i] + '.png'; - - const logoFullPath = path.join(pathOfVersion, 'logos', logoFileName); - - if (!fs.existsSync(logoFullPath) || - !fs.statSync(logoFullPath).isFile()) { - let printablePath = logoFullPath; - printablePath = printablePath.substr(printablePath.indexOf(`/${PUBLIC}`)); - throw new Error(`Cannot find logo for ${apps[i]} ${printablePath}`); - } - - console.log(`Validated ${apps[i]}`); - - } - - }); - } - - Promise.resolve() - .then(function () { - return validateV2(); - }) - .catch(function (err) { - console.error(err); - process.exit(127); - });
\ No newline at end of file |
