|
|
@@ -0,0 +1,85 @@
|
|
|
+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 < 6) {
|
|
|
+ replyCommit(issueId, '**请写标题!**');
|
|
|
+ closeIssue(issueId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const markdown = await queryIssue({
|
|
|
+ title: issue.title,
|
|
|
+ id: issue.id,
|
|
|
+ });
|
|
|
+ replyCommit(issueId, markdown);
|
|
|
+};
|
|
|
+
|
|
|
+reply();
|