quarkusio/quarkus · error · RuntimeException
Not enough information to build the action. Set at least lab
Error message
Not enough information to build the action. Set at least label and function/assistantFunction
What it means
ActionBuilder.build() enforces a minimum contract for a Dev UI workspace Action: a label plus at least one of a plain function or an assistantFunction. If either requirement is unmet, it throws a RuntimeException instead of building a half-specified Action.
Source
Thrown at extensions/devui/deployment-spi/src/main/java/io/quarkus/devui/spi/workspace/ActionBuilder.java:68
public ActionBuilder display(Display display) {
this.display = display;
return this;
}
public ActionBuilder displayType(DisplayType displayType) {
this.displayType = displayType;
return this;
}
public ActionBuilder pathConverter(Function<Path, Path> pathConverter) {
this.pathConverter = pathConverter;
return this;
}
public Action build() {
if (this.label == null || (this.function == null && this.assistantFunction == null)) {
throw new RuntimeException(
"Not enough information to build the action. Set at least label and function/assistantFunction");
}
return new Action(label, namespace, function, assistantFunction, filter, display, displayType, pathConverter);
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Call .label("...") and .function(...) (or .assistantFunction(...)) before .build()
- Check for exceptions in the builder chain where a fluent call was silently skipped
- If the action is genuinely optional, skip building it entirely rather than building without a function
Example fix
// before
Action a = new ActionBuilder().namespace("my-ext").build();
// after
Action a = new ActionBuilder().namespace("my-ext").label("Do it").function(fn).build(); Defensive patterns
Strategy: validation
Validate before calling
if (label == null || fn == null) { throw new IllegalStateException("Action requires label and function"); }
Action a = new ActionBuilder().label(label).function(fn).build(); Prevention
- Build actions in one fluent chain so required setters cannot be skipped
- Wrap ActionBuilder usage in a helper that enforces label+function
When it happens
Trigger: Calling ActionBuilder.build() after setting only the namespace/filter/display fields, or setting label but forgetting createFunction()/assistantFunction(), or setting a function but no label.
Common situations: Extension authors wiring Dev UI actions conditionally and skipping the function setter when a condition is false; renaming a fluent setter so the call no longer lands.
Related errors
- Invalid component [${componentName}]
- An error occurred while processing ${resourceName}
- Invalid hue, number needs to be between 0 and 360. Defines a
- Invalid saturation, number needs to be between 0 and 100. 0%
- Invalid lightness, number needs to be between 0 and 100. 0%
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/c4168546d856147a.
Report an issue: GitHub.