[Github Action] Update CHANGELOG.md #31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Close Discussion on PR Merge | |
on: | |
pull_request: | |
types: [closed] | |
jobs: | |
close-discussion: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Set Up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
- name: Install Dependencies | |
run: npm install zx @octokit/graphql | |
- name: Close Discussion | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PR_BODY: ${{ github.event.pull_request.body }} | |
PR_NUMBER: ${{ github.event.pull_request.number }} | |
REPO_OWNER: ${{ github.repository_owner }} | |
REPO_NAME: ${{ github.event.repository.name }} | |
run: | | |
npx zx << 'EOF' | |
import { graphql } from "@octokit/graphql"; | |
(async function() { | |
try { | |
const token = process.env.GITHUB_TOKEN; | |
const prBody = process.env.PR_BODY; | |
const prNumber = process.env.PR_NUMBER; | |
const owner = process.env.REPO_OWNER; | |
const repo = process.env.REPO_NAME; | |
if (!token || !prBody || !prNumber || !owner || !repo) { | |
console.log("Missing required environment variables."); | |
process.exit(1); | |
} | |
const match = prBody.match(/#(\d+)/); | |
if (!match) { | |
console.log("No discussion ID found in PR body."); | |
return; | |
} | |
const discussionNumber = match[1]; | |
console.log(`Extracted Discussion Number: ${discussionNumber}`); | |
console.log(`PR Number: ${prNumber}`); | |
console.log(`Repository: ${owner}/${repo}`); | |
const graphqlWithAuth = graphql.defaults({ | |
headers: { authorization: `Bearer ${token}` }, | |
}); | |
const discussionQuery = ` | |
query($owner: String!, $repo: String!, $number: Int!) { | |
repository(owner: $owner, name: $repo) { | |
discussion(number: $number) { | |
id | |
} | |
} | |
} | |
`; | |
const discussionResponse = await graphqlWithAuth(discussionQuery, { | |
owner, | |
repo, | |
number: parseInt(discussionNumber, 10), | |
}); | |
const discussionQLId = discussionResponse.repository.discussion.id; | |
if (!discussionQLId) { | |
console.log("Failed to fetch discussion GraphQL ID."); | |
return; | |
} | |
console.log(`GraphQL Discussion ID: ${discussionQLId}`); | |
const commentMutation = ` | |
mutation($discussionId: ID!, $body: String!) { | |
addDiscussionComment(input: { discussionId: $discussionId, body: $body }) { | |
comment { id body } | |
} | |
} | |
`; | |
const commentResponse = await graphqlWithAuth(commentMutation, { | |
discussionId: discussionQLId, | |
body: `Merged with PR #${prNumber}`, | |
}); | |
const commentId = commentResponse.addDiscussionComment.comment.id; | |
if (!commentId) { | |
console.log("Failed to post the comment."); | |
return; | |
} | |
console.log(`Comment Posted Successfully! Comment ID: ${commentId}`); | |
const markAnswerMutation = ` | |
mutation($id: ID!) { | |
markDiscussionCommentAsAnswer(input: { id: $id }) { | |
discussion { id title } | |
} | |
} | |
`; | |
await graphqlWithAuth(markAnswerMutation, { id: commentId }); | |
console.log("Comment marked as answer successfully!"); | |
} catch (error) { | |
console.error("Error:", error); | |
return; | |
} | |
})(); | |
EOF |