FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
opencode/script/github/close-issues.ts at dev · webpro/opencode · GitHub
webpro
/
opencode
Public
forked from
anomalyco/opencode
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
opencode
/
script
/
github
/
close-issues.ts
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
115 lines (97 loc) · 3.13 KB
Breadcrumbs
opencode
/
script
/
github
/
close-issues.ts
Copy path
File metadata and controls
executable file
·
115 lines (97 loc) · 3.13 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env bun
const
repo
=
"anomalyco/opencode"
const
days
=
60
const
msg
=
`To stay organized issues are automatically closed after
${
days
}
days of no activity. If the issue is still relevant please open a new one.`
const
token
=
process
.
env
.
GITHUB_TOKEN
if
(
!
token
)
{
console
.
error
(
"GITHUB_TOKEN environment variable is required"
)
process
.
exit
(
1
)
}
const
cutoff
=
new
Date
(
Date
.
now
(
)
-
days
*
24
*
60
*
60
*
1000
)
const
agentLogin
=
"opencode-agent[bot]"
const
teamMembers
=
new
Set
(
(
await
Bun
.
file
(
new
URL
(
"../../.github/TEAM_MEMBERS"
,
import
.
meta
.
url
)
)
.
text
(
)
)
.
split
(
"\n"
)
.
map
(
(
line
)
=>
line
.
trim
(
)
.
toLowerCase
(
)
)
.
filter
(
Boolean
)
,
)
const
teamAssociations
=
new
Set
(
[
"OWNER"
,
"MEMBER"
]
)
type
Issue
=
{
number
:
number
updated_at
:
string
author_association
:
string
user
:
{
login
:
string
}
|
null
}
const
headers
=
{
Authorization
:
`Bearer
${
token
}
`
,
"Content-Type"
:
"application/json"
,
Accept
:
"application/vnd.github+json"
,
"X-GitHub-Api-Version"
:
"2022-11-28"
,
}
function
shouldSkip
(
i
:
Issue
)
{
const
login
=
i
.
user
?.
login
.
toLowerCase
(
)
return
login
===
agentLogin
||
(
login
?
teamMembers
.
has
(
login
)
:
false
)
||
teamAssociations
.
has
(
i
.
author_association
)
}
async
function
close
(
num
:
number
)
{
const
base
=
`https://api.github.com/repos/
${
repo
}
/issues/
${
num
}
`
const
comment
=
await
fetch
(
`
${
base
}
/comments`
,
{
method
:
"POST"
,
headers
,
body
:
JSON
.
stringify
(
{
body
:
msg
}
)
,
}
)
if
(
!
comment
.
ok
)
throw
new
Error
(
`Failed to comment #
${
num
}
:
${
comment
.
status
}
${
comment
.
statusText
}
`
)
const
patch
=
await
fetch
(
base
,
{
method
:
"PATCH"
,
headers
,
body
:
JSON
.
stringify
(
{
state
:
"closed"
,
state_reason
:
"not_planned"
}
)
,
}
)
if
(
!
patch
.
ok
)
throw
new
Error
(
`Failed to close #
${
num
}
:
${
patch
.
status
}
${
patch
.
statusText
}
`
)
console
.
log
(
`Closed https://github.com/
${
repo
}
/issues/
${
num
}
`
)
}
async
function
main
(
)
{
let
page
=
1
let
closed
=
0
while
(
true
)
{
const
res
=
await
fetch
(
`https://api.github.com/repos/
${
repo
}
/issues?state=open&sort=updated&direction=asc&per_page=100&page=
${
page
}
`
,
{
headers
}
,
)
if
(
!
res
.
ok
)
throw
new
Error
(
res
.
statusText
)
const
all
=
(
await
res
.
json
(
)
)
as
Issue
[
]
if
(
all
.
length
===
0
)
break
console
.
log
(
`Fetched page
${
page
}
${
all
.
length
}
issues`
)
const
stale
:
number
[
]
=
[
]
for
(
const
i
of
all
)
{
const
updated
=
new
Date
(
i
.
updated_at
)
if
(
updated
<
cutoff
)
{
if
(
shouldSkip
(
i
)
)
{
console
.
log
(
`Skipping stale issue #
${
i
.
number
}
; author
${
i
.
user
?.
login
??
"unknown"
}
is exempt`
)
continue
}
stale
.
push
(
i
.
number
)
}
else
{
console
.
log
(
`\nFound fresh issue #
${
i
.
number
}
, stopping`
)
if
(
stale
.
length
>
0
)
{
for
(
const
num
of
stale
)
{
await
close
(
num
)
closed
++
}
}
console
.
log
(
`Closed
${
closed
}
issues total`
)
return
}
}
if
(
stale
.
length
>
0
)
{
for
(
const
num
of
stale
)
{
await
close
(
num
)
closed
++
}
}
page
++
}
console
.
log
(
`Closed
${
closed
}
issues total`
)
}
main
(
)
.
catch
(
(
err
)
=>
{
console
.
error
(
"Error:"
,
err
)
process
.
exit
(
1
)
}
)
Back
|
FazBrowse Home
|
New Git URL