rebrand: Switchboard Core → Armature

- Rename Go module switchboard-core → armature (155+ files)
- Rename Docker image → gobha/armature
- Rename K8s resources, secrets, deployments
- Rename Prometheus metrics switchboard_* → armature_*
- Rename env vars SWITCHBOARD_ADMIN_* → ARMATURE_ADMIN_*
- Rename DB names switchboard_core* → armature*
- Update all frontend branding, notification templates, docs
- Update CI scripts, e2e tests, Keycloak realm, nginx conf
- Rename scripts/switchboard-ca.sh → scripts/armature-ca.sh
- Rename k8s/switchboard.yaml → k8s/armature.yaml
- Rename chart alerting/dashboard files
- Fix: DockerHub push uses env: binding for secret injection
- Helm chart updated (name, labels, template functions, dashboard, alerting)
- Replace favicon/icon assets with Armature brand

No functional changes. Pure mechanical rename + CI fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-31 21:39:58 +00:00
parent fb5284f667
commit f0dd43144e
287 changed files with 898 additions and 975 deletions

View File

@@ -10,7 +10,7 @@ import (
"strings"
"time"
"switchboard-core/store"
"armature/store"
)
// SMTPConfig holds SMTP connection settings, loaded from platform_settings.

View File

@@ -7,9 +7,9 @@ import (
"sync"
"time"
"switchboard-core/events"
"switchboard-core/models"
"switchboard-core/store"
"armature/events"
"armature/models"
"armature/store"
)
// ── Package-level singleton ─────────────────
@@ -53,7 +53,7 @@ func NewService(s store.NotificationStore, hub *events.Hub) *Service {
return &Service{
store: s,
hub: hub,
instanceName: "Switchboard Core",
instanceName: "Armature",
retentionDays: 90,
stopCleanup: make(chan struct{}),
}

View File

@@ -4,7 +4,7 @@ import (
"context"
"testing"
"switchboard-core/models"
"armature/models"
)
// mockPrefStore implements store.NotificationPreferenceStore for testing.

View File

@@ -6,10 +6,10 @@ import (
"fmt"
"log"
"switchboard-core/auth"
"switchboard-core/events"
"switchboard-core/models"
"switchboard-core/store"
"armature/auth"
"armature/events"
"armature/models"
"armature/store"
)
// ── Role Fallback ───────────────────────────

View File

@@ -5,7 +5,7 @@ import (
"testing"
"time"
"switchboard-core/models"
"armature/models"
)
// mockNotifStore implements store.NotificationStore for testing.

View File

@@ -5,7 +5,7 @@ import (
"html/template"
"strings"
"switchboard-core/models"
"armature/models"
)
// ── Template Data ───────────────────────────
@@ -54,7 +54,7 @@ Adjust your notification preferences in Settings.
// RenderHTML renders an HTML email body for a notification.
func RenderHTML(n *models.Notification, instanceName string) string {
if instanceName == "" {
instanceName = "Switchboard Core"
instanceName = "Armature"
}
data := emailData{
Title: n.Title,
@@ -73,7 +73,7 @@ func RenderHTML(n *models.Notification, instanceName string) string {
// RenderText renders a plaintext email body for a notification.
func RenderText(n *models.Notification, instanceName string) string {
if instanceName == "" {
instanceName = "Switchboard Core"
instanceName = "Armature"
}
data := emailData{
Title: n.Title,
@@ -92,7 +92,7 @@ func RenderText(n *models.Notification, instanceName string) string {
// SubjectForNotification returns an email subject line.
func SubjectForNotification(n *models.Notification, instanceName string) string {
if instanceName == "" {
instanceName = "Switchboard Core"
instanceName = "Armature"
}
prefix := "[" + instanceName + "] "
switch {

View File

@@ -4,7 +4,7 @@ import (
"strings"
"testing"
"switchboard-core/models"
"armature/models"
)
func TestRenderHTML_Basic(t *testing.T) {
@@ -28,7 +28,7 @@ func TestRenderHTML_Basic(t *testing.T) {
func TestRenderHTML_DefaultInstanceName(t *testing.T) {
n := &models.Notification{Title: "Test"}
html := RenderHTML(n, "")
if !strings.Contains(html, "Switchboard Core") {
if !strings.Contains(html, "Armature") {
t.Error("expected default instance name")
}
}