import { spawn } from 'child_process'; import { promisify } from 'util'; import { readdir as readdirRaw, writeFile as writeFileRaw, readFileSync, existsSync } from 'fs'; import { join } from 'path'; import program from 'commander'; import prompts from 'prompts'; import chalk from 'chalk'; import { getDeployables } from './utils/list-examples'; import { filterDataForCurrentCircleCINode } from './utils/concurrency'; program .option( '--skip ', 'Skip an example, accepts multiple values like "--skip vue-kitchen-sink"', (value, previous) => previous.concat([value]), [] ) .option('--all', `run e2e tests for every example`, false); program.parse(process.argv); const { all: shouldRunAllExamples, args: exampleArgs, skip: examplesToSkip } = program; const readdir = promisify(readdirRaw); const writeFile = promisify(writeFileRaw); const p = (l) => join(__dirname, '..', 'code', ...l); const logger = console; const exec = async (command, args = [], options = {}) => new Promise((resolve, reject) => { const child = spawn(command, args, { ...options, stdio: 'inherit', shell: true, }); child .on('close', (code) => { if (code) { reject(); } else { resolve(); } }) .on('error', (e) => { logger.error(e); reject(); }); }); const hasBuildScript = (l) => { const text = readFileSync(l, 'utf8'); const json = JSON.parse(text); return !!json.scripts['build-storybook']; }; const createContent = (deployables) => { return `