Skip to content

Add community triage infrastructure: CI lint, stale bot, CODEOWNERS, docs#1450

Open
benhillis wants to merge 1 commit into
mainfrom
user/benhill/triage-2026q2
Open

Add community triage infrastructure: CI lint, stale bot, CODEOWNERS, docs#1450
benhillis wants to merge 1 commit into
mainfrom
user/benhill/triage-2026q2

Conversation

@benhillis
Copy link
Copy Markdown
Member

What

Adds the minimum viable triage infrastructure for microsoft/wslg:

  • CI lint workflow — hadolint on Dockerfile, shellcheck on *.sh, actionlint (pinned to v1.7.7 + checksum) on workflows, non-blocking yamllint pass. Runs on PRs and pushes to main. Does not duplicate any work done by the production Azure Pipelines build.
  • Stale-bot workflow — daily cron with conservative thresholds.
    • Issues: 365 d → stale, +30 d → close. Exempts enhancement, help wanted, good first issue, fixinbound, weston-upstream-bug, pinned, security.
    • PRs: 120 d → stale, +30 d → close. Drafts exempt.
    • Waiting User Info issues use a tighter 30 + 14 cycle and a separate waiting-user-info-stale label so the two policies cannot collide.
    • operations-per-run is intentionally low (30 / 20) so the first runs do not flood subscriber inboxes.
  • CODEOWNERS@benhillis as default reviewer on new PRs. Does not retroactively affect the 12 currently-open PRs.
  • SUPPORT.md — response-time expectations, required info for bug reports, routing for non-WSLg issues.
  • TRIAGE.md — documents the existing label taxonomy (which previously lived only in maintainer heads) and the cross-cutting issue clusters (network-change focus loss, mstsc focus stealing, HiDPI, Ubuntu 24.04 regressions) responsible for the bulk of duplicate reports.

Why

The repo has ~669 open issues, 12 open PRs (oldest from 2022, 7 of them >100 days stale), and ~344 issues with no activity since 2024, but no automated triage support and no CODEOWNERS. Maintainers are shipping releases but cannot keep up with the issue queue. This PR is the cheapest possible step toward sustainability — it does not close any existing issue or PR, but it stops the bleeding going forward.

Safety notes

  • The stale workflow only runs on cron — merging this PR does not trigger an immediate sweep. The first sweep will run at the next 07:00 UTC tick.
  • operations-per-run is deliberately small. If the first few runs look noisy, the workflow can be disabled from the Actions tab or the thresholds raised in a follow-up PR.
  • Reaction counts are not used as activity, so popular feature requests are protected only by the enhancement exemption. If you want to be even more conservative, add bug to the exempt list and use the bot for PRs only.
  • CODEOWNERS is intentionally minimal (everything routes to @benhillis). Expand it once other reviewers' aliases are known.

Follow-up plan (separate PRs / issues)

  1. Per-PR triage decisions on the existing 12 open PRs.
  2. Labeling pass on the 88 unlabeled open issues.
  3. Duplicate consolidation for the cross-cutting clusters listed in TRIAGE.md.
  4. README "Project status & roadmap" section.

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

…docs

The repository has accumulated a large backlog (~669 open issues, 12 PRs
with no recent activity, ~344 issues unupdated since 2024). This change
adds the lightweight infrastructure needed to keep the queue from
drifting further without committing the maintainer team to heavy
ongoing work.

Workflows:

* .github/workflows/lint.yml runs hadolint on the Dockerfile,
  shellcheck on shell scripts, actionlint (pinned to v1.7.7 with a
  checksum) on workflows, and a non-blocking yamllint pass on YAML.
  These run only on pull requests to main and on pushes to main, and
  do not duplicate any work done by the production Azure Pipelines
  build.

* .github/workflows/stale.yml runs daily and applies a conservative
  inactivity policy:

  - Issues: 365 days no activity -> 'stale', then 30 days -> close.
    'enhancement', 'help wanted', 'good first issue', 'fixinbound',
    'weston-upstream-bug', 'pinned', and 'security' are exempt so
    that top-voted feature requests and known upstream tracking
    issues are not auto-closed.
  - Pull requests: 120 days -> stale, then 30 days -> close. Draft
    PRs are exempt.
  - A second job acts on 'Waiting User Info' issues with a tighter
    30 + 14 day cycle and a distinct 'waiting-user-info-stale'
    label so the two policies cannot collide.

  operations-per-run is intentionally low (30 / 20) so the first
  runs do not flood subscriber inboxes.

