feat: declare and execute SCUM guided installs

This commit is contained in:
npc0-hue
2026-07-27 20:09:14 +08:00
parent 08fa5488f2
commit 2ae27bb746
21 changed files with 185 additions and 9 deletions
+28 -1
View File
@@ -38,6 +38,13 @@ func (svc *CoreService) UpdateServerDeploymentForSession(sessionID, serverInstan
if instance.State == domain.ServerInstanceStateInstalling || instance.State == domain.ServerInstanceStateRunning || instance.State == domain.ServerInstanceStateDeleted {
return domain.ServerDeploymentView{}, validationError("deployment definition cannot be changed while the server is active")
}
seenClearFields := map[string]bool{}
for _, field := range update.ClearFields {
if seenClearFields[field] || field != "serverRoot" && field != "workingDirectory" && field != "installCommand" && field != "startCommand" && field != "stopCommand" && field != "statusCommand" && field != "shell" {
return domain.ServerDeploymentView{}, validationError("deployment clearFields contains an invalid field")
}
seenClearFields[field] = true
}
definition := mergeDeploymentDefinition(instance.Deployment, update)
definition.Revision = instance.Deployment.Revision + 1
definition.UpdatedAt = svc.now()
@@ -194,6 +201,24 @@ func deploymentShellCapability(shell domain.ServerCommandShell) string {
func mergeDeploymentDefinition(current domain.ServerDeploymentDefinition, update domain.ServerDeploymentUpdate) domain.ServerDeploymentDefinition {
definition := domain.CopyServerDeploymentDefinition(current)
for _, field := range update.ClearFields {
switch field {
case "serverRoot":
definition.ServerRoot = ""
case "workingDirectory":
definition.WorkingDirectory = ""
case "installCommand":
definition.InstallCommand = ""
case "startCommand":
definition.StartCommand = ""
case "stopCommand":
definition.StopCommand = ""
case "statusCommand":
definition.StatusCommand = ""
case "shell":
definition.Shell = domain.ServerCommandShellNone
}
}
definition.Mode = update.Mode
if update.ProfileKey != "" {
definition.ProfileKey = update.ProfileKey
@@ -222,7 +247,9 @@ func mergeDeploymentDefinition(current domain.ServerDeploymentDefinition, update
if update.StatusCommand != "" {
definition.StatusCommand = update.StatusCommand
}
definition.Shell = update.Shell
if update.ShellSet {
definition.Shell = update.Shell
}
return definition
}