This directory contains GitHub-specific configuration for issue management, pull request workflows, and CI/CD automation.
We use YAML-based issue forms for structured data collection:
ISSUE_TEMPLATE/1-bug.yml- Bug reportsISSUE_TEMPLATE/2-feature.yml- Feature requestsISSUE_TEMPLATE/3-feedback.yml- General feedback
Issue forms enforce required fields and provide dropdowns for common selections, making it easier to collect consistent information.
Runs when issues are opened:
- Auto-labeling: Detects keywords and applies relevant labels
- Priority detection:
critical,urgent,broken→priority:high - Component detection: Plugin names, docs, testing keywords
- Priority detection:
- Welcome message: First-time contributors get a friendly welcome
- Priority notification: High-priority issues get immediate comment
Runs daily to keep the issue tracker clean:
- Issues: 60 days inactive → marked stale → 7 days → closed
- Pull Requests: 45 days inactive → marked stale → 14 days → closed
- Exemptions: Issues/PRs with
priority:high,blocked, orin-progresslabels
Runs when PRs are opened:
- Issue linking: Checks for
Fixes #123orCloses #456keywords - Auto-labeling: Labels PRs based on changed files
- Plugin changes →
plugin,plugin:name - Documentation →
docs - Tests/CI →
testing,ci/cd
- Plugin changes →
Label categories defined in labels.yml:
| Category | Labels | Purpose |
|---|---|---|
| Type | bug, feature, feedback, docs, testing |
What kind of issue |
| Priority | priority:high/medium/low |
Urgency level |
| Status | triage, in-progress, blocked, needs-info, wontfix |
Current state |
| Component | plugin, plugin:*, marketplace, ci/cd |
What part of repo |
To sync labels to your repository:
# Using github-label-sync (recommended)
npx github-label-sync --labels .github/labels.yml owner/repo
# Or manually create them in GitHub UI
# Settings → Labels → New labelUser opens issue
↓
Issue form enforces structure
↓
Triage workflow auto-labels
↓
First-time contributor? → Welcome message
↓
Priority:high detected? → Notification comment
↓
Maintainer reviews (triage label)
↓
Work begins (in-progress label)
↓
PR opened with "Fixes #123"
↓
PR auto-labeled by changed files
↓
PR merged → issue auto-closed
- Use issue templates - They help provide all needed information
- Link PRs to issues - Use
Fixes #123in PR description - Keep issues focused - One issue per bug/feature
- Update if blocked - Comment if you need help
- Review triage label - Check new issues daily
- Set priority - Add priority labels based on impact
- Add context - Comment on issues needing clarification
- Close duplicates - Link to original issue when closing
- Keep stale bot - Let automation close inactive issues
Edit .github/workflows/triage.yml:
if (text.includes('new-plugin')) labels.push('plugin:new-plugin');Edit .github/workflows/stale.yml:
days-before-stale: 60 # Change threshold
days-before-close: 7 # Change grace period- Copy existing template in
ISSUE_TEMPLATE/ - Rename with numeric prefix:
4-new-type.yml - Customize fields and labels
- Test by opening new issue
Issue forms can't be tested locally, but you can validate YAML:
# Validate YAML syntax
yamllint .github/ISSUE_TEMPLATE/*.yml
# Or use yq
yq eval .github/ISSUE_TEMPLATE/1-bug.ymlWorkflows can be tested using act:
# Install act
brew install act
# Test triage workflow
act issues -e test-event.jsonQuestions? Open an issue using the feedback template!