kestra-io/kestra · error · PebbleException

The 'isLastWorkingDay()' function received an invalid 'worki

Error message

The 'isLastWorkingDay()' function received an invalid 'workingDays' value: '{trimmed}'. Expected day names like MONDAY, TUESDAY, etc.

What it means

The workingDays argument is parsed as a comma- or space-separated list of day names; each token must be a valid DayOfWeek enum constant (case-insensitive). One token failed DayOfWeek.valueOf.

Source

Thrown at core/src/main/java/io/kestra/core/runners/pebble/functions/IsLastWorkingDayFunction.java:90

        return localDate.isEqual(candidate);
    }

    private Set<DayOfWeek> resolveWorkingDays(Object workingDaysArg, PebbleTemplate self, int lineNumber) {
        if (workingDaysArg == null || workingDaysArg.toString().isBlank()) {
            return DEFAULT_WORKING_DAYS;
        }

        String[] parts = workingDaysArg.toString().split("[,\\s]+");
        Set<DayOfWeek> result = EnumSet.noneOf(DayOfWeek.class);
        for (String part : parts) {
            String trimmed = part.trim();
            if (trimmed.isEmpty()) {
                continue;
            }
            try {
                result.add(DayOfWeek.valueOf(trimmed.toUpperCase()));
            } catch (IllegalArgumentException e) {
                throw new PebbleException(
                    e,
                    "The 'isLastWorkingDay()' function received an invalid 'workingDays' value: '" + trimmed + "'. Expected day names like MONDAY, TUESDAY, etc.",
                    lineNumber, self.getName()
                );
            }
        }

        if (result.isEmpty()) {
            throw new PebbleException(null, "The 'isLastWorkingDay()' function requires at least one valid day in 'workingDays'.", lineNumber, self.getName());
        }

        return result;
    }

    @Override
    public List<String> getArgumentNames() {
        return List.of("date", "workingDays");
    }

View on GitHub (pinned to 823fada927)

Solutions

  1. Use full uppercase day names, comma- or space-separated: 'MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY'.
  2. Omit workingDays to use the default Mon–Fri.

Example fix

// before
{{ isLastWorkingDay(date='2024-01-31', workingDays='MON,TUE') }}
// after
{{ isLastWorkingDay(date='2024-01-31', workingDays='MONDAY,TUESDAY') }}
Defensive patterns

Strategy: validation

Validate before calling

{% set days = (workingDays ?? '')|upper %}{% if days is empty %}{{ isLastWorkingDay(date=myDate) }}{% elseif days in ['MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY'] %}{{ isLastWorkingDay(date=myDate, workingDays=days) }}{% else %}invalid-day{% endif %}

Prevention

When it happens

Trigger: Passing workingDays='MON,TUE' (3-letter abbreviations), 'Monday' (lowercase is fine but 'Mondayy' is not), or a typo.

Common situations: Using 3-letter abbreviations or localized day names instead of the full uppercase enum name.

Related errors


AI-assisted analysis of kestra-io/kestra@823fada927 (2026-08-14). Data as JSON: /api/errors/958e27c533470e0b. Report an issue: GitHub.