const Octokit = require('@octokit/core'); const octokit = new Octokit.Octokit({ auth: process.env.GITHUB_TOKEN || process.env.GITHUB_AUTH, }); const queryIssue = ({ title, id }) => { return octokit .request('GET /search/issues', { q: title, per_page: 5, }) .then(({ data }) => { const list = data.items .map((item) => { return { title: item.title, url: item.html_url, id: item.id, }; }) .filter((item) => { return item.id !== id; }); if (list.length > 0) { return ` > Issue Robot generation ### 以下的issue可能会帮助到你 : ${list .map((item) => { return `* [${item.title}](${item.url})`; }) .join('\n')}`; } return null; }) .then(async (markdown) => { return markdown; }); }; const findIssue = async (issueId) => { const { data } = await octokit.request('GET /repos/{owner}/{repo}/issues/{issue_number}', { owner: 'ant-design', repo: 'ant-design-pro', issue_number: issueId, }); return data; }; const closeIssue = async (issueId) => { await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', { owner: 'ant-design', repo: 'ant-design-pro', issue_number: issueId, state: 'closed', }); }; const replyCommit = async (issueId, markdown) => { await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', { owner: 'ant-design', repo: 'ant-design-pro', issue_number: issueId, body: markdown, }); }; const reply = async () => { const issueId = process.env.ISSUE_NUMBER; const issue = await findIssue(issueId); if (!issue.title || issue.title.length < 12) { replyCommit(issueId, '**请写标题!**'); closeIssue(issueId); return; } const markdown = await queryIssue({ title: issue.title, id: issue.id, }); replyCommit(issueId, markdown); }; reply();