name: Close PRs with Feedback
on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * *'
jobs:
  close-pr:
    runs-on: ubuntu-latest
    steps:
      - name: Close PR if it has label "feedback left" and no changes in 7 days
        uses: actions/github-script@v3
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const { data: pullRequests } = await github.pulls.list({
              owner: context.repo.owner,
              repo: context.repo.repo,
              state: 'open',
              base: 'master',
            });

            for (const pullRequest of pullRequests) {
              const { data: labels } = await github.issues.listLabelsOnIssue({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: pullRequest.number,
              });

              const feedbackLabel = labels.find((label) => label.name === 'feedback left');
              if (feedbackLabel) {
                const lastUpdated = new Date(pullRequest.updated_at);
                const sevenDaysAgo = new Date();
                sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);

                if (lastUpdated < sevenDaysAgo) {
                  await github.issues.createComment({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    issue_number: pullRequest.number,
                    body: 'Closing this PR because there has been no activity for the past 7 days. Feel free to reopen if you have any feedback.',
                  });
                  await github.pulls.update({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    pull_number: pullRequest.number,
                    state: 'closed',
                  });
                }
              }
            }