Add run lifecycle report projection

This commit is contained in:
npc0-hue
2026-08-06 20:35:13 +08:00
parent 4e78957a60
commit 68921b3f68
13 changed files with 270 additions and 8 deletions
+34 -1
View File
@@ -54,6 +54,30 @@ func ValidateRunJobResult(result domain.RunJobResult) error {
return finish(violations)
}
func ValidateRunLifecycleReport(report domain.RunLifecycleReport) error {
var violations []string
violations = appendRequired(violations, "runEndpointId", report.RunEndpointID)
violations = appendRequired(violations, "sessionToken", report.SessionToken)
violations = appendRequired(violations, "serverInstanceId", report.ServerInstanceID)
violations = appendRequired(violations, "capability", report.Capability)
if !validLifecycleReportCapability(report.Capability) {
violations = append(violations, "capability must be process.install, process.start, process.stop, or process.status")
}
if !validTerminalJobState(report.State) {
violations = append(violations, "state must be succeeded, failed, or cancelled")
}
violations = appendProgressViolations(violations, report.Progress)
violations = appendMessageLength(violations, "message", report.Message)
violations = appendMessageLength(violations, "errorCode", report.ErrorCode)
if len([]byte(report.ExecutionResult.Content)) > maxJobChannelMessageLength*256 {
violations = append(violations, "executionResult.content is too large")
}
if report.ExecutionResult.Checksum != "" && !validSHA256Checksum(report.ExecutionResult.Checksum) {
violations = append(violations, "executionResult.checksum must be sha256:<hex>")
}
return finish(violations)
}
func ValidateDistributionBuildInputRequest(request domain.DistributionBuildInputRequest) error {
var violations []string
violations = appendLeaseFields(violations, request.RunEndpointID, request.SessionToken, request.JobID, request.LeaseToken, request.Attempt)
@@ -159,7 +183,7 @@ func appendProgressViolations(violations []string, progress domain.RunJobProgres
func validDeploymentProgressPhase(phase string) bool {
switch phase {
case "queued", "claimed", "preflight", "install", "configure", "start", "health":
case "queued", "claimed", "preflight", "install", "configure", "start", "stop", "status", "health":
return true
default:
return false
@@ -181,3 +205,12 @@ func validTerminalJobState(state domain.JobState) bool {
return false
}
}
func validLifecycleReportCapability(capability string) bool {
switch capability {
case domain.LifecycleCapabilityInstall, domain.LifecycleCapabilityStart, domain.LifecycleCapabilityStop, domain.LifecycleCapabilityStatus:
return true
default:
return false
}
}