{"record":{"id":"df51aff67dbbb6e4","repo":"nektos/act","slug":"too-many-parameters-for-s-expected-v-got-v","errorCode":null,"errorMessage":"Too many parameters for %s expected <= %v got %v","messagePattern":"Too many parameters for (.+?) expected <= (.+?) got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/schema/schema.go","lineNumber":148,"sourceCode":"\t\tcase actionlint.TokenKindString:\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"expressions are not allowed here\")\n\t\t}\n\t}\n\n\tfuncs := s.GetFunctions()\n\n\tvar err error\n\tactionlint.VisitExprNode(exprNode, func(node, _ actionlint.ExprNode, entering bool) {\n\t\tif funcCallNode, ok := node.(*actionlint.FuncCallNode); entering && ok {\n\t\t\tfor _, v := range *funcs {\n\t\t\t\tif strings.EqualFold(funcCallNode.Callee, v.name) {\n\t\t\t\t\tif v.min > len(funcCallNode.Args) {\n\t\t\t\t\t\terr = errors.Join(err, fmt.Errorf(\"Missing parameters for %s expected >= %v got %v\", funcCallNode.Callee, v.min, len(funcCallNode.Args)))\n\t\t\t\t\t}\n\t\t\t\t\tif v.max < len(funcCallNode.Args) {\n\t\t\t\t\t\terr = errors.Join(err, fmt.Errorf(\"Too many parameters for %s expected <= %v got %v\", funcCallNode.Callee, v.max, len(funcCallNode.Args)))\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = errors.Join(err, fmt.Errorf(\"Unknown Function Call %s\", funcCallNode.Callee))\n\t\t}\n\t\tif varNode, ok := node.(*actionlint.VariableNode); entering && ok {\n\t\t\tfor _, v := range s.Context {\n\t\t\t\tif strings.EqualFold(varNode.Name, v) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = errors.Join(err, fmt.Errorf(\"Unknown Variable Access %s\", varNode.Name))\n\t\t}\n\t})\n\treturn err\n}\n","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/nektos/act/blob/4f411281417e88660bea1c1a1749aa71ae0bd60f/pkg/schema/schema.go#L130-L166","documentation":"Validation error from checkSingleExpression in pkg/schema/schema.go when a function call in a ${{ }} expression passes more arguments than the function's declared maximum arity (e.g. contains max 2, join max 2, toJSON max 1).","triggerScenarios":"Calling a known function with extra args: ${{ contains(a, b, c) }}, ${{ join(array, ',', 'x') }}. The check fires when v.max < len(funcCallNode.Args).","commonSituations":"Assuming variadic behavior where none exists (e.g. chaining format-like args into contains); porting shell-script idioms into expressions; copy-paste adding separators to join.","solutions":["Remove the extra argument(s) to fit the max arity in the GetFunctions table","Split the logic into nested calls, e.g. contains(a,b) && contains(a,c) instead of a 3-arg contains","Run schema validation / actionlint locally to catch arity errors pre-commit"],"exampleFix":"# before:\nif: ${{ contains(github.event.head_commit.message, 'wip', 'draft') }}\n# after:\nif: ${{ contains(github.event.head_commit.message, 'wip') || contains(github.event.head_commit.message, 'draft') }}","handlingStrategy":"validation","validationCode":"// Same arity table as error 182: assert len(args) <= max for every function call in your expressions","typeGuard":null,"tryCatchPattern":"Deterministic validation failure — fix and re-run; do not catch-and-continue.","preventionTips":["Remember contains/startsWith/endsWith take exactly 2 args","Nest calls instead of adding extra arguments","Lint workflows in CI"],"tags":["go","act","schema-validation","expressions","function-arity"],"backgroundTag":null,"analyzedSha":"4f411281417e88660bea1c1a1749aa71ae0bd60f","analyzedAt":"2026-08-15T09:19:46.307Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}