v0.270.0: no update for a current app (R-679); an interrupted install is reported (R-681); a restore brings back the pinned version's health check (R-669); R-674
gates / gates (push) Successful in 24s
gates / gates (push) Successful in 24s
Five red-proofs. MinAgent 0.131.0 unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -148,6 +148,9 @@ type Stack struct {
|
||||
AppConfig *AppConfig `json:"app_config,omitempty"`
|
||||
Deploying bool `json:"deploying"` // compose up in progress
|
||||
DeployError string `json:"deploy_error,omitempty"` // last async deploy error
|
||||
// InstallInterrupted (R-681, v0.270.0): the last install was cut off by a controller restart; the
|
||||
// page says so until the next install (read from the stack dir's marker at every scan).
|
||||
InstallInterrupted bool `json:"install_interrupted,omitempty"`
|
||||
// Updating / UpdatePhase / UpdatePhaseLabel / UpdateError (update arc slice 4, v0.237.0) are the
|
||||
// guarded update's in-memory progress, the same shape as Deploying/DeployError: the API answers
|
||||
// 202 at once and the page polls GET /api/stacks/{name}. See update.go.
|
||||
@@ -267,7 +270,10 @@ type Manager struct {
|
||||
// --- guarded update (slice 4, update.go) ---
|
||||
updateGuards UpdateGuards // init-only, SetUpdateGuards; nil ⇒ every update is REFUSED
|
||||
updateComposeFn func(dir string, env []string, args ...string) (string, error)
|
||||
updateHealthFn func(ctx context.Context, name string, timeout time.Duration) (bool, string)
|
||||
// composeDownFn is RecoverInterruptedInstalls' seam (R-681): nil → the real `compose down`. Tests set a
|
||||
// fake so they never reach real Docker (R-650).
|
||||
composeDownFn func(dir string) error
|
||||
updateHealthFn func(ctx context.Context, name string, timeout time.Duration) (bool, string)
|
||||
// v0.263.0 undo seams (undo.go): the volume copier (nil ⇒ docker) and the undo's health wait,
|
||||
// which receives the probe it must use (nil ⇒ waitUpdateHealthyMeta).
|
||||
undoCopier volumeCopier
|
||||
@@ -654,21 +660,23 @@ func (m *Manager) ScanStacks() error {
|
||||
existing.CatalogImages = catImages
|
||||
existing.LadderStepsLeft = stepsLeft
|
||||
existing.CatalogDigests, existing.CatalogTestedAt = catDigests, catTestedAt
|
||||
existing.InstallInterrupted = !deployed && installInterrupted(stackDir) // R-681
|
||||
}
|
||||
} else {
|
||||
m.stacks[name] = &Stack{
|
||||
Name: name,
|
||||
Meta: meta,
|
||||
ComposePath: composePath,
|
||||
State: StateNotDeployed,
|
||||
Deployed: deployed,
|
||||
Protected: m.cfg.IsProtectedStack(name),
|
||||
AppConfig: appCfg,
|
||||
TemplateImages: tplImages,
|
||||
CatalogImages: catImages,
|
||||
LadderStepsLeft: stepsLeft,
|
||||
CatalogDigests: catDigests,
|
||||
CatalogTestedAt: catTestedAt,
|
||||
Name: name,
|
||||
Meta: meta,
|
||||
ComposePath: composePath,
|
||||
State: StateNotDeployed,
|
||||
Deployed: deployed,
|
||||
Protected: m.cfg.IsProtectedStack(name),
|
||||
AppConfig: appCfg,
|
||||
TemplateImages: tplImages,
|
||||
CatalogImages: catImages,
|
||||
LadderStepsLeft: stepsLeft,
|
||||
InstallInterrupted: !deployed && installInterrupted(stackDir), // R-681
|
||||
CatalogDigests: catDigests,
|
||||
CatalogTestedAt: catTestedAt,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user