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

  1. Call .label("...") and .function(...) (or .assistantFunction(...)) before .build()
  2. Check for exceptions in the builder chain where a fluent call was silently skipped
  3. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/c4168546d856147a. Report an issue: GitHub.