Skip to content

Commit bac3ba2

Browse files
committed
ci: add auto assign issue on command workflow
- Create a new GitHub Actions workflow to automatically assign issues - Workflow triggers on issue comment creation - Assigns the issue to the commenter when they type "/assign" - Includes checks for bot users, closed issues, and existing assignments - Sends a comment to the issue if assignment fails or if the issue is closed
1 parent 7fd65b3 commit bac3ba2

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Auto Assign Issue on Command
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
7+
jobs:
8+
assign_on_command:
9+
runs-on: ubuntu-latest
10+
permissions:
11+
issues: write
12+
contents: read
13+
steps:
14+
- name: Assign to user on /assign command
15+
uses: actions/github-script@v6
16+
with:
17+
github-token: ${{secrets.IVORY_TOKEN}}
18+
script: |
19+
const commentBody = context.payload.comment.body.trim().toLowerCase();
20+
const commenter = context.payload.comment.user.login;
21+
const issueNumber = context.issue.number;
22+
const repoOwner = context.repo.owner;
23+
const repoName = context.repo.repo;
24+
if (commentBody === '/assign') {
25+
console.log(`User @${commenter} commented "/assign" on issue #${issueNumber}. Attempting to assign.`);
26+
if (commenter.endsWith('[bot]') || commenter === 'github-actions[bot]') {
27+
console.log(`Skipping assignment for bot user: ${commenter}`);
28+
return;
29+
}
30+
const { data: issue } = await github.rest.issues.get({
31+
owner: repoOwner,
32+
repo: repoName,
33+
issue_number: issueNumber
34+
});
35+
if (issue.assignees && issue.assignees.some(a => a.login === commenter)) {
36+
console.log(`Issue #${issueNumber} is already assigned to @${commenter}. No action needed.`);
37+
return;
38+
}
39+
if (issue.state === 'closed') {
40+
console.log(`Issue #${issueNumber} is closed. No assignment will be made.`);
41+
await github.rest.issues.createComment({
42+
owner: repoOwner,
43+
repo: repoName,
44+
issue_number: issueNumber,
45+
body: `Hi @${commenter}, issue #${issueNumber} is closed and cannot be assigned.`
46+
});
47+
return;
48+
}
49+
try {
50+
await github.rest.issues.addAssignees({
51+
owner: repoOwner,
52+
repo: repoName,
53+
issue_number: issueNumber,
54+
assignees: [commenter]
55+
});
56+
console.log(`Successfully assigned issue #${issueNumber} to @${commenter}.`);
57+
} catch (error) {
58+
console.error(`Error assigning issue #${issueNumber} to @${commenter}:`, error);
59+
await github.rest.issues.createComment({
60+
owner: repoOwner,
61+
repo: repoName,
62+
issue_number: issueNumber,
63+
body: `Hi @${commenter}, I encountered an error trying to assign you to issue #${issueNumber}. Please check permissions or assign manually. \nError: ${error.message}`
64+
});
65+
}
66+
} else {
67+
console.log(`Comment by @${commenter} on issue #${issueNumber} was not an "/assign" command. Body: "${context.payload.comment.body.trim()}"`);
68+
}

0 commit comments

Comments
 (0)