From a02f5c2aa987b6864ac2d7f06b7e50a5933c312b Mon Sep 17 00:00:00 2001 From: Siddheya Kulkarni <115717746+Asymtode712@users.noreply.github.com> Date: Thu, 16 May 2024 14:06:14 +0530 Subject: [PATCH] Created close-old-pr.yml --- .github/workflows/close-old-pr.yml | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/close-old-pr.yml diff --git a/.github/workflows/close-old-pr.yml b/.github/workflows/close-old-pr.yml new file mode 100644 index 00000000..2cffee89 --- /dev/null +++ b/.github/workflows/close-old-pr.yml @@ -0,0 +1,47 @@ +name: Close PRs Without Linked Issues + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + close_prs_without_issue: + runs-on: ubuntu-latest + + steps: + - name: Check and Close PRs Without Linked Issues + uses: actions/checkout@v4 + with: + fetch-depth: 0 # This ensures that git history is fully fetched for proper processing + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Close PRs Without Linked Issues + run: | + const daysThreshold = 30; + + const github = require('@actions/github'); + + const octokit = new github.GitHub(process.env.GITHUB_TOKEN); + + const owner = github.context.repo.owner; + const repo = github.context.repo.repo; + + const { data: pullRequests } = await octokit.pulls.list({ owner, repo, state: 'open' }); + + for (const pr of pullRequests) { + const { data: issues } = await octokit.issues.listForRepo({ owner, repo, per_page: 100 }); + + const linkedIssue = issues.find(issue => + issue.pull_request && issue.pull_request.url === pr.url + ); + + if (!linkedIssue) { + await octokit.pulls.update({ owner, repo, pull_number: pr.number, state: 'closed' }); + await octokit.issues.createComment({ + owner, + repo, + issue_number: pr.number, + body: "This pull request has been closed because it does not mention the issue that it solves. Please refer to the [Contributing files](https://github.com/Sulagna-Dutta-Roy/GGExtensions/blob/master/CONTRIBUTING.md) to help you add this information. Then, tag the maintainers so your PR can be reopened." + }); + } + }