Adds a new Stacks feature: upload/edit docker-compose YAML, deploy as atomic units, browse revisions, roll back, and stream logs. Backend in internal/stack + internal/api/stacks.go, persistent storage in internal/store/stacks.go. Stacks pages (list, new, detail) use a modern Forge aesthetic — Instrument Serif display type, JetBrains Mono for meta/code, indigo ember accents, dot-grid hero, registration marks on hover, terminal panel for logs. Palette is sourced from the app's existing design tokens so the feature remains consistent with the rest of Tinyforge. Fonts self-hosted via @fontsource/instrument-serif and @fontsource/jetbrains-mono to satisfy the strict CSP.
This commit is contained in:
@@ -32,6 +32,7 @@ import (
|
||||
"github.com/alexei/tinyforge/internal/proxy"
|
||||
"github.com/alexei/tinyforge/internal/registry"
|
||||
"github.com/alexei/tinyforge/internal/stale"
|
||||
"github.com/alexei/tinyforge/internal/stack"
|
||||
"github.com/alexei/tinyforge/internal/staticsite"
|
||||
"github.com/alexei/tinyforge/internal/store"
|
||||
"github.com/alexei/tinyforge/internal/webhook"
|
||||
@@ -288,9 +289,24 @@ func main() {
|
||||
slog.Warn("failed to start static site health checker", "error", err)
|
||||
}
|
||||
|
||||
// Initialize stack (docker-compose) manager. Disabled gracefully if
|
||||
// `docker compose` is not available on the host.
|
||||
stackWorkDir := filepath.Join(filepath.Dir(dbPath), "stacks")
|
||||
stackMgr, err := stack.NewManager(db, stack.NewCompose(""), eventBus, stackWorkDir)
|
||||
if err != nil {
|
||||
slog.Warn("failed to init stack manager", "error", err)
|
||||
stackMgr = nil
|
||||
} else if err := stackMgr.Available(context.Background()); err != nil {
|
||||
slog.Warn("docker compose not available — stacks feature disabled", "error", err)
|
||||
stackMgr = nil
|
||||
}
|
||||
|
||||
// Build API server.
|
||||
apiServer := api.NewServer(db, dockerClient, npmClient, proxyProvider, dep, webhookHandler, eventBus, encKey)
|
||||
apiServer.SetStaticSiteManager(staticSiteMgr)
|
||||
if stackMgr != nil {
|
||||
apiServer.SetStackManager(stackMgr)
|
||||
}
|
||||
apiServer.SetStaleScanner(staleScanner)
|
||||
apiServer.SetBackupEngine(backupEngine)
|
||||
apiServer.SetDBPath(dbPath)
|
||||
|
||||
Reference in New Issue
Block a user