storybook/scripts/chromatic-sandboxes.ts
2022-08-10 15:39:53 +10:00

59 lines
1.6 KiB
TypeScript

import { basename, join, resolve } from 'path';
import { createOptions, getOptionsOrPrompt } from './utils/options';
import { oncePerTemplate } from './once-per-template';
const scriptName = basename(__filename, 'ts');
const codeDir = resolve(__dirname, '../code');
const builtDir = resolve(__dirname, '../built-sandboxes');
const logger = console;
export const options = createOptions({
cadence: {
type: 'string',
description: 'What cadence are we running on (i.e. which templates should we use)?',
values: ['ci', 'daily', 'weekly'] as const,
required: true,
},
junit: {
type: 'string',
description: 'Report results to junit XML file at path',
},
});
async function run() {
const { cadence, junit } = await getOptionsOrPrompt(`yarn ${scriptName}`, options);
return oncePerTemplate({
step: 'Running Chromatic',
cd: false,
cadence,
parallel: false,
junit: undefined,
scriptName: 'chromatic',
templateCommand: (template) => ({
command: [
`npx chromatic`,
`--storybook-build-dir=${join(builtDir, template.replace('/', '-'))}`,
`--junit-report=${resolve(
codeDir,
junit.replace('.xml', `-${template.replace('/', '-')}.xml`)
)}`,
].join(' '),
execaOptions: {
env: {
CHROMATIC_PROJECT_TOKEN:
process.env[`CHROMATIC_TOKEN_${template.toUpperCase().replace(/\/|-/g, '_')}`],
},
},
}),
});
}
if (require.main === module) {
run().catch((err) => {
logger.error(`🚨 An error occurred when executing "${scriptName}":`);
logger.error(err);
process.exit(1);
});
}