feat: better taskfile cycle error handling

This commit is contained in:
Pete Davison
2024-04-09 12:37:18 +01:00
parent 0a027df50d
commit 220bf74a9e
3 changed files with 25 additions and 0 deletions
+1
View File
@@ -20,6 +20,7 @@ const (
CodeTaskfileVersionCheckError
CodeTaskfileNetworkTimeout
CodeTaskfileDuplicateInclude
CodeTaskfileCycle
)
// Task related exit codes
+18
View File
@@ -191,3 +191,21 @@ func (err *TaskfileDuplicateIncludeError) Error() string {
func (err *TaskfileDuplicateIncludeError) Code() int {
return CodeTaskfileDuplicateInclude
}
// TaskfileCycleError is returned when we detect that a Taskfile includes a
// set of Taskfiles that include each other in a cycle.
type TaskfileCycleError struct {
Source string
Destination string
}
func (err TaskfileCycleError) Error() string {
return fmt.Sprintf("task: include cycle detected between %s <--> %s",
err.Source,
err.Destination,
)
}
func (err TaskfileCycleError) Code() int {
return CodeTaskfileCycle
}
+6
View File
@@ -153,6 +153,12 @@ func (r *Reader) include(node Node) error {
Namespaces: []string{namespace, edge.Properties.Data.(*ast.Include).Namespace},
}
}
if errors.Is(err, graph.ErrEdgeCreatesCycle) {
return errors.TaskfileCycleError{
Source: node.Location(),
Destination: includeNode.Location(),
}
}
return err
})
return nil