forked from NVIDIA/TensorRT-LLM
-
Notifications
You must be signed in to change notification settings - Fork 0
127 lines (111 loc) · 4.81 KB
/
waiting_for_feedback.yml
File metadata and controls
127 lines (111 loc) · 4.81 KB
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
116
117
118
119
120
121
122
123
124
125
126
127
name: Manage Waiting for Feedback Label
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
permissions:
issues: write
pull-requests: write
jobs:
manage-waiting-for-feedback:
runs-on: ubuntu-latest
if: github.repository == 'NVIDIA/TensorRT-LLM'
steps:
- name: Check membership and manage label
uses: actions/github-script@v8
with:
script: |
const commenter = context.payload.comment.user.login;
const commenterType = context.payload.comment.user.type;
const label = 'waiting for feedback';
// Ignore bots and CI accounts
const ignoredAccounts = ['tensorrt-cicd'];
if (commenterType === 'Bot' || ignoredAccounts.includes(commenter)) {
console.log(`Ignoring comment from ${commenter} (type: ${commenterType}). Skipping.`);
return;
}
// Handle both issue_comment and pull_request_review_comment events
// context.issue.number is only available for issue_comment events
const issueNumber = context.issue?.number || context.payload.pull_request?.number;
const issue = context.payload.issue || context.payload.pull_request;
const author = issue?.user?.login;
const isAuthor = (commenter === author);
if (!issueNumber) {
console.log('Could not determine issue/PR number. Skipping.');
return;
}
console.log(`Comment by ${commenter} on #${issueNumber} (author: ${author})`);
const owner = context.repo.owner;
const repo = context.repo.repo;
// Check if commenter is repository member
let isMember = false;
try {
await github.rest.repos.checkCollaborator({
owner,
repo,
username: commenter
});
isMember = true;
} catch (error) {
if (error.status === 404) {
isMember = false;
} else if (error.status === 302) {
console.log(`Cannot determine membership for ${commenter} (insufficient token permissions)`);
return;
} else {
console.error(`Error checking membership: ${error.message}`);
throw error;
}
}
// Logic:
// - Author responds → remove label (feedback provided)
// - NVIDIA non-author comments → add label (team is waiting for response)
// - External non-author comments → remove label (someone provided feedback)
if (isAuthor) {
// Author responded - remove 'waiting for feedback' label
console.log(`${commenter} is the author. Removing '${label}' label if present.`);
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: label
});
console.log(`Successfully removed '${label}' label from #${issueNumber}`);
} catch (error) {
if (error.status === 404) {
console.log(`Label '${label}' was not present on #${issueNumber}. No action needed.`);
} else {
throw error;
}
}
} else if (isMember) {
// NVIDIA non-author commented - add 'waiting for feedback' label
console.log(`${commenter} is an NVIDIA member (not author). Adding '${label}' label.`);
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: [label]
});
console.log(`Successfully added '${label}' label to #${issueNumber}`);
} else {
// External non-author commented - remove 'waiting for feedback' label
console.log(`${commenter} is external (not author). Removing '${label}' label if present.`);
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: label
});
console.log(`Successfully removed '${label}' label from #${issueNumber}`);
} catch (error) {
if (error.status === 404) {
console.log(`Label '${label}' was not present on #${issueNumber}. No action needed.`);
} else {
throw error;
}
}
}