Docs and routing:

* .github/CODEOWNERS makes @benhillis the default reviewer on new
  PRs so review pings have a defined recipient. Existing open PRs
  are not affected.

* .github/SUPPORT.md documents the response-time expectations,
  required information for bug reports, and where to send WSL
  (non-WSLg) reports.

* .github/TRIAGE.md documents the existing label taxonomy and the
  cross-cutting issue clusters that account for a large share of
  duplicate reports.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 17, 2026 14:33
@benhillis benhillis added the documentation Improvements or additions to documentation label May 17, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds community triage infrastructure to microsoft/wslg: a CI lint workflow, a conservatively-tuned stale bot, a minimal CODEOWNERS, and two new docs (SUPPORT.md, TRIAGE.md). The intent is to slow the growth of the issue/PR backlog without touching production code or existing items. All additions are isolated to .github/ and do not affect builds, packaging, or runtime.

Changes:

  • New lint CI (hadolint, shellcheck, version+SHA-pinned actionlint, non-blocking yamllint) on PRs/pushes to main.
  • New stale workflow with two jobs: generic 365+30 / 120+30 sweep and a dedicated 30+14 sweep for Waiting User Info issues using a distinct label.
  • New CODEOWNERS (everything → @benhillis), plus SUPPORT.md and TRIAGE.md documenting response expectations, label taxonomy, workflow, and known duplicate clusters.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
.github/workflows/lint.yml Adds hadolint / shellcheck / actionlint / yamllint jobs, with actionlint pinned by version + SHA256.
.github/workflows/stale.yml Adds two-job daily stale workflow with separate labels and conservative operations-per-run.
.github/CODEOWNERS Routes all paths to @benhillis; also lists per-area paths explicitly.
.github/SUPPORT.md Documents bug-report required info, response-time expectations, and routing for non-WSLg issues.
.github/TRIAGE.md Documents label taxonomy, triage workflow, and known cross-cutting duplicate clusters.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/CODEOWNERS
Comment on lines +5 to +31
# when no later rule matches.
#
# See: https://docs.github.com/en/repositories/managing-your-repositories-settings-and-customization/customizing-your-repository/about-code-owners

* @benhillis

# Build / packaging
/Dockerfile @benhillis
/azure-pipelines.yml @benhillis
/devops/ @benhillis
/package/ @benhillis
/msi/ @benhillis
/Microsoft.WSLg.nuspec @benhillis
/Microsoft.WSLg.targets @benhillis
/build-and-export.sh @benhillis

# Source components
/WSLGd/ @benhillis
/WSLDVCPlugin/ @benhillis
/rdpapplist/ @benhillis

# Docs / community
/docs/ @benhillis
/README.md @benhillis
/CONTRIBUTING.md @benhillis
/SECURITY.md @benhillis
/.github/ @benhillis
Comment on lines +58 to +61
- name: Lint YAML files (non-blocking)
run: |
yamllint -d "{extends: relaxed, rules: {line-length: disable, document-start: disable, truthy: {check-keys: false}}}" \
.github azure-pipelines.yml devops || true
steps:
- uses: actions/checkout@v4
- name: Run shellcheck
uses: ludeeus/action-shellcheck@2.0.0
# `enhancement` is exempted because top-voted feature requests
# often stay valid forever; the team prefers to close those
# manually with `wontfix` rather than via the bot.
exempt-issue-labels: 'pinned,security,help wanted,good first issue,fixinbound,weston-upstream-bug,enhancement'
days-before-issue-stale: 30
days-before-issue-close: 14
days-before-pr-stale: -1
days-before-pr-close: -1
Comment thread .github/SUPPORT.md
* Your distribution and version (`lsb_release -r` on Debian/Ubuntu).
* WSLg logs from `\\wsl$\<Distro>\mnt\wslg` (`weston.log`, `stderr.log`,
and `pulseaudio.log` where applicable).
* Crash dumps from `%TEMP%\wsl-crashes` if WSLg crashed.
Comment thread .github/SUPPORT.md
Please include:

* The output of `wsl --version` from a Windows command prompt.
* Your Windows build number (`[Environment]::OSVersion` in PowerShell).
Comment on lines +5 to +7
branches: [main]
push:
branches: [main]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants