fix: accept failed operator results without revision identity

This commit is contained in:
2026-08-11 19:52:52 +02:00
parent 498a93d915
commit da214820b0
@@ -357,11 +357,13 @@ func validateResult(result Result) error {
if !workspacePattern.MatchString(result.WorkspaceID) {
return errors.New("workspace maintenance returned an invalid workspace identity")
}
if len(result.WorkspaceRevision) != 40 || !isLowerHex(result.WorkspaceRevision) {
return errors.New("workspace maintenance returned an invalid workspace revision")
}
if !strings.HasPrefix(result.DescriptorBlob, "sha256:") || len(result.DescriptorBlob) != len("sha256:")+64 || !isLowerHex(strings.TrimPrefix(result.DescriptorBlob, "sha256:")) {
return errors.New("workspace maintenance returned an invalid descriptor digest")
if result.Status != "failed" {
if len(result.WorkspaceRevision) != 40 || !isLowerHex(result.WorkspaceRevision) {
return errors.New("workspace maintenance returned an invalid workspace revision")
}
if !strings.HasPrefix(result.DescriptorBlob, "sha256:") || len(result.DescriptorBlob) != len("sha256:")+64 || !isLowerHex(strings.TrimPrefix(result.DescriptorBlob, "sha256:")) {
return errors.New("workspace maintenance returned an invalid descriptor digest")
}
}
validStatuses := map[string]struct{}{"succeeded": {}, "unchanged": {}, "dry_run": {}, "blocked": {}, "failed": {}}
if _, ok := validStatuses[result.Status]; !ok {
@@ -370,9 +372,11 @@ func validateResult(result Result) error {
if strings.TrimSpace(result.Code) == "" || strings.TrimSpace(result.Operation) == "" || result.CompletedStages == nil {
return errors.New("workspace maintenance omitted required fields")
}
for _, digest := range result.ArtifactIdentities {
if strings.TrimSpace(digest.Kind) == "" || !strings.HasPrefix(digest.Digest, "sha256:") {
return errors.New("workspace maintenance returned an invalid artifact identity")
if result.Status != "failed" {
for _, digest := range result.ArtifactIdentities {
if strings.TrimSpace(digest.Kind) == "" || !strings.HasPrefix(digest.Digest, "sha256:") {
return errors.New("workspace maintenance returned an invalid artifact identity")
}
}
}
return nil