Milestone 0: import zappier billing, Verae middleware, and Zapier research
Compose-ready workspace: packages/zappier (rate card, portal, Stripe), packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier (CLI app), vendor/zapier-platform, and research/zapier vendor corpus. Gate 0 structure checks pass. Product code and research are not yet wired.
This commit is contained in:
commit
b4150c8250
1364 changed files with 6814366 additions and 0 deletions
49
vendor/zapier-platform/packages/cli/scripts/docs.js
vendored
Normal file
49
vendor/zapier-platform/packages/cli/scripts/docs.js
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
|
||||
const fs = require('node:fs');
|
||||
|
||||
const { COMMANDS } = require('../src/oclif/oCommands');
|
||||
|
||||
// Takes all the cmd.docs and puts them into a big md file.
|
||||
const generateCliMarkdown = () => {
|
||||
return (
|
||||
Object.keys(COMMANDS)
|
||||
.sort()
|
||||
// topics (such as `env` are listed as "true" in the commands so aliases play nice, but they don't need to be in docs
|
||||
.filter((name) => COMMANDS[name] !== true)
|
||||
.filter((name) => !COMMANDS[name].hide)
|
||||
.map((name) => {
|
||||
return COMMANDS[name].markdownHelp(name);
|
||||
})
|
||||
.join('\n\n\n')
|
||||
);
|
||||
};
|
||||
|
||||
// Writes out a big markdown file for the cli.
|
||||
const writeCliDocs = ({ markdownPath } = {}) => {
|
||||
const docs = generateCliMarkdown();
|
||||
|
||||
fs.writeFileSync(
|
||||
markdownPath,
|
||||
`\
|
||||
# Zapier CLI Command Reference
|
||||
|
||||
These are the generated docs for all Zapier platform CLI commands.
|
||||
|
||||
You can install the CLI with \`npm install -g zapier-platform-cli\`.
|
||||
|
||||
${'```'}bash
|
||||
$ npm install -g zapier-platform-cli
|
||||
${'```'}
|
||||
|
||||
# Commands
|
||||
|
||||
${docs}
|
||||
`,
|
||||
);
|
||||
};
|
||||
|
||||
writeCliDocs({
|
||||
markdownPath: './docs/cli.md',
|
||||
});
|
||||
160
vendor/zapier-platform/packages/cli/scripts/set-app-template-versions.js
vendored
Executable file
160
vendor/zapier-platform/packages/cli/scripts/set-app-template-versions.js
vendored
Executable file
|
|
@ -0,0 +1,160 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const _ = require('lodash');
|
||||
const path = require('path');
|
||||
const tmp = require('tmp');
|
||||
const { promisifyAll } = require('../src/utils/promisify');
|
||||
const appTemplates = require('../src/app-templates');
|
||||
const versionStore = require('../src/version-store');
|
||||
|
||||
const fse = require('fs-extra');
|
||||
const semver = require('semver');
|
||||
const yaml = require('yamljs');
|
||||
const childProcess = promisifyAll(require('child_process'));
|
||||
|
||||
const CLONE_URL_PREFIX = 'git@github.com:zapier/zapier-platform-example-app';
|
||||
const PACKAGES_NAMES = 'node, npm, and zapier-platform-core';
|
||||
let packagesVersions;
|
||||
|
||||
const newCoreVersion = process.argv[2];
|
||||
if (!newCoreVersion) {
|
||||
console.error('Usage: npm run set-template-version [NEW_CORE_VERSION]');
|
||||
/* eslint no-process-exit: 0 */
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const newVersions = versionStore[semver.parse(newCoreVersion).major];
|
||||
newVersions.coreVersion = newCoreVersion;
|
||||
|
||||
const exec = (cmd, cwd) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
childProcess.exec(cmd, { cwd }, (err) => {
|
||||
if (err) {
|
||||
console.error('error:', err);
|
||||
reject(err);
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const hasCurrentVersions = (newVersion, travisNodeVersion, packageJson) => {
|
||||
return (
|
||||
packageJson.dependencies['zapier-platform-core'] ===
|
||||
newVersion.coreVersion &&
|
||||
packageJson.engines.node === newVersion.nodeVersion &&
|
||||
packageJson.engines.npm === newVersion.npmVersion &&
|
||||
travisNodeVersion === newVersion.nodeVersion
|
||||
);
|
||||
};
|
||||
|
||||
const setVersion = (template, rootTmpDir) => {
|
||||
const repoName = `zapier-platform-example-app-${template}`;
|
||||
const repoDir = path.resolve(rootTmpDir, repoName);
|
||||
const cloneUrl = `${CLONE_URL_PREFIX}-${template}`;
|
||||
var cmd = `git clone ${cloneUrl}`;
|
||||
packagesVersions = `${newVersions.nodeVersion}, ${newVersions.npmVersion}, and ${newVersions.coreVersion}`;
|
||||
|
||||
console.log(
|
||||
`Setting versions of ${PACKAGES_NAMES} to ${packagesVersions} respectively in ${template} app template.`,
|
||||
);
|
||||
console.log(`cloning ${cloneUrl}\n`);
|
||||
|
||||
return exec(cmd, rootTmpDir)
|
||||
.then(() => {
|
||||
const packageJsonFile = path.resolve(
|
||||
rootTmpDir,
|
||||
`${repoName}/package.json`,
|
||||
);
|
||||
const packageJson = require(packageJsonFile);
|
||||
|
||||
const travisYamlFile = path.resolve(
|
||||
rootTmpDir,
|
||||
`${repoName}/.travis.yml`,
|
||||
);
|
||||
const travisYaml = yaml.load(travisYamlFile);
|
||||
|
||||
if (hasCurrentVersions(newVersions, travisYaml.node_js[0], packageJson)) {
|
||||
return 'skip';
|
||||
}
|
||||
|
||||
packageJson.dependencies['zapier-platform-core'] =
|
||||
newVersions.coreVersion;
|
||||
packageJson.engines.node = newVersions.nodeVersion;
|
||||
packageJson.engines.npm = newVersions.npmVersion;
|
||||
const json = JSON.stringify(packageJson, null, 2);
|
||||
fse.writeFileSync(packageJsonFile, json);
|
||||
|
||||
travisYaml.node_js[0] = newVersions.nodeVersion;
|
||||
return fse.writeFile(travisYamlFile, yaml.stringify(travisYaml, null, 2));
|
||||
})
|
||||
.then((result) => {
|
||||
if (result === 'skip') {
|
||||
return result;
|
||||
}
|
||||
|
||||
cmd = `git commit package.json .travis.yml -m "update ${PACKAGES_NAMES} versions to ${packagesVersions} respectively."`;
|
||||
return exec(cmd, repoDir);
|
||||
})
|
||||
.then((result) => {
|
||||
if (result === 'skip') {
|
||||
return result;
|
||||
}
|
||||
|
||||
cmd = 'git push origin master';
|
||||
return exec(cmd, repoDir);
|
||||
})
|
||||
.then((result) => {
|
||||
if (result === 'skip') {
|
||||
console.log(
|
||||
`${template} is already set to ${packagesVersions} for ${PACKAGES_NAMES} respectively, skipping`,
|
||||
);
|
||||
return 'skip';
|
||||
}
|
||||
console.log(
|
||||
`Set ${PACKAGES_NAMES} versions to ${packagesVersions} respectively on app template ${template} successfully.`,
|
||||
);
|
||||
return null;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(
|
||||
`Error setting ${PACKAGES_NAMES} versions for app template ${template}:`,
|
||||
err,
|
||||
);
|
||||
return template;
|
||||
});
|
||||
};
|
||||
|
||||
const rootTmpDir = tmp.tmpNameSync();
|
||||
fse.removeSync(rootTmpDir);
|
||||
fse.ensureDirSync(rootTmpDir);
|
||||
|
||||
const tasks = _.map(appTemplates, (template) =>
|
||||
setVersion(template, rootTmpDir),
|
||||
);
|
||||
|
||||
Promise.all(tasks).then((results) => {
|
||||
const failures = _.filter(
|
||||
results,
|
||||
(result) => result !== null && result !== 'skip',
|
||||
);
|
||||
const skipped = _.filter(results, (result) => result === 'skip');
|
||||
const successCount = tasks.length - failures.length - skipped.length;
|
||||
|
||||
if (failures.length) {
|
||||
console.error(
|
||||
`failed to set ${PACKAGES_NAMES} versions on these templates:`,
|
||||
failures.join(', '),
|
||||
);
|
||||
}
|
||||
if (skipped.length) {
|
||||
console.log(
|
||||
`skipped ${skipped.length} templates because versions for ${PACKAGES_NAMES} were already set to ${packagesVersions} respectively`,
|
||||
);
|
||||
}
|
||||
if (successCount) {
|
||||
console.log(
|
||||
`Successfully updated versions in ${successCount} app templates`,
|
||||
);
|
||||
}
|
||||
});
|
||||
69
vendor/zapier-platform/packages/cli/scripts/validate-app-templates.js
vendored
Executable file
69
vendor/zapier-platform/packages/cli/scripts/validate-app-templates.js
vendored
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const _ = require('lodash');
|
||||
const path = require('path');
|
||||
const tmp = require('tmp');
|
||||
const { promisifyAll } = require('../src/utils/promisify');
|
||||
|
||||
const fse = require('fs-extra');
|
||||
const childProcess = promisifyAll(require('child_process'));
|
||||
|
||||
const appTemplates = require('../src/app-templates');
|
||||
|
||||
const validateAppTemplate = (template, rootTmpDir) => {
|
||||
// const appDir = path.resolve(rootTmpDir, template);
|
||||
const zapierCmd = path.resolve(__dirname, '../src/bin/run');
|
||||
|
||||
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 && ${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');
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue