fix: accept failed operator results without revision identity
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user