Files
hatchet/internal/dagutils/cycles.go
abelanger5 00c4bbff09 feat(v1): new gRPC API endpoints (#1367)
* wip: api contracts

* feat: implement put workflow version endpoint

* add support for match existing data, get scaffolding in place for additional triggers

* create additional matches

* feat: durable sleep, user event matching

* update protos

* fix: working poc of user events, durable sleep

* add migration

* fix: migration column

* feat: durable event listener

* fix: skip overrides

* fix: input -> output
2025-03-23 18:58:20 -07:00

40 lines
710 B
Go

package dagutils
import (
"github.com/hatchet-dev/hatchet/pkg/repository"
)
func HasCycle(steps []repository.CreateWorkflowStepOpts) bool {
graph := make(map[string][]string)
for _, step := range steps {
graph[step.ReadableId] = step.Parents
}
visited := make(map[string]bool)
var dfs func(string) bool
dfs = func(node string) bool {
if seen, ok := visited[node]; ok && seen {
return true
}
if _, ok := graph[node]; !ok {
return false
}
visited[node] = true
for _, parent := range graph[node] {
if dfs(parent) {
return true
}
}
visited[node] = false
return false
}
for _, step := range steps {
if dfs(step.ReadableId) {
return true
}
}
return false
}