- Add slot_finalizer.go for terminal state management - Add live cycle smoke test documentation - Archive completed subtasks (slot terminal state, live cycle smoke) - Update scheduler jobs and workflow service for roadmap sync - Update authoring request/result handlers - Update milestone documentation
44 lines
1.5 KiB
Go
44 lines
1.5 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"github.com/nomadcode/nomadcode-core/internal/authoring"
|
|
"github.com/nomadcode/nomadcode-core/internal/db"
|
|
"github.com/nomadcode/nomadcode-core/internal/projectsync"
|
|
"github.com/nomadcode/nomadcode-core/internal/storage"
|
|
)
|
|
|
|
type WorkspaceSlotStateUpdater interface {
|
|
UpdateWorkspaceSlotState(ctx context.Context, args db.UpdateWorkspaceSlotStateParams) (db.WorkspaceSlot, error)
|
|
}
|
|
|
|
func applyTaskSlotTerminalState(ctx context.Context, updater WorkspaceSlotStateUpdater, task storage.Task, state projectsync.SlotState, logger *slog.Logger) {
|
|
if updater == nil {
|
|
return
|
|
}
|
|
checkout, ok := authoring.TaskCheckoutMetadata(task)
|
|
if !ok || checkout.SlotID <= 0 {
|
|
if logger != nil {
|
|
logger.Warn("authoring task missing slot metadata; skipping slot terminal state update", "task_id", task.ID)
|
|
}
|
|
return
|
|
}
|
|
params, err := projectsync.ToUpdateWorkspaceSlotStateParams(checkout.SlotID, state)
|
|
if err != nil {
|
|
if logger != nil {
|
|
logger.Warn("invalid slot terminal state; skipping slot update", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state), "error", err)
|
|
}
|
|
return
|
|
}
|
|
if _, err := updater.UpdateWorkspaceSlotState(ctx, params); err != nil {
|
|
if logger != nil {
|
|
logger.Warn("workspace slot terminal state update failed", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state), "error", err)
|
|
}
|
|
return
|
|
}
|
|
if logger != nil {
|
|
logger.Info("workspace slot terminal state updated", "task_id", task.ID, "slot_id", checkout.SlotID, "state", string(state))
|
|
}
|
|
}
|