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:
@@ -234,6 +234,44 @@ type StaticSiteSecret struct {
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
}
|
||||
|
||||
// Stack represents a docker-compose stack managed as a single deployable unit.
|
||||
type Stack struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
ComposeProjectName string `json:"compose_project_name"` // `-p` arg for docker compose
|
||||
Status string `json:"status"` // stopped, deploying, running, failed
|
||||
Error string `json:"error"`
|
||||
CurrentRevisionID string `json:"current_revision_id"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
}
|
||||
|
||||
// StackRevision is an append-only record of a YAML version for a stack.
|
||||
// Rollback = insert a new revision whose YAML is copied from an older one.
|
||||
type StackRevision struct {
|
||||
ID string `json:"id"`
|
||||
StackID string `json:"stack_id"`
|
||||
Revision int `json:"revision"` // monotonic per stack
|
||||
YAML string `json:"yaml"`
|
||||
Author string `json:"author"`
|
||||
DeployID string `json:"deploy_id"`
|
||||
Status string `json:"status"` // pending, success, failed
|
||||
CreatedAt string `json:"created_at"`
|
||||
}
|
||||
|
||||
// StackDeploy records a deployment attempt of a specific revision.
|
||||
type StackDeploy struct {
|
||||
ID string `json:"id"`
|
||||
StackID string `json:"stack_id"`
|
||||
RevisionID string `json:"revision_id"`
|
||||
Status string `json:"status"` // pending, deploying, success, failed, rolled_back
|
||||
Log string `json:"log"`
|
||||
Error string `json:"error"`
|
||||
StartedAt string `json:"started_at"`
|
||||
FinishedAt string `json:"finished_at"`
|
||||
}
|
||||
|
||||
// EventLog represents a persistent event log entry.
|
||||
type EventLog struct {
|
||||
ID int64 `json:"id"`
|
||||
|
||||
Reference in New Issue
Block a user