name: Sync Issues to File on: schedule: - cron: '*/30 * * * *' workflow_dispatch: {} issues: types: [opened, closed, reopened, edited, labeled, unlabeled] concurrency: group: repo-file-writes cancel-in-progress: false env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Write open AI issues to file uses: actions/github-script@v7 with: script: | const fs = require('fs'); const issues = await github.rest.issues.listForRepo({ owner: context.repo.owner, repo: context.repo.repo, state: 'open', labels: 'ai-task', per_page: 100, }); let content = '# AI Tasks (auto-generated)\n\n'; content += `_Last updated: ${new Date().toISOString()}_\n\n`; if (issues.data.length === 0) { content += 'No open AI tasks.\n'; } else { content += `${issues.data.length} open task(s):\n\n`; for (const issue of issues.data) { content += `---\n\n`; content += `## #${issue.number}: ${issue.title}\n\n`; content += `- **State:** open\n`; content += `- **Created:** ${issue.created_at}\n`; content += `- **URL:** ${issue.html_url}\n\n`; content += `### Description\n\n`; content += `${issue.body || '_No description._'}\n\n`; } } fs.writeFileSync('AI_TASKS.md', content); console.log(`Wrote ${issues.data.length} issues to AI_TASKS.md`); - name: Commit and push if changed run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add AI_TASKS.md git diff --cached --quiet && echo "No changes" && exit 0 git commit -m "chore: update AI_TASKS.md [skip ci]" git pull --rebase origin main || true git push