mirror of
https://github.com/storybookjs/storybook.git
synced 2025-03-18 05:02:24 +08:00
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
|
/* eslint-disable no-console */
|
||
|
import { command } from 'execa';
|
||
|
import { readJson } from 'fs-extra';
|
||
|
import { join } from 'path';
|
||
|
|
||
|
type Branch = 'main' | 'next' | 'alpha';
|
||
|
type Workflow = 'merged' | 'daily';
|
||
|
|
||
|
const getFooter = async (branch: Branch, workflow: Workflow, job: string) => {
|
||
|
if (job === 'chromatic-sandboxes') {
|
||
|
return `\n\nThis might not necessarily be a bug, it could be a visual diff that you have to review and approve. Please check it!`;
|
||
|
}
|
||
|
|
||
|
if (branch === 'alpha') {
|
||
|
const packageJson = await readJson(join(__dirname, '..', 'code', 'package.json'));
|
||
|
|
||
|
// running in alpha branch we should just show the version which failed
|
||
|
return `\n**Version: ${packageJson.version}**`;
|
||
|
}
|
||
|
|
||
|
const mergeCommits =
|
||
|
workflow === 'merged'
|
||
|
? // show single merge for merged workflow
|
||
|
`git log -1 --pretty=format:"\`%h\` %<(12)%ar %s [%an]"`
|
||
|
: // show last 24h merges for daily workflow
|
||
|
`git log --merges --since="24 hours ago" --pretty=format:"\`%h\` %<(12)%ar %s [%an]"`;
|
||
|
|
||
|
const result = await command(mergeCommits, { shell: true });
|
||
|
const formattedResult = result.stdout
|
||
|
// discord needs escaped line breaks
|
||
|
.replace(/\n/g, '\\n')
|
||
|
// make links out of pull request ids
|
||
|
.replace('Merge pull request #', 'https://github.com/storybookjs/storybook/pull/');
|
||
|
|
||
|
return `\n\n**Relevant PRs:**\n${formattedResult}`;
|
||
|
};
|
||
|
|
||
|
// This command is run in Circle CI on failures, to get a rich message to report to Discord
|
||
|
// Usage: yarn get-report-message type workflow branch
|
||
|
async function run() {
|
||
|
const [, , workflow = '', template = ''] = process.argv;
|
||
|
|
||
|
if (!workflow || !template) {
|
||
|
throw new Error('[get-report-message] Missing workflow or template arguments.');
|
||
|
}
|
||
|
|
||
|
const { CIRCLE_BRANCH: currentBranch = '', CIRCLE_JOB: currentJob = '' } = process.env;
|
||
|
|
||
|
if (!currentBranch || !currentJob) {
|
||
|
throw new Error(
|
||
|
'[get-report-message] Missing CIRCLE_BRANCH or CIRCLE_JOB environment variables.'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const title = `Oh no! The **${currentJob}** job has failed${
|
||
|
template ? ` for **${template}**.` : '.'
|
||
|
}`;
|
||
|
const body = `\n\n**Branch**: ${currentBranch}\n**Workflow:** ${workflow}`;
|
||
|
const footer = await getFooter(currentBranch as Branch, workflow as Workflow, currentJob);
|
||
|
|
||
|
console.log(`${title}${body}${footer}`);
|
||
|
}
|
||
|
|
||
|
if (require.main === module) {
|
||
|
run().catch((err) => {
|
||
|
console.error(err);
|
||
|
process.exit(1);
|
||
|
});
|
||
|
}
|