package task import ( "slices" "github.com/go-task/task/v3/errors" "github.com/go-task/task/v3/taskfile/ast" ) func (e *Executor) areTaskRequiredVarsSet(t *ast.Task, call *ast.Call) error { if t.Requires == nil || len(t.Requires.Vars) == 0 { return nil } vars, err := e.Compiler.GetVariables(t, call) if err != nil { return err } var missingVars []string var notAllowedValuesVars []errors.NotAllowedVar for _, requiredVar := range t.Requires.Vars { value, isString := vars.Get(requiredVar.Name).Value.(string) if !vars.Exists(requiredVar.Name) { missingVars = append(missingVars, requiredVar.Name) } else { if isString && requiredVar.Enum != nil && !slices.Contains(requiredVar.Enum, value) { notAllowedValuesVars = append(notAllowedValuesVars, errors.NotAllowedVar{ Value: value, Enum: requiredVar.Enum, Name: requiredVar.Name, }) } } } if len(missingVars) > 0 { return &errors.TaskMissingRequiredVars{ TaskName: t.Name(), MissingVars: missingVars, } } if len(notAllowedValuesVars) > 0 { return &errors.TaskNotAllowedVars{ TaskName: t.Name(), NotAllowedVars: notAllowedValuesVars, } } return nil }