nektos/act · error
%sExpected one of got
Error message
%sExpected one of %s got %s
What it means
Enum error from Node.checkScalar (schema.go:280): the schema declares an AllowedValues list and the scalar's value does not match any entry. The expected list is joined with commas and the actual value appended.
Solutions
- Change the value to one of the comma-separated options shown in the error
- If the value is valid on GitHub but missing from act's schema, update the schema JSON or report an issue
- Quote the value to ensure YAML does not reinterpret it (true/false/null coercion)
Example fix
# before: runs-on: ubutnu-latest # after: runs-on: ubuntu-latest
Defensive patterns
Strategy: validation
Validate before calling
// Validate enum-ish fields against your org's allowed list before committing, mirroring schema AllowedValues
Try / catch
Deterministic validation failure — pick a value from the comma list in the message.
Prevention
- Copy enum values (runner labels, event names) from docs, not memory
- Quote strings like 'true'/'on' so YAML does not coerce them
- Update act if a legitimate new enum value is rejected
When it happens
Trigger: Setting a constrained field to an out-of-list value, e.g. `runs-on: notalabel` when the schema restricts to ubuntu-latest/macos-latest, or a misspelled boolean-like enum value.
Common situations: Typos in enum fields; self-hosted runner labels not present in the schema's allowed list; newer GitHub values not yet added to act's schema.
Related errors
- expressions are not allowed here
- %sExpected a mapping got
- %sExpected a scalar got
- %sExpected a sequence got
- %sExpected got
AI-assisted analysis of nektos/act@4f41128141 (2026-08-15).
Data as JSON: /api/errors/8e138a4c4308f6eb.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/schema/schema.go:280
return fmt.Errorf("%sExpected a scalar got %v", formatLocation(node), getStringKind(node.Kind))
}
if def.String != nil {
return s.checkString(node, def)
} else if def.Number != nil {
var num float64
return node.Decode(&num)
} else if def.Boolean != nil {
var b bool
return node.Decode(&b)
} else if def.AllowedValues != nil {
s := node.Value
for _, v := range *def.AllowedValues {
if s == v {
return nil
}
}
return fmt.Errorf("%sExpected one of %s got %s", formatLocation(node), strings.Join(*def.AllowedValues, ","), s)
} else if def.Null != nil {
var myNull *byte
return node.Decode(&myNull)
}
return errors.ErrUnsupported
}
func (s *Node) checkString(node *yaml.Node, def Definition) error {
val := node.Value
if def.String.Constant != "" && def.String.Constant != val {
return fmt.Errorf("%sExpected %s got %s", formatLocation(node), def.String.Constant, val)
}
if def.String.IsExpression {
parser := actionlint.NewExprParser()
lexer := actionlint.NewExprLexer(val + "}}")
exprNode, parseErr := parser.Parse(lexer)
if parseErr != nil {
return fmt.Errorf("%sFailed to parse: %s", formatLocation(node), parseErr.Message)View on GitHub (pinned to 4f41128141)