| | name: Close/Lock issues after inactivity |
| |
|
| | on: |
| | schedule: |
| | - cron: "0 0 * * *" |
| |
|
| | jobs: |
| | close-issues-needs-more-info: |
| | runs-on: ubuntu-latest |
| | if: ${{ github.repository_owner == 'facebookresearch' }} |
| | steps: |
| | - name: Close old issues that need reply |
| | uses: actions/github-script@v3 |
| | with: |
| | github-token: ${{secrets.GITHUB_TOKEN}} |
| | |
| | script: | |
| | // Arguments available: |
| | // - github: A pre-authenticated octokit/rest.js client |
| | // - context: An object containing the context of the workflow run |
| | // - core: A reference to the @actions/core package |
| | // - io: A reference to the @actions/io package |
| | const kLabelToCheck = "needs-more-info"; |
| | const kInvalidLabel = "invalid/unrelated"; |
| | const kDaysBeforeClose = 7; |
| | const kMessage = "Requested information was not provided in 7 days, so we're closing this issue.\n\nPlease open new issue if information becomes available. Otherwise, use [github discussions](https://github.com/facebookresearch/detectron2/discussions) for free-form discussions." |
| | |
| | issues = await github.issues.listForRepo({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | state: 'open', |
| | labels: kLabelToCheck, |
| | sort: 'updated', |
| | direction: 'asc', |
| | per_page: 30, |
| | page: 1, |
| | }); |
| | issues = issues.data; |
| | if (issues.length === 0) { |
| | core.info('No more issues found to process. Exiting.'); |
| | return; |
| | } |
| | for (const issue of issues) { |
| | if (!!issue.pull_request) |
| | continue; |
| | core.info(`Processing issue |
| |
|
| | let updatedAt = new Date(issue.updated_at).getTime(); |
| | const numComments = issue.comments; |
| | const comments = await github.issues.listComments({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | issue_number: issue.number, |
| | per_page: 30, |
| | page: Math.floor((numComments - 1) / 30) + 1, // the last page |
| | }); |
| | const lastComments = comments.data |
| | .map(l => new Date(l.created_at).getTime()) |
| | .sort(); |
| | if (lastComments.length > 0) { |
| | updatedAt = lastComments[lastComments.length - 1]; |
| | } |
| |
|
| | const now = new Date().getTime(); |
| | const daysSinceUpdated = (now - updatedAt) / 1000 / 60 / 60 / 24; |
| |
|
| | if (daysSinceUpdated < kDaysBeforeClose) { |
| | core.info(`Skipping |
| | continue; |
| | } |
| | core.info(`Closing |
| | await github.issues.createComment({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | issue_number: issue.number, |
| | body: kMessage, |
| | }); |
| | const newLabels = numComments <= 2 ? [kInvalidLabel, kLabelToCheck] : issue.labels; |
| | await github.issues.update({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | issue_number: issue.number, |
| | labels: newLabels, |
| | state: 'closed', |
| | }); |
| | } |
| |
|
| | lock-issues-after-closed: |
| | runs-on: ubuntu-latest |
| | if: ${{ github.repository_owner == 'facebookresearch' }} |
| | steps: |
| | - name: Lock closed issues that have no activity for a while |
| | uses: dessant/lock-threads@v2 |
| | with: |
| | github-token: ${{ github.token }} |
| | issue-lock-inactive-days: '300' |
| | process-only: 'issues' |
| | issue-exclude-labels: 'enhancement,bug,documentation' |
| |
|