File tree 3 files changed +72
-0
lines changed
3 files changed +72
-0
lines changed Original file line number Diff line number Diff line change
1
+ on :
2
+ issues :
3
+ types : labeled
4
+ workflow_dispatch :
5
+ schedule :
6
+ - cron : ' */5 * * * *'
7
+
8
+ permissions :
9
+ issues : write
10
+ contents : read
11
+
12
+ name : Label and close issues with no recent activity
13
+
14
+ env :
15
+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
16
+ NEEDS_ATTENTION_LABEL : " Needs attention"
17
+ NEEDS_AUTHOR_FEEDBACK_LABEL : " Needs author feedback"
18
+ NO_RECENT_ACTIVITY_LABEL : " No recent activity"
19
+ NO_RECENT_ACTIVITY_DURATION_IN_DAYS : 7
20
+ NO_RECENT_ACTIVITY_DURATION_CLOSE_IN_DAYS : 28
21
+ ORG_NAME : ${{ github.repository_owner }}
22
+ REPO_NAME : ${{ github.event.repository.name }}
23
+ NO_RECENT_ACTIVITY_COMMENT : " This issue has been labeled with `No recent activity` because there has been no recent activity. It will be closed if no further activity occurs within 28 days. Please re-open this issue or open a new one after this delay if you need to."
24
+
25
+
26
+ jobs :
27
+ run :
28
+ runs-on : ubuntu-latest
29
+ name : Label issues with no recent activity
30
+ steps :
31
+ - uses : actions/checkout@v4
32
+ - run : scripts/label-no-recent.ps1
33
+ shell : pwsh
34
+ - run : scripts/close-no-recent.ps1
35
+ shell : pwsh
Original file line number Diff line number Diff line change
1
+ $inactivityDelay = [timespan ]::FromDays([int ]::Parse($Env: NO_RECENT_ACTIVITY_DURATION_CLOSE_IN_DAYS ))
2
+ $oldIssues = gh issue list -- label " $Env: NO_RECENT_ACTIVITY_LABEL " -- state open -- limit 100 -- json number, author, createdAt | ConvertFrom-Json
3
+ foreach ($oldIssue in $oldIssues ) {
4
+ $lastComment = gh issue view $oldIssue.number -- json comments | ConvertFrom-Json | Select-Object - ExpandProperty comments | Where-Object {$_.author.login -eq $oldIssue.author.login } | Select-Object - Last 1
5
+ if ($null -eq $lastComment ) {
6
+ $lastCommentDate = [datetime ]::Parse($oldIssue.createdAt )
7
+
8
+ } else {
9
+ $lastCommentDate = [datetime ]::Parse($lastComment.createdAt )
10
+ }
11
+ $lastLabelEvent = gh api - H " Accept: application/vnd.github+json" - H " X-GitHub-Api-Version: 2022-11-28" " /repos/$ ( $Env: ORG_NAME ) /$ ( $Env: REPO_NAME ) /issues/$ ( $oldIssue.number ) /events?per_page=100" | ConvertFrom-Json | Where-Object {$_.event -eq " labeled" -and $_.label.name -eq " $Env: NO_RECENT_ACTIVITY_LABEL " } | Select-Object - Last 1
12
+ $lastLabelEventDate = [datetime ]::Parse($lastLabelEvent.created_at )
13
+ if ($lastCommentDate -gt $lastLabelEventDate ) {
14
+ gh issue edit $oldIssue.number -- remove-label " $Env: NO_RECENT_ACTIVITY_LABEL " -- remove-label " $Env: NEEDS_AUTHOR_FEEDBACK_LABEL " -- add-label " $Env: NEEDS_ATTENTION_LABEL "
15
+ } elseif (($lastCommentDate - $lastLabelEventDate ) -le $inactivityDelay ) {
16
+ gh issue close $oldIssue.number - r " not planned"
17
+ }
18
+ }
Original file line number Diff line number Diff line change
1
+ $inactivityDelay = [timespan ]::FromDays([int ]::Parse($Env: NO_RECENT_ACTIVITY_DURATION_IN_DAYS ))
2
+ $oldIssues = gh issue list -- label " $Env: NEEDS_AUTHOR_FEEDBACK_LABEL " -- state open -- limit 100 -- json number, author, createdAt | ConvertFrom-Json
3
+ foreach ($oldIssue in $oldIssues ) {
4
+ $lastComment = gh issue view $oldIssue.number -- json comments | ConvertFrom-Json | Select-Object - ExpandProperty comments | Where-Object {$_.author.login -eq $oldIssue.author.login } | Select-Object - Last 1
5
+ if ($null -eq $lastComment ) {
6
+ $lastCommentDate = [datetime ]::Parse($oldIssue.createdAt )
7
+
8
+ } else {
9
+ $lastCommentDate = [datetime ]::Parse($lastComment.createdAt )
10
+ }
11
+ $lastLabelEvent = gh api - H " Accept: application/vnd.github+json" - H " X-GitHub-Api-Version: 2022-11-28" " /repos/$ ( $Env: ORG_NAME ) /$ ( $Env: REPO_NAME ) /issues/$ ( $oldIssue.number ) /events?per_page=100" | ConvertFrom-Json | Where-Object {$_.event -eq " labeled" -and $_.label.name -eq " $Env: NEEDS_AUTHOR_FEEDBACK_LABEL " } | Select-Object - Last 1
12
+ $lastLabelEventDate = [datetime ]::Parse($lastLabelEvent.created_at )
13
+ if ($lastCommentDate -gt $lastLabelEventDate ) {
14
+ gh issue edit $oldIssue.number -- remove-label " $Env: NO_RECENT_ACTIVITY_LABEL " -- remove-label " $Env: NEEDS_AUTHOR_FEEDBACK_LABEL " -- add-label " $Env: NEEDS_ATTENTION_LABEL "
15
+ } elseif (($lastCommentDate - $lastLabelEventDate ) -le $inactivityDelay ) {
16
+ gh issue edit $oldIssue.number -- add-label " $Env: NO_RECENT_ACTIVITY_LABEL " -- remove-label " $Env: NEEDS_ATTENTION_LABEL "
17
+ gh issue comment $oldIssue.number - b " $Env: NO_RECENT_ACTIVITY_COMMENT "
18
+ }
19
+ }
You can’t perform that action at this time.
0 commit comments