mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-06-09 17:12:01 +00:00
- .github/labels.yml: declarative source of truth (29 namespaced labels) - scripts/sync_labels.py + label-sync.yml: idempotent label sync (self-bootstraps on merge) - labeler.yml + pr-labeler.yml: area:* labels by changed path (actions/labeler) - pr-triage.yml: size/*, risk:*, needs-validation, first-time-contributor, reviewing - issue-triage.yml: needs-triage on new issues (self-healing) All PR workflows use pull_request_target but never check out or run PR code (read changed-file metadata via the API only).
45 lines
1.4 KiB
YAML
45 lines
1.4 KiB
YAML
name: Issue Triage
|
|
|
|
# Ensures every newly opened issue carries `needs-triage`, even blank or
|
|
# API-created ones that bypass the issue templates. Creates the label if it is
|
|
# somehow missing, so the workflow is self-healing.
|
|
|
|
on:
|
|
issues:
|
|
types: [opened]
|
|
|
|
permissions:
|
|
issues: write
|
|
|
|
jobs:
|
|
needs-triage:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Add needs-triage label
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const { owner, repo } = context.repo;
|
|
const issue_number = context.payload.issue.number;
|
|
|
|
const current = (context.payload.issue.labels || []).map(l => l.name);
|
|
if (current.includes('needs-triage')) {
|
|
core.info('Issue already has needs-triage; nothing to do.');
|
|
return;
|
|
}
|
|
|
|
// Self-heal: create the label if it does not exist yet.
|
|
try {
|
|
await github.rest.issues.createLabel({
|
|
owner, repo, name: 'needs-triage', color: 'fef2c0',
|
|
description: 'Awaiting maintainer triage',
|
|
});
|
|
} catch (e) {
|
|
if (e.status !== 422) throw e; // 422 = already exists
|
|
}
|
|
|
|
await github.rest.issues.addLabels({
|
|
owner, repo, issue_number, labels: ['needs-triage'],
|
|
});
|
|
core.info(`Added needs-triage to #${issue_number}.`);
|