name: Mark Issues for Review on: push: paths: - 'DONE_ISSUES.md' concurrency: group: repo-file-writes cancel-in-progress: false env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: mark-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Mark issues as ready for review uses: actions/github-script@v7 with: script: | const fs = require('fs'); const content = fs.readFileSync('DONE_ISSUES.md', 'utf8'); const issueNumbers = [...content.matchAll(/#(\d+)/g)].map(m => parseInt(m[1])); if (issueNumbers.length === 0) { console.log('No issue numbers found in DONE_ISSUES.md'); return; } for (const num of issueNumbers) { try { const issue = await github.rest.issues.get({ owner: context.repo.owner, repo: context.repo.repo, issue_number: num, }); if (issue.data.state === 'open') { // Add review label await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: num, labels: ['ready-for-review'], }); // Add a comment await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: num, body: '✅ Implementation complete and deployed. Ready for your review.\n\nClose this issue when you\'re satisfied with the result.', }); console.log(`Marked #${num} as ready-for-review`); } else { console.log(`Issue #${num} already closed.`); } } catch (e) { console.log(`Error processing #${num}: ${e.message}`); } } // Clear the file after processing fs.writeFileSync('DONE_ISSUES.md', '# Done Issues\n\n_Empty — no issues to process._\n'); - name: Commit cleared file run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add DONE_ISSUES.md git diff --cached --quiet && exit 0 git commit -m "chore: clear DONE_ISSUES.md after processing [skip ci]" git pull --rebase origin main || true git push