-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathissue-close-to-discussion-todo.yml
More file actions
62 lines (56 loc) · 2.02 KB
/
Copy pathissue-close-to-discussion-todo.yml
File metadata and controls
62 lines (56 loc) · 2.02 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
name: Issue Close to Discussion TODO
on:
issues:
types: [closed]
permissions:
issues: read
discussions: write
jobs:
check_discussion_todo:
runs-on: ubuntu-latest
steps:
- name: Check TODO in Discussion
uses: actions/github-script@v7
with:
script: |
// 1. 이슈 본문에서 Discussion URL, 체크박스 텍스트 추출
const issueBody = context.payload.issue.body;
const discussionUrlMatch = issueBody.match(/\(https:\/\/github\.com\/.+\/discussions\/(\d+)\)/);
if (!discussionUrlMatch) {
console.log("Discussion 링크를 찾을 수 없습니다.");
return;
}
const discussionNumber = discussionUrlMatch[1];
const todoText = context.payload.issue.title;
// 2. GraphQL로 Discussion 본문 읽기
const query = `
query {
repository(owner: "${context.repo.owner}", name: "${context.repo.repo}") {
discussion(number: ${discussionNumber}) {
id
body
}
}
}
`;
const result = await github.graphql(query);
const discussion = result.repository.discussion;
if (!discussion) {
console.log("Discussion을 찾을 수 없습니다.");
return;
}
let newBody = discussion.body;
// 3. 체크박스 텍스트를 [ ] → [x]로 변경
const regex = new RegExp(`- \\[ \\] ${todoText}`);
newBody = newBody.replace(regex, `- [x] ${todoText}`);
// 4. GraphQL로 Discussion 본문 수정
const mutation = `
mutation {
updateDiscussion(input: {discussionId: "${discussion.id}", body: """${newBody}"""}) {
discussion {
id
}
}
}
`;
await github.graphql(mutation);