mirror of
https://github.com/ant-design/ant-design.git
synced 2024-11-27 20:49:53 +08:00
ci: send Unconfirmed Issues to DingTalk (#50810)
Co-authored-by: afc163 <afc163@gmail.com>
This commit is contained in:
parent
b2b0d880fe
commit
a63b9e9ffa
97
.github/workflows/issue-schedule.yml
vendored
Normal file
97
.github/workflows/issue-schedule.yml
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
name: Issue Schedule
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '30 1 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
send-message:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Send Unconfirmed Issues to DingTalk
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
DINGDING_BOT_TOKEN: ${{ secrets.DINGDING_BOT_TOKEN }}
|
||||||
|
actionTitle: '近 7 天未确认的 issue'
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const dingdingTokenKey = process.env.DINGDING_BOT_TOKEN;
|
||||||
|
|
||||||
|
const fromNow = (data) => {
|
||||||
|
const relativeTimeFormat = new Intl.RelativeTimeFormat('zh-CN');
|
||||||
|
const date = new Date(data);
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
const diffInSeconds = Math.floor((now - date) / 1000);
|
||||||
|
const diffInMinutes = Math.floor(diffInSeconds / 60);
|
||||||
|
const diffInHours = Math.floor(diffInMinutes / 60);
|
||||||
|
const diffInDays = Math.floor(diffInHours / 24);
|
||||||
|
|
||||||
|
if (diffInDays > 0) {
|
||||||
|
return relativeTimeFormat.format(-diffInDays, 'day');
|
||||||
|
} else if (diffInHours > 0) {
|
||||||
|
return relativeTimeFormat.format(-diffInHours, 'hour');
|
||||||
|
} else if (diffInMinutes > 0) {
|
||||||
|
return relativeTimeFormat.format(-diffInMinutes, 'minute');
|
||||||
|
} else {
|
||||||
|
return relativeTimeFormat.format(-diffInSeconds, 'second');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await fetch('https://api.github.com/search/issues?q=repo:ant-design/ant-design&is:open+is:issue+label:unconfirmed&per_page=100');
|
||||||
|
const data = await response.json();
|
||||||
|
const issueList = [];
|
||||||
|
for (const item of data.items) {
|
||||||
|
const { created_at, html_url, pull_request, state, title, labels } = item;
|
||||||
|
const createdAt = new Date(created_at);
|
||||||
|
const now = new Date();
|
||||||
|
const diffTime = Math.abs(now - createdAt);
|
||||||
|
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
|
||||||
|
const isUnconfirmed = labels.some(label => label.name === 'unconfirmed');
|
||||||
|
|
||||||
|
if (!isUnconfirmed) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (diffDays > 7) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pull_request && !html_url.includes('pull') && state === 'open') {
|
||||||
|
issueList.push({
|
||||||
|
html_url,
|
||||||
|
created_at,
|
||||||
|
title
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actionTitle = process.env.actionTitle + `(${issueList.length})`;
|
||||||
|
|
||||||
|
const markdownList = `<h2>${actionTitle}</h2>\n\n`
|
||||||
|
+ issueList.map(issue => `- [${issue.title}](${issue.html_url}) ${fromNow(issue.created_at)}`).join('\n')
|
||||||
|
+ `\n\n > 🫵🏻 快去帮忙处理吧,社区需要你的帮助!`;
|
||||||
|
|
||||||
|
console.log(markdownList);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await fetch(
|
||||||
|
`https://oapi.dingtalk.com/robot/send?access_token=${dingdingTokenKey}`,
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
msgtype: 'markdown',
|
||||||
|
markdown: {
|
||||||
|
title: actionTitle,
|
||||||
|
text: markdownList,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('发送失败, error:', error);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user