Skip to content

Commit 86c4f52

Browse files
committed
Merge branch 'master' into release
2 parents f553217 + ed8d3cf commit 86c4f52

File tree

101 files changed

+8036
-1538
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+8036
-1538
lines changed

.buildkite/pipeline.yml

-16
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
name: Auto Label Issues
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
workflow_dispatch:
7+
inputs:
8+
label-all-issues:
9+
description: 'Add label to all open issues'
10+
type: boolean
11+
default: false
12+
required: false
13+
14+
jobs:
15+
add-label-single:
16+
runs-on: ubuntu-latest
17+
if: |
18+
github.event_name == 'issue_comment' &&
19+
github.event.issue.user.login != github.event.comment.user.login
20+
21+
steps:
22+
- name: Check if commenter is maintainer
23+
id: check-maintainer
24+
uses: actions/github-script@v7
25+
with:
26+
script: |
27+
const response = await github.rest.repos.getCollaboratorPermissionLevel({
28+
owner: context.repo.owner,
29+
repo: context.repo.repo,
30+
username: context.payload.comment.user.login
31+
});
32+
33+
const isMaintianer = ['admin', 'write'].includes(response.data.permission);
34+
return isMaintianer;
35+
36+
- name: Add waiting-for-response label
37+
if: steps.check-maintainer.outputs.result == 'true'
38+
uses: actions/github-script@v7
39+
with:
40+
script: |
41+
await github.rest.issues.addLabels({
42+
owner: context.repo.owner,
43+
repo: context.repo.repo,
44+
issue_number: context.issue.number,
45+
labels: ['waiting-for-response']
46+
});
47+
48+
add-label-all:
49+
runs-on: ubuntu-latest
50+
if: |
51+
github.event_name == 'workflow_dispatch' &&
52+
github.event.inputs.label-all-issues == 'true'
53+
54+
steps:
55+
- name: Process all open issues
56+
uses: actions/github-script@v7
57+
with:
58+
script: |
59+
async function isMaintianer(username) {
60+
try {
61+
const response = await github.rest.repos.getCollaboratorPermissionLevel({
62+
owner: context.repo.owner,
63+
repo: context.repo.repo,
64+
username: username
65+
});
66+
return ['admin', 'write'].includes(response.data.permission);
67+
} catch (error) {
68+
console.error(`Error checking permissions for ${username}:`, error);
69+
return false;
70+
}
71+
}
72+
73+
async function getLastComment(issueNumber) {
74+
try {
75+
const comments = await github.paginate(github.rest.issues.listComments, {
76+
owner: context.repo.owner,
77+
repo: context.repo.repo,
78+
issue_number: issueNumber,
79+
per_page: 100
80+
});
81+
82+
// Return the most recent comment, or null if no comments
83+
return comments.length > 0 ? comments[comments.length - 1] : null;
84+
} catch (error) {
85+
console.error(`Error fetching comments for issue #${issueNumber}:`, error);
86+
return null;
87+
}
88+
}
89+
90+
// Get all open issues
91+
const issues = await github.paginate(github.rest.issues.listForRepo, {
92+
owner: context.repo.owner,
93+
repo: context.repo.repo,
94+
state: 'open',
95+
per_page: 100
96+
});
97+
98+
for (const issue of issues) {
99+
try {
100+
console.log(`Processing issue #${issue.number}...`);
101+
102+
// Get the last comment
103+
const lastComment = await getLastComment(issue.number);
104+
105+
// Skip if no comments
106+
if (!lastComment) {
107+
console.log(`No comments found on issue #${issue.number}, skipping`);
108+
continue;
109+
}
110+
111+
// Check if last commenter is a maintainer
112+
const lastCommenterIsMaintainer = await isMaintianer(lastComment.user.login);
113+
114+
// Skip if last commenter is not a maintainer
115+
if (!lastCommenterIsMaintainer) {
116+
console.log(`Last comment on issue #${issue.number} is not from a maintainer, skipping`);
117+
continue;
118+
}
119+
120+
// Skip if last commenter is the issue author
121+
if (lastComment.user.login === issue.user.login) {
122+
console.log(`Last comment on issue #${issue.number} is from the issue author, skipping`);
123+
continue;
124+
}
125+
126+
// Add the label
127+
await github.rest.issues.addLabels({
128+
owner: context.repo.owner,
129+
repo: context.repo.repo,
130+
issue_number: issue.number,
131+
labels: ['waiting-for-response']
132+
});
133+
134+
console.log(`Added label to issue #${issue.number}`);
135+
} catch (error) {
136+
console.error(`Error processing issue #${issue.number}:`, error);
137+
}
138+
}

0 commit comments

Comments
 (0)