fix: Add Railway deployment configs and GitHub workflows

- 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>
This commit is contained in:
Alexa Louise
2025-12-10 15:35:09 -06:00
parent 5b8f5be59a
commit c00b6ee2a1
30 changed files with 2712 additions and 198 deletions

103
.github/workflows/issue-triage.yml vendored Normal file
View File

@@ -0,0 +1,103 @@
# ============================================================================
# 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;
}
}