forked from ChrisTitusTech/winutil
-
Notifications
You must be signed in to change notification settings - Fork 0
79 lines (72 loc) · 2.85 KB
/
close-old-issues.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
name: Close Inactive Issues
on:
schedule:
- cron: '0 0 * * *' # Run daily
workflow_dispatch: # This line enables manual triggering
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write # Ensure necessary permissions for issues
steps:
- name: Close inactive issues
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const octokit = github;
// Get the repository owner and name
const { owner, repo } = context.repo;
// Define the inactivity period (14 days)
const inactivityPeriod = new Date();
inactivityPeriod.setDate(inactivityPeriod.getDate() - 14);
const labelKeepIssue = 'Keep Issue Open';
try {
// Get all open issues with pagination
for await (const response of octokit.paginate.iterator(octokit.rest.issues.listForRepo, {
owner,
repo,
state: 'open',
})) {
const issues = response.data;
// Close issues inactive for more than the inactivity period
for (const issue of issues) {
const respondIssueLabels = await octokit.request("GET /repos/{owner}/{repo}/issues/{issue_number}/labels", {
owner: owner,
repo: repo,
issue_number: issue.number
});
const labels = respondIssueLabels.data;
console.log(`${JSON.stringify(labels, null, 4)}`);
for (const label in labels) {
console.log(`${label.name}`);
if (label.name === labelKeepIssue) {
console.log(`Issue #${issue.number} will not be closed`);
}
}
// const lastCommentDate = issue.updated_at;
// if (new Date(lastCommentDate) < inactivityPeriod) {
// try {
// // Close the issue
// await octokit.rest.issues.update({
// owner,
// repo,
// issue_number: issue.number,
// state: 'closed',
// });
// // Add a comment
// await octokit.rest.issues.createComment({
// owner,
// repo,
// issue_number: issue.number,
// body: 'Closed due to inactivity',
// });
// } catch (error) {
// console.error(`Error updating or commenting on issue #${issue.number}: ${error}`);
// }
// }
}
}
} catch (error) {
console.error(`Error fetching issues: ${error}`);
}