-
Notifications
You must be signed in to change notification settings - Fork 2
95 lines (77 loc) · 2.87 KB
/
Copy pathauto-assign.yml
File metadata and controls
95 lines (77 loc) · 2.87 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
name: Auto Assign Owner
on:
issues:
types: [opened]
pull_request_target:
types: [opened]
permissions:
issues: write
pull-requests: write
contents: read
jobs:
check-and-assign:
runs-on: ubuntu-latest
steps:
- name: Check collaborator count and assign owner
uses: actions/github-script@v8
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
// Get collaborators with push or admin access
const { data: collaborators } = await github.rest.repos.listCollaborators({
owner,
repo,
permission: 'push'
});
// Filter to only users with push or admin (not just read)
const pushCollaborators = collaborators.filter(c =>
c.permissions?.push || c.permissions?.admin
);
console.log(`Found ${pushCollaborators.length} collaborators with push access`);
// Only auto-assign if there's 1 or fewer collaborators with push access
if (pushCollaborators.length > 1) {
console.log('Multiple collaborators found, skipping auto-assign');
return;
}
// Determine the assignee (repo owner)
const assignee = owner;
if (context.eventName === 'issues') {
const issue = context.payload.issue;
// Skip if already assigned
if (issue.assignees && issue.assignees.length > 0) {
console.log('Issue already has assignees, skipping');
return;
}
// Skip if author is a bot
if (issue.user.type === 'Bot') {
console.log('Issue author is a bot, skipping');
return;
}
await github.rest.issues.addAssignees({
owner,
repo,
issue_number: issue.number,
assignees: [assignee]
});
console.log(`Assigned issue #${issue.number} to ${assignee}`);
} else if (context.eventName === 'pull_request_target') {
const pr = context.payload.pull_request;
// Skip if already assigned
if (pr.assignees && pr.assignees.length > 0) {
console.log('PR already has assignees, skipping');
return;
}
// Skip if author is a bot
if (pr.user.type === 'Bot') {
console.log('PR author is a bot, skipping');
return;
}
await github.rest.issues.addAssignees({
owner,
repo,
issue_number: pr.number,
assignees: [assignee]
});
console.log(`Assigned PR #${pr.number} to ${assignee}`);
}