mirror of
https://github.com/hatchet-dev/hatchet.git
synced 2026-04-28 21:49:55 -05:00
7c3ddfca32
* feat: allow extending the api server * chore: remove internal packages to pkg * chore: update db_gen.go * fix: expose auth * fix: move logger to pkg * fix: don't generate gitignore for prisma client * fix: allow extensions to register their own api spec * feat: expose pool on server config * fix: nil pointer exception on empty opts * fix: run.go file
38 lines
705 B
Go
38 lines
705 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
|
|
}
|