name: Weekly Project Report on: schedule: # Every Monday at 9 AM UTC - cron: '0 9 * * 1' workflow_dispatch: # Manual trigger for testing permissions: actions: read contents: read issues: read pull-requests: read id-token: write jobs: report: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v5 - name: Generate and post weekly report uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} claude_args: | --model sonnet --max-turns 25 --allowedTools "Bash(gh:*)" "Bash(jq:*)" "Bash(node:*)" "Bash(cat:*)" "Bash(echo:*)" "Read" "Write" prompt: | Read the instructions in `.github/scripts/project-report/prompt.md` and follow them. The Slack posting script is at `.github/scripts/project-report/post-to-slack.js`. The webhook URL is in the WEEKLY_REPORT_SLACK_WEBHOOK_URL environment variable. Use GH_TOKEN for authenticated gh commands — it is already set. Generate the weekly report, write the JSON to /tmp/report.json, then post it to Slack. env: # PAT with read:project scope — required for org-level Projects v2 GraphQL. # The automatic GITHUB_TOKEN does not have project board access. GH_TOKEN: ${{ secrets.PROJECT_GH_TOKEN }} WEEKLY_REPORT_SLACK_WEBHOOK_URL: ${{ secrets.WEEKLY_REPORT_SLACK_WEBHOOK_URL }} - name: Alert Slack on failure if: failure() env: WEEKLY_REPORT_SLACK_WEBHOOK_URL: ${{ secrets.WEEKLY_REPORT_SLACK_WEBHOOK_URL }} run: | curl -sf -X POST "$WEEKLY_REPORT_SLACK_WEBHOOK_URL" \ -H 'Content-type: application/json' \ -d '{"text":"⚠️ Weekly project report workflow failed. Check GitHub Actions: https://github.com/videojs/v10/actions"}'