issue.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. const Octokit = require('@octokit/core');
  2. const octokit = new Octokit.Octokit({
  3. auth: process.env.GITHUB_TOKEN || process.env.GITHUB_AUTH,
  4. });
  5. const queryIssue = ({ title, id }) => {
  6. return octokit
  7. .request('GET /search/issues', {
  8. q: title,
  9. per_page: 5,
  10. })
  11. .then(({ data }) => {
  12. const list = data.items
  13. .map((item) => {
  14. return {
  15. title: item.title,
  16. url: item.html_url,
  17. id: item.id,
  18. };
  19. })
  20. .filter((item) => {
  21. return item.id !== id;
  22. });
  23. if (list.length > 0) {
  24. return `
  25. > Issue Robot generation
  26. ### 以下的issue可能会帮助到你 :
  27. ${list
  28. .map((item) => {
  29. return `* [${item.title}](${item.url})`;
  30. })
  31. .join('\n')}`;
  32. }
  33. return null;
  34. })
  35. .then(async (markdown) => {
  36. return markdown;
  37. });
  38. };
  39. const findIssue = async (issueId) => {
  40. const { data } = await octokit.request('GET /repos/{owner}/{repo}/issues/{issue_number}', {
  41. owner: 'ant-design',
  42. repo: 'ant-design-pro',
  43. issue_number: issueId,
  44. });
  45. return data;
  46. };
  47. const closeIssue = async (issueId) => {
  48. await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', {
  49. owner: 'ant-design',
  50. repo: 'ant-design-pro',
  51. issue_number: issueId,
  52. state: 'closed',
  53. });
  54. };
  55. const replyCommit = async (issueId, markdown) => {
  56. await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', {
  57. owner: 'ant-design',
  58. repo: 'ant-design-pro',
  59. issue_number: issueId,
  60. body: markdown,
  61. });
  62. };
  63. const reply = async () => {
  64. const issueId = process.env.ISSUE_NUMBER;
  65. const issue = await findIssue(issueId);
  66. if (!issue.title || issue.title.length < 12) {
  67. replyCommit(issueId, '**请写标题!**');
  68. closeIssue(issueId);
  69. return;
  70. }
  71. const markdown = await queryIssue({
  72. title: issue.title,
  73. id: issue.id,
  74. });
  75. replyCommit(issueId, markdown);
  76. };
  77. reply();