qwen-code/.github/workflows/stale.yml
Shaojin Wen f340d95446
ci(stale): enable 35+35 stale/close policy for pull requests (#3375)
* ci(stale): enable 28+28 stale/close policy for pull requests

- Fix the repository guard so the workflow actually runs on
  QwenLM/qwen-code (it was previously gated to google-gemini/gemini-cli
  and never executed in this repo).
- Scope the behavior to pull requests for now; issue policy will be
  introduced separately once triage labels are in place.
- Mark a PR stale after 4 weeks without activity, then close it after
  another 4 weeks.
- Exempt pinned, security, status/blocked, status/on-hold, and
  status/ready-for-merge from auto-close.
- Remove the stale label automatically when activity resumes, and
  process the oldest PRs first on each run.

* ci(stale): loosen PR cadence from 28+28 to 35+35

Five weeks + five weeks gives contributors more slack around holidays
and busy periods, and reduces the first-run impact on the existing
backlog. The total window moves from 56 days to 70 days.

* ci(stale): move cron from 01:30 UTC to 00:30 UTC

Shift by one hour so results are ready before the Beijing work day
starts (08:30 local), while still avoiding the top of the hour (the
high-contention window for GitHub-hosted runners) and staying 30
minutes after release.yml at 00:00 UTC.

* ci(stale): drop redundant repo guard and document ops-per-run

- Remove the `github.repository == 'QwenLM/qwen-code'` job guard:
  scheduled runs are already disabled on forks by GitHub, and
  workflow_dispatch is manually-triggered so the guard adds no safety.
- Add a comment explaining the `operations-per-run: 100` rationale
  (rate-limit headroom given the ~150-PR backlog).
2026-04-19 09:45:17 +08:00

47 lines
2.1 KiB
YAML

name: 'Mark stale issues and pull requests'
# Run as a daily cron at 00:30 UTC (Beijing time 08:30).
# Avoid the top of the hour to dodge GitHub's high-contention window,
# and stay 30 minutes after release.yml (00:00 UTC) to reduce overlap.
on:
schedule:
- cron: '30 0 * * *'
workflow_dispatch:
jobs:
stale:
runs-on: 'ubuntu-latest'
permissions:
issues: 'write'
pull-requests: 'write'
concurrency:
group: '${{ github.workflow }}-stale'
cancel-in-progress: true
steps:
- uses: 'actions/stale@5bef64f19d7facfb25b37b414482c7164d639639' # ratchet:actions/stale@v9
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
# Issues are intentionally disabled here; a separate policy will
# be introduced once issue triage labels are in place.
days-before-issue-stale: -1
days-before-issue-close: -1
# Pull requests: 60 days to stale + 30 days to close.
days-before-pr-stale: 60
days-before-pr-close: 30
stale-pr-label: 'status/stale'
stale-pr-message: >-
This pull request has had no activity for 60 days and is being marked as stale.
It will be closed in another 30 days if no further activity occurs.
To keep it open, push a new commit or leave a comment.
Maintainers may apply `pinned`, `status/blocked`, `status/on-hold`,
or `status/ready-for-merge` to exempt it from auto-close.
close-pr-message: >-
This pull request has been closed after 30 additional days of inactivity.
You are welcome to reopen it or submit a new pull request if the change is still relevant.
Thanks for contributing!
exempt-pr-labels: 'pinned,security,status/blocked,status/on-hold,status/ready-for-merge'
remove-stale-when-updated: true
ascending: true
# Cap per-run API operations to stay well under GitHub's hourly rate limit
# and give the current PR backlog (~150) enough headroom across a few runs.
operations-per-run: 100