mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 05:57:21 -05:00
- Add Railway configuration (railway.toml) - Add GitHub Actions workflows - Railway deployment automation - Python/Node.js testing - Health check monitoring - Add GitHub templates (CODEOWNERS, PR template) - Add requirements files if missing - Standardize deployment across all services This ensures consistent deployment patterns across the entire BlackRoad OS infrastructure. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
104 lines
3.6 KiB
YAML
104 lines
3.6 KiB
YAML
# ============================================================================
|
||
# BlackRoad OS - Issue Triage Automation
|
||
# Copyright (c) 2025 BlackRoad OS, Inc. / Alexa Louise Amundson
|
||
# All Rights Reserved.
|
||
# ============================================================================
|
||
#
|
||
# Automatically triages and organizes new issues.
|
||
# ============================================================================
|
||
|
||
name: Issue Triage
|
||
|
||
on:
|
||
issues:
|
||
types: [opened, labeled]
|
||
|
||
permissions:
|
||
issues: write
|
||
|
||
jobs:
|
||
triage:
|
||
name: Triage New Issues
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Add triage label to new issues
|
||
if: github.event.action == 'opened'
|
||
uses: actions/github-script@v7
|
||
with:
|
||
script: |
|
||
const issue = context.payload.issue;
|
||
|
||
// Check if issue has any labels
|
||
if (issue.labels.length === 0) {
|
||
await github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
labels: ['triage']
|
||
});
|
||
console.log('Added triage label to issue #' + issue.number);
|
||
}
|
||
|
||
- name: Remove triage label when other labels added
|
||
if: github.event.action == 'labeled' && github.event.label.name != 'triage'
|
||
uses: actions/github-script@v7
|
||
with:
|
||
script: |
|
||
const issue = context.payload.issue;
|
||
const hasTriageLabel = issue.labels.some(l => l.name === 'triage');
|
||
|
||
if (hasTriageLabel) {
|
||
try {
|
||
await github.rest.issues.removeLabel({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
name: 'triage'
|
||
});
|
||
console.log('Removed triage label from issue #' + issue.number);
|
||
} catch (e) {
|
||
console.log('Could not remove triage label:', e.message);
|
||
}
|
||
}
|
||
|
||
- name: Add priority based on title
|
||
if: github.event.action == 'opened'
|
||
uses: actions/github-script@v7
|
||
with:
|
||
script: |
|
||
const issue = context.payload.issue;
|
||
const title = issue.title.toLowerCase();
|
||
const body = (issue.body || '').toLowerCase();
|
||
|
||
// Check for priority indicators
|
||
if (title.includes('critical') || title.includes('urgent') || title.includes('security')) {
|
||
await github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
labels: ['priority/high']
|
||
});
|
||
}
|
||
|
||
// Check for component mentions
|
||
const components = {
|
||
'quantum': ['quantum', 'ψ', 'brq-', 'pennylane'],
|
||
'operator': ['operator', 'ledger', 'promotion'],
|
||
'teacher': ['teacher', 'σ', 'lesson', 'quiz'],
|
||
'cli': ['br-', 'cli', 'terminal', 'command'],
|
||
'web': ['console', 'dashboard', 'ui', 'web'],
|
||
'agents': ['agent', 'lucidia', 'cece', 'roadie']
|
||
};
|
||
|
||
for (const [label, keywords] of Object.entries(components)) {
|
||
if (keywords.some(k => title.includes(k) || body.includes(k))) {
|
||
await github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
labels: [label]
|
||
});
|
||
break;
|
||
}
|
||
}
|