91 lines
3.1 KiB
YAML
91 lines
3.1 KiB
YAML
name: Project Management
|
|
|
|
on:
|
|
issues:
|
|
types: [opened, edited, labeled]
|
|
schedule:
|
|
- cron: '0 0 * * 0' # Weekly cleanup on Sunday
|
|
|
|
jobs:
|
|
# Auto-label issues
|
|
auto-label:
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'issues'
|
|
permissions:
|
|
issues: write
|
|
steps:
|
|
- name: Auto-label based on content
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const item = context.payload.issue;
|
|
const body = (item.body || '').toLowerCase();
|
|
const title = (item.title || '').toLowerCase();
|
|
const labels = [];
|
|
|
|
// Platform labels
|
|
if (title.includes('telegram') || body.includes('telegram')) labels.push('platform:telegram');
|
|
if (title.includes('email') || body.includes('email')) labels.push('platform:email');
|
|
if (title.includes('line') || body.includes('line')) labels.push('platform:line');
|
|
if (title.includes('discord') || body.includes('discord')) labels.push('platform:discord');
|
|
|
|
// Priority labels
|
|
if (title.includes('critical') || body.includes('critical')) labels.push('priority:high');
|
|
if (title.includes('urgent') || body.includes('urgent')) labels.push('priority:high');
|
|
|
|
// Type labels
|
|
if (title.includes('[bug]')) labels.push('type:bug');
|
|
if (title.includes('[feature]')) labels.push('type:enhancement');
|
|
if (title.includes('[question]')) labels.push('type:question');
|
|
|
|
if (labels.length > 0) {
|
|
await github.rest.issues.addLabels({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: item.number,
|
|
labels: labels
|
|
});
|
|
}
|
|
|
|
|
|
# Weekly maintenance
|
|
weekly-cleanup:
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'schedule'
|
|
permissions:
|
|
issues: write
|
|
steps:
|
|
- name: Close stale issues
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const { data: issues } = await github.rest.issues.listForRepo({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
state: 'open',
|
|
labels: 'question',
|
|
sort: 'updated',
|
|
direction: 'asc',
|
|
per_page: 100
|
|
});
|
|
|
|
const thirtyDaysAgo = new Date();
|
|
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
|
|
|
|
for (const issue of issues) {
|
|
if (new Date(issue.updated_at) < thirtyDaysAgo) {
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issue.number,
|
|
body: 'This question has been inactive for 30 days and will be closed. Feel free to reopen if you still need help.'
|
|
});
|
|
|
|
await github.rest.issues.update({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issue.number,
|
|
state: 'closed'
|
|
});
|
|
}
|
|
} |