name: Close inactive issues
on:
  schedule:
    - cron: "10 23 * * *"

jobs:
  close-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v5
        with:
          stale-issue-message: ""
          close-issue-message: "This issue has been closed due to inactivity for 6 weeks. If you believe it is still relevant, please leave a comment below. You can tag a developer in your comment."
          days-before-issue-stale: 42
          days-before-issue-close: 0
          stale-issue-label: "stale"
          days-before-pr-stale: -1
          days-before-pr-close: -1
          repo-token: ${{ secrets.GITHUB_TOKEN }}

      - name: Close issues without label or comment
        uses: actions/github-script@v3
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            const repo = context.repo;
            let page = 1;
            let issues = [];
            while (true) {
              const result = await github.issues.listForRepo({...repo, per_page: 100, page: page});
              if (result.data.length === 0) break;
              issues = issues.concat(result.data);
              page += 1;
            }
            for (let { number } of issues) {
              const issueData = await github.issues.get({...repo, issue_number: number});
              const comments = await github.issues.listComments({...repo, issue_number: number});
              if (issueData.data.labels.length === 0 && comments.data.length < 1) {
                await github.issues.update({...repo, issue_number: number, state: 'closed'});
                await github.issues.createComment({...repo, issue_number: number, body: 'Issue closed as it does not have any labels or comments.'});
              }
            }