UNPKG

zapier-platform-cli

Version:

The CLI for apps in the Zapier Developer Platform.

64 lines (53 loc) 2.17 kB
#!/usr/bin/env node const _ = require('lodash'); const path = require('path'); const tmp = require('tmp'); const utils = require('../lib/utils'); const fse = require('fs-extra'); const childProcess = utils.promisifyAll(require('child_process')); const appTemplates = require('../lib/app-templates'); const validateAppTemplate = (template, rootTmpDir) => { //const appDir = path.resolve(rootTmpDir, template); const zapierCmd = path.resolve(__dirname, '../zapier.js'); const extraCmd = (template === 'babel') ? ' && npm run zapier-build' : ''; const logFile = path.resolve(__dirname, '..', `${template}.log`); const logStream = fse.createWriteStream(logFile); console.log(`Validating ${template} app template, writing logs to ${logFile}`); return fse.ensureFile(logFile) .then(() => { return new Promise((resolve, reject) => { const cmd = `${zapierCmd} init ${template} --template=${template} --debug && cd ${template} && npm install ${extraCmd} && ${zapierCmd} validate && export CLIENT_ID=1234 CLIENT_SECRET=asdf && ${zapierCmd} test --timeout=5000`; const child = childProcess.exec(cmd, {cwd: rootTmpDir}, err => { if (err) { console.log('error starting child process:', err); reject(err); } resolve(); }); child.stdout.pipe(logStream); child.stderr.pipe(logStream); }); }) .then(() => { console.log(`${template} template validated successfully`); return null; }) .catch(() => { console.error(`${template} template validation failed. See ${logFile}.`); return template; }); }; global.argOpts = {}; const rootTmpDir = tmp.tmpNameSync(); fse.removeSync(rootTmpDir); fse.ensureDirSync(rootTmpDir); const tasks = _.map(appTemplates, template => validateAppTemplate(template, rootTmpDir)); Promise.all(tasks) .then(results => { const failures = _.filter(results, result => result !== null); if (failures.length) { console.error('these app templates failed to validate:', failures.join(', ')); } else { console.log('app templates validated successfully'); } });