mirror of
https://github.com/hatchet-dev/hatchet.git
synced 2026-04-29 05:59:52 -05:00
feat: improved dag validation (#915)
This commit is contained in:
@@ -441,6 +441,15 @@ func getCreateWorkflowOpts(req *contracts.PutWorkflowRequest) (*repository.Creat
|
||||
res, err := getCreateJobOpts(jobCp, "DEFAULT")
|
||||
|
||||
if err != nil {
|
||||
|
||||
if errors.Is(err, repository.ErrDagParentNotFound) {
|
||||
// Extract the additional error information
|
||||
return nil, status.Error(
|
||||
codes.InvalidArgument,
|
||||
err.Error(),
|
||||
)
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -528,6 +537,8 @@ func getCreateWorkflowOpts(req *contracts.PutWorkflowRequest) (*repository.Creat
|
||||
func getCreateJobOpts(req *contracts.CreateWorkflowJobOpts, kind string) (*repository.CreateWorkflowJobOpts, error) {
|
||||
steps := make([]repository.CreateWorkflowStepOpts, len(req.Steps))
|
||||
|
||||
stepReadableIdMap := make(map[string]bool)
|
||||
|
||||
for j, step := range req.Steps {
|
||||
stepCp := step
|
||||
|
||||
@@ -539,6 +550,8 @@ func getCreateJobOpts(req *contracts.CreateWorkflowJobOpts, kind string) (*repos
|
||||
|
||||
retries := int(stepCp.Retries)
|
||||
|
||||
stepReadableIdMap[stepCp.ReadableId] = true
|
||||
|
||||
var affinity map[string]repository.DesiredWorkerLabelOpts
|
||||
|
||||
if stepCp.WorkerLabels != nil {
|
||||
@@ -596,6 +609,15 @@ func getCreateJobOpts(req *contracts.CreateWorkflowJobOpts, kind string) (*repos
|
||||
}
|
||||
}
|
||||
|
||||
// Check if parents are in the map
|
||||
for _, step := range req.Steps {
|
||||
for _, parent := range step.Parents {
|
||||
if !stepReadableIdMap[parent] {
|
||||
return nil, fmt.Errorf("%w: parent step '%s' not found for step '%s'", repository.ErrDagParentNotFound, parent, step.ReadableId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &repository.CreateWorkflowJobOpts{
|
||||
Name: req.Name,
|
||||
Description: &req.Description,
|
||||
|
||||
Reference in New Issue
Block a user