Close Inactive Issues #236
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Borrowed from https://github.com/sgl-project/sglang/blob/main/.github/workflows/close-inactive-issues.yml | |
| name: Close Inactive Issues | |
| on: | |
| schedule: | |
| - cron: '0 0 * * *' | |
| permissions: | |
| issues: write | |
| contents: read | |
| jobs: | |
| close-inactive-issues: | |
| if: github.repository == '1038lab/ComfyUI-QwenVL' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check and close inactive issues | |
| uses: actions/github-script@v6 | |
| with: | |
| github-token: ${{secrets.GITHUB_TOKEN}} | |
| script: | | |
| const ninetyDaysAgo = new Date(Date.now() - 180 * 24 * 60 * 60 * 1000); | |
| const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); | |
| console.log(`Owner: ${owner}, Repo: ${repo}`); | |
| async function fetchIssues(page = 1) { | |
| console.log(`Fetching issues for ${owner}/${repo}, page ${page}`); | |
| return await github.rest.issues.listForRepo({ | |
| owner, | |
| repo, | |
| state: 'open', | |
| sort: 'updated', | |
| direction: 'asc', | |
| per_page: 100, | |
| page: page | |
| }); | |
| } | |
| async function processIssues() { | |
| console.log('Starting to process issues'); | |
| console.log(`Repository: ${owner}/${repo}`); | |
| let page = 1; | |
| let hasMoreIssues = true; | |
| while (hasMoreIssues) { | |
| try { | |
| const issues = await fetchIssues(page); | |
| console.log(`Fetched ${issues.data.length} issues on page ${page}`); | |
| if (issues.data.length === 0) { | |
| hasMoreIssues = false; | |
| break; | |
| } | |
| for (const issue of issues.data) { | |
| // Skip if the issue has 'good first issue' label | |
| if (issue.labels.some(label => label.name === 'good first issue')) { | |
| console.log(`Skipping issue #${issue.number} as it's marked as 'good first issue'`); | |
| continue; | |
| } | |
| if (new Date(issue.updated_at) < ninetyDaysAgo) { | |
| try { | |
| await github.rest.issues.update({ | |
| owner, | |
| repo, | |
| issue_number: issue.number, | |
| state: 'closed', | |
| labels: [...issue.labels.map(l => l.name), 'inactive'] | |
| }); | |
| await github.rest.issues.createComment({ | |
| owner, | |
| repo, | |
| issue_number: issue.number, | |
| body: `This issue has been automatically closed due to 90-day inactivity. If you're still experiencing this issue, feel free to reopen it or leave a new comment.` | |
| }); | |
| console.log(`Closed issue #${issue.number} due to inactivity.`); | |
| } catch (error) { | |
| console.error(`Failed to close issue #${issue.number}: ${error.message}`); | |
| } | |
| } else { | |
| console.log(`Issue #${issue.number} is still active. Stopping processing.`); | |
| hasMoreIssues = false; | |
| break; | |
| } | |
| } | |
| page += 1; | |
| } catch (error) { | |
| console.error(`Error fetching issues on page ${page}: ${error.message}`); | |
| hasMoreIssues = false; | |
| } | |
| } | |
| console.log('Finished processing issues'); | |
| } | |
| await processIssues(); |