diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml index b03c55911..68bbd1612 100644 --- a/.github/workflows/repo-maintenance.yml +++ b/.github/workflows/repo-maintenance.yml @@ -8,6 +8,7 @@ on: permissions: issues: write pull-requests: write + discussions: write concurrency: group: lock @@ -45,3 +46,54 @@ jobs: This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion or issue for related concerns. + close-answered-discussions: + name: 'Close Answered Discussions' + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + script: | + const query = `query($owner:String!, $name:String!) { + repository(owner:$owner, name:$name){ + discussions(first:100, answered:true, states:[OPEN]) { + nodes { + id, + number + } + } + } + }`; + const variables = { + owner: context.repo.owner, + name: context.repo.repo, + } + const result = await github.graphql(query, variables) + + console.log(`Found ${result.repository.discussions.nodes.length} open answered discussions`) + + for (const discussion of result.repository.discussions.nodes) { + console.log(`Closing dicussion #${discussion.number} (${discussion.id})`) + + const addCommentMutation = `mutation($discussion:ID!, $body:String!) { + addDiscussionComment(input:{discussionId:$discussion, body:$body}) { + clientMutationId + } + }`; + const commentVariables = { + discussion: discussion.id, + body: 'This discussion has been automatically closed because it was marked as answered.', + } + await github.graphql(addCommentMutation, commentVariables) + + const closeDiscussionMutation = `mutation($discussion:ID!, $reason:DiscussionCloseReason!) { + closeDiscussion(input:{discussionId:$discussion, reason:$reason}) { + clientMutationId + } + }`; + const closeVariables = { + discussion: discussion.id, + reason: "RESOLVED", + } + await github.graphql(closeDiscussionMutation, closeVariables) + + }