Skip to content

ci: add issue-triage bots (stale, label-actions, area-labeler)#596

Open
DeusData wants to merge 1 commit into
mainfrom
chore/triage-automation
Open

ci: add issue-triage bots (stale, label-actions, area-labeler)#596
DeusData wants to merge 1 commit into
mainfrom
chore/triage-automation

Conversation

@DeusData

Copy link
Copy Markdown
Owner

What

Three native GitHub Actions that automate the mechanical parts of issue triage. The judgment parts (writing a real first reply, accurately connecting duplicates, picking the right area label initially) stay manual — these bots just take the repetitive load off.

1. Stale lifecycle — awaiting-reporter → warn → close

.github/workflows/stale.yml (actions/stale)

  • Acts only on issues a maintainer has labelled awaiting-reporter — never on PRs, never on unlabelled issues.
  • 21 days idle → comments + adds stale; 14 more days → closes as not planned.
  • A reporter comment removes stale and resets the clock automatically.
  • Runs daily on a schedule (+ manual workflow_dispatch).

This replaces the hand-maintained stale-watch table.

2. Templated label comments

.github/workflows/label-actions.yml + .github/label-actions.yml (dessant/label-actions)

  • Add duplicate → posts a "this is a duplicate, see the linked issue" comment. (We link, not auto-close — the auto-close lines are present but commented out.)
  • Add awaiting-reporter → posts the "we need version + a public repro" template, so you don't retype it.

3. Keyword area-labeler

.github/workflows/issue-labeler.yml + .github/issue-labeler.yml (github/issue-labeler)

  • On issue open/edit, adds area labels from title/body keywords: windows, stability/performance, parsing/quality, editor/integration, ux/behavior, cypher, language-request.
  • Additive only (sync-labels: 0) — never removes a label set by hand. Base bug / enhancement keep coming from the issue forms.

Labels added (already created on the repo)

  • awaiting-reporter — waiting on the reporter; drives the stale workflow.
  • stale — applied by the bot before closing.

Security

  • All third-party actions pinned to full commit SHAs (keeps Scorecard green): actions/stale v10.3.0, dessant/label-actions v5.0.3, github/issue-labeler v3.4.
  • Least privilege: top-level contents: read; issues: write granted only on the jobs that need it. No PR write, no broad scopes.
  • The labeler matches on regex only (no code execution); nothing here feeds issue text to an external service.

Notes

  • No AI/model dependency in this PR — it's all free on public-repo Actions minutes.
  • Tuning is easy: thresholds in stale.yml, comment text in label-actions.yml, regexes in issue-labeler.yml.

Three native GitHub Actions to automate the mechanical parts of issue
triage:

- stale.yml: actions/stale scoped to the awaiting-reporter label —
  warns at 21 days idle, closes at 35, auto-resets when the reporter
  replies. Never touches PRs or unlabeled issues.
- label-actions.yml + .github/label-actions.yml: posts a templated
  comment when duplicate or awaiting-reporter is applied (duplicates are
  linked, not auto-closed).
- issue-labeler.yml + .github/issue-labeler.yml: adds area labels
  (windows, stability/performance, parsing/quality, editor/integration,
  ux/behavior, cypher, language-request) from title/body keywords.
  Additive only; base bug/enhancement labels still come from the forms.

All third-party actions pinned to full commit SHAs with least-privilege
per-job permissions (issues: write only where required).

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant