Skip to content

Commit 457a2a8

Browse files
authored
Enhance workflow to label external PRs (pytorch#22381)
Updated the workflow to label external PRs with a community label and refined the exclusion list for authors and bots. We already have a label - *community: contribution*. Just updating the workflow which adds community contributed PRs to the Project Board to have this label.
1 parent c65ad53 commit 457a2a8

1 file changed

Lines changed: 59 additions & 27 deletions

File tree

‎.github/workflows/add-unanswered-to-project.yml‎

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ on:
1111
pull_request:
1212
paths:
1313
- .github/workflows/add-unanswered-to-project.yml
14+
1415
jobs:
1516
add_to_project:
1617
runs-on: ubuntu-latest
1718
steps:
18-
- name: Add open issues and open, non-draft PRs to org project (excluding certain authors and bots)
19+
- name: Add open issues and open, non-draft PRs to org project and label external PRs (excluding certain authors and bots)
1920
uses: actions/github-script@v7
2021
with:
2122
github-token: ${{ secrets.ET_EXT_CONTRIB }}
@@ -26,36 +27,36 @@ jobs:
2627
2728
// List of authors to exclude
2829
const excludedAuthors = new Set([
29-
"nil-is-all", "tanvirislam-meta", "cbilgin", "kimishpatel", "psiddh", "digantdesai", "SS-JIA", "ahmtox", "mcr229",
30-
"shoumikhin", "manuelcandales", "metascroy", "cccclai", "rohansjoshi", "kirklandsign", "abhinaykukkadapu", "JacobSzwejbka",
31-
"Conarnar", "rascani", "kiymetakdemir", "JCNTH", "lucylq", "larryliu0820", "BujSet", "Gasoonjia", "Juntian777", "guangy10",
32-
"jackzhxng", "GregoryComer", "leafs1", "swolchok", "mergennachin", "tarun292", "byjlw", "jathu", "Jack-Khuu", "georgehong",
33-
"zhenyan-zhang-meta", "silverguo", "harishs88ss", "AlannaBurke", "Doggeral", "laithsakka", "Reubend", "dbort", "huydhn", "mcremon-meta",
34-
"trivedivivek", "angelayi", "helunwencser", "hsharma35", "zhxchen17", "iseeyuan", "svekars", "nathanaelsee", "dulinriley",
35-
"jerryzh168", "cmodi-meta", "bigfootjon", "sxu", "ydwu4", "Riandy", "tugsbayasgalan", "bsoyluoglu", "yangw-dev",
30+
"nil-is-all", "tanvirislam-meta", "cbilgin", "kimishpatel", "psiddh", "digantdesai", "SS-JIA", "ahmtox", "mcr229",
31+
"shoumikhin", "manuelcandales", "metascroy", "cccclai", "rohansjoshi", "kirklandsign", "abhinaykukkadapu", "JacobSzwejbka",
32+
"Conarnar", "rascani", "kiymetakdemir", "JCNTH", "lucylq", "larryliu0820", "BujSet", "Gasoonjia", "Juntian777", "guangy10",
33+
"jackzhxng", "GregoryComer", "leafs1", "swolchok", "mergennachin", "tarun292", "byjlw", "jathu", "Jack-Khuu", "georgehong",
34+
"zhenyan-zhang-meta", "silverguo", "harishs88ss", "AlannaBurke", "Doggeral", "laithsakka", "Reubend", "dbort", "huydhn", "mcremon-meta",
35+
"trivedivivek", "angelayi", "helunwencser", "hsharma35", "zhxchen17", "iseeyuan", "svekars", "nathanaelsee", "dulinriley",
36+
"jerryzh168", "cmodi-meta", "bigfootjon", "sxu", "ydwu4", "Riandy", "tugsbayasgalan", "bsoyluoglu", "yangw-dev",
3637
"YIWENX14", "namanahuja", "yushangdi", "limintang", "pianpwk", "viveknayakatmeta", "andreanicastro", "JakeStevens",
3738
"gmagogsfm", "zonglinpeng", "eigen-k", "derekxu", "salilsdesai", "skrtskrtfb", "pssrawat", "r-barnes",
3839
"kalpit-meta-1", "Will-MingLun-Li", "KapJI", "piyengar", "j-bahr", "BoyuanFeng", "fgasperij", "DariusHolmgren",
3940
"sammarden-meta", "kushrast", "meta-emilian", "Rittzz", "jeanschmidt", "copyrightly", "mikekgfb", "vmpuri",
40-
"zonglinpengmeta", "maggiemoss", "aorenste", "hoangminhle98", "Solumin", "meyering", "rchen152", "AishwaryaSivaraman",
41-
"migeed-z", "ebgraham", "Esteb37", "nausicaasnow", "Camyll", "ezyang", "huiyujie", "dltn", "cjhopman", "blackm00n",
42-
"agunapal", "SamGondelman", "Ninja91", "ivayloen", "DrJessop", "rodrigos01meta", "akrieger", "cmt0", "yiming0416",
43-
"ethansfng", "ThomasJannaud", "nirvanagth", "marcinkwiatkowski", "3l1", "omerjerk", "nitish2112", "yipjustin",
44-
"ejnguyen", "andrewor14", "phaiting", "mgiordy", "LeeOHzzZ", "adicatana", "Polyomino", "ezrilow", "navsud",
45-
"michaelmaitland", "RahulC7", "seyeong-han", "thdusdl1219", "jaejunku", "felixweilbach", "apullin", "trviv", "junluan01",
46-
"mvartani-meta", "abeakkas", "elpdumont", "corporateshark", "bdemirb", "GeorgeTzoupis", "AdithyaReddy9", "drinkmorewaterr",
47-
"aliafzal", "YifanShenSZ", "RdoubleA", "Olivia-liu", "Abhi-hpp", "Vysarat","azad-meta", "junpi",
48-
"pytorchbot", "pytorchmergebot", "pytorchupdatebot", "facebook-github-bot", "app/dependabot",
49-
"Erik-Lundell", "zingo", "AdrianLundell", "oscarandersson8218", "per", "Sebastian-Larsson", "SaoirseARM", "robell",
50-
"mansnils", "martinlsm", "freddan80", "YufengShi-dudu", "tom-arm", "perheld", "Jerry-Ge", "gggekov", "fumchin", "wwwind",
51-
"benkli01", "Tessil", "maddun01", "Michiel-Olieslagers", "armwaheed", "agrima1304", "emmakujala", "annietllnd",
52-
"MatthiasHertel80", "AlexTawseArm", "jmahbs", "morgolock", "Christoffer-JL", "ArmRyan", "xingguo01", "tgonzalezorlandoarm",
41+
"zonglinpengmeta", "maggiemoss", "aorenste", "hoangminhle98", "Solumin", "meyering", "rchen152", "AishwaryaSivaraman",
42+
"migeed-z", "ebgraham", "Esteb37", "nausicaasnow", "Camyll", "ezyang", "huiyujie", "dltn", "cjhopman", "blackm00n",
43+
"agunapal", "SamGondelman", "Ninja91", "ivayloen", "DrJessop", "rodrigos01meta", "akrieger", "cmt0", "yiming0416",
44+
"ethansfng", "ThomasJannaud", "nirvanagth", "marcinkwiatkowski", "3l1", "omerjerk", "nitish2112", "yipjustin",
45+
"ejnguyen", "andrewor14", "phaiting", "mgiordy", "LeeOHzzZ", "adicatana", "Polyomino", "ezrilow", "navsud",
46+
"michaelmaitland", "RahulC7", "seyeong-han", "thdusdl1219", "jaejunku", "felixweilbach", "apullin", "trviv", "junluan01",
47+
"mvartani-meta", "abeakkas", "elpdumont", "corporateshark", "bdemirb", "GeorgeTzoupis", "AdithyaReddy9", "drinkmorewaterr",
48+
"aliafzal", "YifanShenSZ", "RdoubleA", "Olivia-liu", "Abhi-hpp", "Vysarat","azad-meta", "junpi",
49+
"pytorchbot", "pytorchmergebot", "pytorchupdatebot", "facebook-github-bot", "app/dependabot",
50+
"Erik-Lundell", "zingo", "AdrianLundell", "oscarandersson8218", "per", "Sebastian-Larsson", "SaoirseARM", "robell",
51+
"mansnils", "martinlsm", "freddan80", "YufengShi-dudu", "tom-arm", "perheld", "Jerry-Ge", "gggekov", "fumchin", "wwwind",
52+
"benkli01", "Tessil", "maddun01", "Michiel-Olieslagers", "armwaheed", "agrima1304", "emmakujala", "annietllnd",
53+
"MatthiasHertel80", "AlexTawseArm", "jmahbs", "morgolock", "Christoffer-JL", "ArmRyan", "xingguo01", "tgonzalezorlandoarm",
5354
"chizkiyahu", "sarah-blades", "itsMarco-G", "usamahz", "Rob-Hughes-Arm", "swha815", "FabulousSuperDude",
54-
"haowhsu-quic", "shewu-quic", "winskuo-quic", "chunit-quic", "DannyYuyang-quic", "chuntl", "thchenqti", "jethroqti",
55-
"chenweng-quic", "qti-horodnic", "qti-mmadhava", "quic-boyuc", "zhaoxul-qti",
56-
"cymbalrush", "DenisVieriu97", "billmguo",
57-
"StrycekSimon", "jirioc", "robert-kalmar", "skywall", "MartinPavella", "roman-janik-nxp", "novak-vaclav", "irtrukhina",
58-
"neuropilot-captain", "dijopaul", "cad-rlc", "cad-audio", "ynimmaga", "daniil-lyakhov",
55+
"haowhsu-quic", "shewu-quic", "winskuo-quic", "chunit-quic", "DannyYuyang-quic", "chuntl", "thchenqti", "jethroqti",
56+
"chenweng-quic", "qti-horodnic", "qti-mmadhava", "quic-boyuc", "zhaoxul-qti",
57+
"cymbalrush", "DenisVieriu97", "billmguo",
58+
"StrycekSimon", "jirioc", "robert-kalmar", "skywall", "MartinPavella", "roman-janik-nxp", "novak-vaclav", "irtrukhina",
59+
"neuropilot-captain", "dijopaul", "cad-rlc", "cad-audio", "ynimmaga", "daniil-lyakhov",
5960
"emmanuel-ferdman", "cavusmustafa", "anzr299", "suryasidd", "Jiseong-oh", "alexdean08",
6061
// explicitly include the dependabot bot login seen in PRs
6162
"dependabot[bot]"
@@ -69,7 +70,10 @@ jobs:
6970
7071
// Labels on PRs to exclude from being added to the project
7172
const excludedPrLabels = new Set(["fb-exported", "meta-exported"]);
72-
73+
74+
// Label applied to PRs that pass every external-contributor check below
75+
const communityLabel = "community: contribution";
76+
7377
// Simple cache for user -> boolean (member of excluded org)
7478
const orgsCache = new Map();
7579
const companyCache = new Map();
@@ -125,6 +129,31 @@ jobs:
125129
return false;
126130
}
127131
}
132+
133+
function hasCommunityLabel(item) {
134+
if (!item || !item.labels) return false;
135+
return item.labels.some(l => l && l.name && l.name.toLowerCase() === communityLabel);
136+
}
137+
138+
async function addCommunityLabel(pr) {
139+
if (hasCommunityLabel(pr)) {
140+
console.log(`PR #${pr.number} already has "${communityLabel}"`);
141+
return;
142+
}
143+
try {
144+
await github.rest.issues.addLabels({
145+
owner,
146+
repo,
147+
issue_number: pr.number,
148+
labels: [communityLabel]
149+
});
150+
console.log(`Labeled PR #${pr.number} with "${communityLabel}"`);
151+
} catch (error) {
152+
// Labeling is best-effort: a failure here must not stop the rest of the run.
153+
console.log(`Error labeling PR #${pr.number}: ${error.message}`);
154+
}
155+
}
156+
128157
async function addItem(contentId, type, number) {
129158
try {
130159
await github.graphql(`
@@ -156,6 +185,7 @@ jobs:
156185
filter: 'all'
157186
}
158187
);
188+
159189
for (const issue of issues) {
160190
if (issue.pull_request) {
161191
console.log(`Skipping PR #${issue.number} (listed in issues)`);
@@ -185,6 +215,7 @@ jobs:
185215
state: 'open',
186216
}
187217
);
218+
188219
for (const pr of prs) {
189220
if (pr.draft) {
190221
console.log(`Skipping PR #${pr.number} (draft)`);
@@ -207,6 +238,7 @@ jobs:
207238
continue;
208239
}
209240
await addItem(pr.node_id, 'pr', pr.number);
241+
await addCommunityLabel(pr);
210242
}
211243
} catch (error) {
212244
core.setFailed(`Workflow failed: ${error.message}`);

0 commit comments

Comments
 (0)