You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.9 KiB
85 lines
1.9 KiB
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();
|
|
|