Features
- ui: add relative and absolute dates as filtering options (#5898) #5898 (Miloš Paunović)
- ui: add page settings dropdown to filters (#5905) #5905 (Miloš Paunović)
- core: add support for AppPluginInterface #5803 (Florian Hussonnois)
- ui: add right click actions to editor tabs (#5869) #5869 (Ian Cheng)
- ui: add cancel button to execution resume dialog (#5859) #5859 (RyanVem)
- ui: display input error (#5919) #5919 (YannC)
- core: refactor ExecutionLogService #5913 (Florian Hussonnois)
- core: Implement fileSize() function #5935 (benjo.sinanovic)
- ui: allow to not show toast on server error response #5938 (Florian Hussonnois)
- ui: implement local search for kv store (#5963) #5963 (sophiakkm)
- core: refactor flow trigger #5903 (Loïc Mathieu)
- replace EachSequential with ForEach (#5978) #5978 (Shruti Mantri)
- ui: introduce new filtering system (#5988) #5988 (Miloš Paunović)
- replace EachParallel with ForEach (#5979) #5979 (Shruti Mantri)
- fileURI() Pebble Function (asharan2buff)
- core: add a path traversal guard to the fileURI Pebble function #6015 (Loïc Mathieu)
- in app contextual docs (#5906) #5906 (Barthélémy Ledoux)
- tasks: support allowFailed on http.Download tasks (Ludovic DEHON)
- *****: exception error from logs #5989 (Loïc Mathieu)
- core: add
errorLogs()
Pebble function #5989 (Loïc Mathieu) - *****: add namespace as a parameter of the internal storage #6022 (Loïc Mathieu)
- Rework user invitation (#5853) #5853 (YannC)
- core: rename all conditons to not ends with Condition #6032 (Loïc Mathieu)
- core: Add displayName to flow level outputs(backend) (#5605) #5605 (Kratos)
- ui: use default styled scrollbar (Ludovic DEHON)
- ui: fix create execution layout (Ludovic DEHON)
- jdbc: Improve execution queued performance #6050 (Loïc Mathieu)
- ui: restore red marker show new blog posts (#6054) #6054 (Barthélémy Ledoux)
- core: set Data property to not dynamic #6058 (Loïc Mathieu)
- core: flow SLA #5907 (Loïc Mathieu)
- ui: better error message on overview header (#6105) #6105 (Ludovic DEHON)
- core: allow accessing Worker thread count #6087 (Loïc Mathieu)
- core: check for system label at validation time #6088 (Loïc Mathieu)
- ui: tag light color (YannC)
- ui: allows to copy id from Id tooltip (YannC)
- ui: better banner color (YannC)
- plugin layout is now dotted (#6143) #6143 (Barthélémy Ledoux)
- ui: improve keyboard selection of new filters (#6147) #6147 (Miloš Paunović)
- ui: Implemented all state colors and design from Figma (YannC)
- ui: Cascader to use CSS ellipsis instead of truncated label (#6161) #6161 (Barthélémy Ledoux)
- InputsForm: delay watchers until flow, execution & default values are set (#6151) #6151 (Barthélémy Ledoux)
- core: rename EXECUTION_CONDITION SLA to EXECUTION_ASSERTION (#6187) #6187 (Loïc Mathieu)
- ui: add a hamburger dropdown component (Ludovic DEHON)
- ui: add icon on filter bars (Ludovic DEHON)
- *****: introduce custom dashboards (#6144) #6144 (brian-mulier-p)
- core: Missing RegisteredPlugin (#6189) #6189 (YannC)
- core: dymamic timeout and delay in the Pause task #6199 (Loïc Mathieu)
- core: implements equals() and hashCode() for Property #6199 (Loïc Mathieu)
- core: flow SLA is in beta (Loïc Mathieu)
Bug Fixes
- core: flaky tests #5901 (Loïc Mathieu)
- ui: display the correct key (#5886) #5886 (YannC)
- core: multiple condition test is flaky #5904 (Loïc Mathieu)
- docs: runner -> taskRunner (Will Russell)
- ui: change usage of method which is not widely supported (#5864) #5864 (yuri)
- ui: make whole gantt task row clickable (#5863) #5863 (yuri)
- ui: disable sidebar version tooltip when no commitId or collapsed (#5910) #5910 (Barthélémy Ledoux)
- core: retry flaky test InputsTest.shouldNotLogSecretInput() #5909 (Loïc Mathieu)
- ui: amend the expansion of execution fields (#5922) #5922 (Miloš Paunović)
- ui: fix FilePreview when configs not loaded #5930 (Florian Hussonnois)
- ui: add missing toIon and fromIon Pebble function and filter #5934 (Loïc Mathieu)
- ui: add errors to all validation methods #5938 (Florian Hussonnois)
- docs: depreciated examples (Will Russell)
- ui: hide input validation success icon from flow run dialog (#5953) #5953 (Miloš Paunović)
- ui: check if element exists before amending the size of it (MilosPaunovic)
- ui: amend pebble expression in execution outputs debug section (#5943) #5943 (Manoj Balaraj)
- ui: pass with credentials as true to follow endpoints (#5968) #5968 (Miloš Paunović)
- core: preconditions evaluation can NPE #5967 (Loïc Mathieu)
- coe: missing call to allowedTrigger from kv Pebble Function #5969 (Loïc Mathieu)
- ui: properly check if result list is empty before showing empty state component (#5972) #5972 (Miloš Paunović)
- plugins: allow big archive size on docker runner (Ludovic DEHON)
- "jump to" does not load (#5995) #5995 (Barthélémy Ledoux)
- better comparison of triggers (#6018) #6018 (YannC)
- ui: handle time values as execution chart x axis label (#6019) #6019 (Miloš Paunović)
- ui: hide navbar on error in fullscreen #6020 (Florian Hussonnois)
- ui: amend typo in documentation (#6023) #6023 (techwithsatish)
- docs: open in a new window + light mode (#6026) #6026 (Barthélémy Ledoux)
- after context docs, some light fixes and cleanup (#6030) #6030 (Barthélémy Ledoux)
- ui: missing translation (YannC)
- core: only add the errorLogs() function if a repository is configured #6035 (Loïc Mathieu)
- ui: better layout for side bar (Ludovic DEHON)
- ui: error message should be next to the good input (Ludovic DEHON)
- ui: dialog header title layout (Ludovic DEHON)
- ui: global search background wrong background (Ludovic DEHON)
- ui: failed to change class name on menu collapse (Ludovic DEHON)
- update light mode dots layout (Bart Ledoux)
- platform: force all Jackson libs indivudually #6049 (Loïc Mathieu)
- ui: avoid dashboard blinking on flow create (Ludovic DEHON)
- core: use pattern inseatd of format in the JSON Schema #6058 (Loïc Mathieu)
- ui: curl message warning was not clear enough (#6068) #6068 (Ruturaj Dhakane)
- remove full reactive on context info bar (#6069) #6069 (Barthélémy Ledoux)
- webserver: set labels now sends all labels #6075 (Loïc Mathieu)
- ui: more visible tag (YannC)
- ui: better code color visiblity in light theme (YannC)
- ui: link css (YannC)
- core: serialize duration as strings in Property #6080 (Loïc Mathieu)
- ui: issue on trigger list when no cron (YannC)
- controller: handle recoverMissedScheduled property of triggers (#6084) #6084 (YannC)
- wording (Anna Geller)
- ui: keep multiple line on the logs (Ludovic DEHON)
- core: wait for error logs in the Pebble function #6106 (Loïc Mathieu)
- ui: only display exception error for FAILED exceptions #6110 (Loïc Mathieu)
- treat undefined boolean as undefined instead of false (#6086) #6086 (Barthélémy Ledoux)
- debounce validation of data (#6051) #6051 (Barthélémy Ledoux)
- core: use OffsetTIme in TimeWindow #6114 (Loïc Mathieu)
- controller: Return failing file/flow when doing flow import (#6090) #6090 (YannC)
- core: LocalFileWatcher correctly load existing flow in folder (YannC)
- the validation of booleans (#6124) #6124 (Barthélémy Ledoux)
- ui: update background color in DottedLayout component (#6128) #6128 (Barthélémy Ledoux)
- update "light" icon with less dark gray (Bart Ledoux)
- darken the green color (Bart Ledoux)
- core: flow trigger dependencies #6125 (Loïc Mathieu)
- core: avoid infinite loop for SLA #6148 (brian.mulier)
- add initial 3rd call to validate for apps (Bart Ledoux)
- ui: use grid instead of flex for plugins alignment (#6157) #6157 (Barthélémy Ledoux)
- ui: table header are not visible enough (Ludovic DEHON)
- include offset in preconditions (Anna Geller)
- core: don't return a new window for exceeded deadline #6159 (Loïc Mathieu)
- core: local time format #6167 (Loïc Mathieu)
- core: use local time in Multiple condition TimeWindow #6169 (Loïc Mathieu)
- ui: overview logs are not displayed when only one is available (Ludovic DEHON)
- ui: state in dark are using the wrong color (Ludovic DEHON)
- ui: revert bar on the execution > logs page (Ludovic DEHON)
- ui: hide useless columns on temporal view (Ludovic DEHON)
- core: compilation issue (Loïc Mathieu)
- ui: improve filter behaviours (#6179) #6179 (Miloš Paunović)
- core: Property.of() with arbitrary objects #6177 (Loïc Mathieu)
- ui: prevent rollover on status (Ludovic DEHON)
- ui: dotted layout alt is not required (Ludovic DEHON)
- ui: remove "starred" translation (brian.mulier)
- ui: amend file preview encoding (#6186) #6186 (yuri)
- tests: typo in SLA assertion test (brian.mulier)
- core: add isInitialized() public boolean method to know if RunContext has everything injected #6185 (brian.mulier)
- ui: better layout for labels filters (Ludovic DEHON)
- inputs for apps and select with expressions (#6188) #6188 (Barthélémy Ledoux)
- ui: dashboard in progress status size (Ludovic DEHON)
- ui: input number range color (Ludovic DEHON)
- ui: button size on the trigger page (Ludovic DEHON)
- ui: pass flow id as parameter for dashboard (#6194) #6194 (Miloš Paunović)
- avoid errors when flow has no inputs (Bart Ledoux)
- remove-some-js-warnings (#6195) #6195 (Barthélémy Ledoux)
- ci: generate translation checkouts with sha instead of branch (MilosPaunovic)
- ui: properly parse date parameters from url and pass on the endpoints (#6200) #6200 (Miloš Paunović)
- ui: prevent unnecessary endpoint calls on custom dashboard (#6201) #6201 (Miloš Paunović)
- ui: allow save default dashboard upon creation even without change (brian.mulier)
- core: change default Pie chart display to DONUT (brian.mulier)
- jdbc: avoid NPE in daily stats by providing start & end dates fallbacks (brian.mulier)
- core: makes Subflow labels dynamic (again) #6204 (Loïc Mathieu)
- core: deserialize duration from a float string #6199 (Loïc Mathieu)
- ui: avoid blinking on button based on the execution status (Ludovic DEHON)
- ui: restore error handling (brian.mulier)
- core: subflow outputs (#6214) #6214 (Loïc Mathieu)
- attempt to fix formatting (Anna Geller)
- core: add plugin types for apps in returned plugin docs #6222 (Florian Hussonnois)
- *****: handle table pagination (brian.mulier)
- core: subflow output computation #6230 (Loïc Mathieu)
- ui: force run icon disabling #6244 (Loïc Mathieu)
- jdbc: executionCount only on start date #6244 (Loïc Mathieu)
- ui: better tooltip for custom dashboards (brian.mulier)
- ui: display durations properly in custom dashboards (brian.mulier)
- core: missing Precondition id didn't fail valdiation #6249 (Loïc Mathieu)
- CI: translations CI fixes (YannC)
- ui: show durations properly in custom dashboards legends + better responsiveness (brian.mulier)
- ui: wrong Y axis name for bar charts (brian.mulier)
- ui: better responsiveness & layouts for custom dashboards (brian.mulier)
- ui: breadcrumb on custom dashboards edit redirects to home (brian.mulier)
- ui: custom bar chart was not grouping things properly (brian.mulier)
- core: possible NPE when the Executor didn't have the flow (Loïc Mathieu)
Documentation
- clarify that KV pairs are not inherited kestra-io/docs#1745 (Anna Geller)
- add info about run context (Anna Geller)
- flow trigger example for preconditions incl. timezone offset info and fix SLA (Anna Geller)
- flow trigger example (Anna Geller)
- update basics.md (Anna Geller)
Code Refactoring
- *****: unify instanceof usage to pattern matching style #6073 (101)
- move toast to typescript + composition API (#6079) #6079 (Barthélémy Ledoux)
- replace BlueprintsLayout to reuse DottedLayout (#6095) #6095 (Barthélémy Ledoux)
- remove console log (Bart Ledoux)
Chores
- deps: bump rlespinasse/github-slug-action from 4 to 5 #5870 (dependabot[bot])
- deps: bump org.opensearch.client:opensearch-java #5871 (dependabot[bot])
- small refacto on the ShaBaseFilter #5885 (Loïc Mathieu)
- deps: bump opensearchRestVersion from 2.17.1 to 2.18.0 #5873 (dependabot[bot])
- deps: bump kafkaVersion from 3.8.1 to 3.9.0 #5872 (dependabot[bot])
- translations: auto generate values for languages other than english (GitHub Action)
- deps: regular dependency update (#5899) #5899 (Miloš Paunović)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: improve visual for no data component (#5900) #5900 (Piyush Bhaskar)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: align margins and padding throughout the product (#5887) #5887 (Shivang)
- ui: prevent prop type mismatch (#5908) #5908 (yuri)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: properly refresh gantt view after replaying the execution (#5829) #5829 (Manoj Balaraj)
- ui: make the tooltip positioning default (MilosPaunovic)
- ui: add new filter comparators and amend existing options to use them (#5923) #5923 (Miloš Paunović)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: improve description section of editing metadata drawer (#5858) #5858 (Saipavan Lingamallu)
- ui: showing tags on a single blueprint page (#5914) #5914 (Piyush Bhaskar)
- ui: render trigger flow warning as markdown in dialog (#5933) #5933 (Satvik Kushwaha)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: prevent duplicate values in filter recent items (#5941) #5941 (yuri)
- ui: make filter absolute date label in humanly readable format(#5944) #5944 (Ian Cheng)
- ui: amend filter placeholder color (#5950) #5950 (Aabhas Sao)
- ui: implement local sort functionality for namespace kv store listing (#5952) #5952 (tlrznf46)
- ui: introduce component for filter labels (#5947) #5947 (yuri)
- ui: show additional columns to better describe triggers (#5964) #5964 (Miloš Paunović)
- translations: auto generate values for languages other than english (GitHub Action)
- deps: bump codecov/codecov-action from 4 to 5 #5962 (dependabot[bot])
- deps: bump org.siouan.frontend-jdk21 from 9.0.0 to 9.1.0 #5961 (dependabot[bot])
- deps: bump flyingSaucerVersion from 9.10.2 to 9.11.0 #5959 (dependabot[bot])
- deps: bump net.thisptr:jackson-jq from 1.0.1 to 1.1.0 #5957 (dependabot[bot])
- deps: bump cross-spawn from 7.0.3 to 7.0.6 in /ui (#5976) #5976 (dependabot[bot])
- ui: amend link label in documentation (#5977) #5977 (techwithsatish)
- deps: bump io.micronaut.platform:micronaut-platform #5960 (dependabot[bot])
- deps: bump org.projectlombok:lombok from 1.18.34 to 1.18.36 #5958 (dependabot[bot])
- translations: auto generate values for languages other than english (GitHub Action)
- core: refactor LogRepositoryInterface to allow access with no permission check #5985 (Florian Hussonnois)
- core: add utility methods for exception #6014 (Florian Hussonnois)
- translations: auto generate values for languages other than english (GitHub Action)
- translations: auto generate values for languages other than english #5989 (GitHub Action)
- translations: auto generate values for languages other than english (GitHub Action)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: improve log to file display of the preview and download buttons (#6043) #6043 (Miloš Paunović)
- deps: regular dependency update (#6044) #6044 (Miloš Paunović)
- ui: remove obsolete define props import (#6074) #6074 (Miloš Paunović)
- ui: remove unneeded translations (Ludovic DEHON)
- core: FlowServiceTest.findByNamespacePrefix() is flaky #6111 (Loïc Mathieu)
- ui: trigger filter once the whole selection is there (#6141) #6141 (Miloš Paunović)
- ui: trigger search on removal of single filter (#6142) #6142 (Miloš Paunović)
- deps: dependency updates #6117 (Loïc Mathieu)
- ui: suppress some console warning (Ludovic DEHON)
- ui: trigger filter search on text values (#6193) #6193 (Miloš Paunović)
- translations: auto generate values for languages other than english (GitHub Action)
- ui: tweak the size of the chart legends (#6215) #6215 (Miloš Paunović)
- ui: add default first option for filters (#6216) #6216 (Miloš Paunović)
- ui: limit the width of filter dropdown (#6227) #6227 (Miloš Paunović)
- ui: properly add comparator values to selected filters from url query parameters (#6239) #6239 (Miloš Paunović)
- version: update to version 'v0.20.0'. (Florian Hussonnois)
Commits
- ee79911: Merge branch 'develop' of https://github.com/kestra-io/kestra into develop (Anna Geller)
- 29ef8af: #5518 skip updating own translation (#5868) (Mohammed Viqar Ahmed) #5868
- 1748ebb: fix curl url (#6036) (Barthélémy Ledoux) #6036
- 4431d1f: Add translations for context bar buttons (#6038) (Barthélémy Ledoux) #6038
- 550aa45: Revert "fix(core): serialize duration as strings" (Loïc Mathieu) #6080
- 8a072c1: add custom validation for required booleans (Bart Ledoux)
- e9f9118: remove duplicate rule (Bart Ledoux)
- 45be21f: Revert "#5518 skip updating own translation (#5868)" (Anna Geller)
- 621645c: Update generate_translations.yml (Anna Geller)
- b6bafba: Rename starred to bookmark (#6145) (ben8t) #6145
- 76815bb: Quick win, missing "s" in Bookmarks (#6152) (Anna Geller) #6152
- c5a4540: fix guided tour.Move the execute panel down a bit (#6164) (Barthélémy Ledoux) #6164
- 1342532: Revert "feat(core): remove the execution state from the scheduler (#1588)" (Loïc Mathieu) #6170
- 7302fe5: Rename the printContext() pebble function to fetchContext() (phuc) #6172
- f649215: Rename the printContext() pebble function to fetchContext() (phuc) #6172
Breaking Changes
Label keys starting with system.
are now reserved for internal usage in Kestra. Make sure that you don't use this prefix within your own custom labels. Read more about System Labels in the docs.
Conditions renamed
All conditions have been renamed without the Condition
at the end. Aliases are in place, so all flows will still work, but you will see an information note recommending you to upgrade to the new name. Already deprecated conditions haven't changed to avoid extra overhead on your end.
Examples of renamed conditions:
io.kestra.plugin.core.condition.ExecutionStatusCondition
→io.kestra.plugin.core.condition.ExecutionStatus
io.kestra.plugin.core.condition.ExecutionNamespaceCondition
→io.kestra.plugin.core.condition.ExecutionNamespace
io.kestra.plugin.core.condition.ExecutionLabelsCondition
→io.kestra.plugin.core.condition.ExecutionLabels
GCP plugin users
Pub/Sub messages were previously automatically base64
-encoded before being published, and base64
-decoded after consumption. This is no longer the case because Google Pub/Sub can handle binary and text data without the need for Base64 encoding.
For developers of custom plugins
The internal storage now takes a namespace
parameter on all its methods. This is mandatory to be passed by a plugin but can be safely set as null
in tests that directly use the internal storage. Plugins are normally not affected if they use the runContext().storage()
method that has been updated to automatically use the execution's namespace.
EE: retrieving KV pairs from other namespaces
The kv()
Pebble function was missing a check for allowed namespace in case a namespace is passed to the function e.g. {{ kv('MY_KEY', 'differentNamespace') }}
. This check has been added in 0.20 release. If you use the kv()
function to get a KV from a different namespace in the Enterprise Edition, make sure to allow access to this namespace (this happens by default unless explicitly restricted).
EE: Email server configuration moved to a different location
In Kestra < 0.20.0, email server configuration lived under kestra.mail-service
. Given that it's used only within the Enterprise Edition (for resetting passwords and sending invites), we moved it to kestra.ee.mail-service
.
EE: fallback on unhealthy workers
By default, a task configured to run on a worker group where no workers are available will wait for the worker to be available. The previous behavior was to fail.
This behavior is configurable. To keep the previous behavior, simply set the fallback
behavior to FAIL
as follows:
- id: hello
type: io.kestra.plugin.core.log.Log
message: Hello World!
workerGroup:
key: wg1
fallback: FAIL # possible values are WAIT (default), FAIL or CANCEL
If you want to set a custom workerGroup
key
and behavior
per plugin type and/or namespace, you can leverage pluginDefaults
.
EE: Usernames replaced by email addresses
Starting with Kestra 0.20, Kestra mandates the username to be an email address. If this is not the case within your instance, you can run the following CLI command to replace a username with the corresponding email for each user in the instance:
./kestra auths users email-replace-username
If the email address is not set for the user or is invalid, Kestra will log those usernames so you can address those edge cases manually. If the username is already set as email, the above command will additionally set that value within the email property.
EE: Elasticsearch indexer
Starting with 0.20, if you are using the Kafka backend, there is no need to start an external indexer, even for the Kafka backend, as the webserver will start an embedded indexer automatically.
However, if you still want to start one, it is still possible to do so, and you can disable the webserver-embedded indexer by starting it with --no-indexer
.
Starting an extra indexer should only be needed for very high throughput when you want the UI to be updated with very low latency about execution information. Most of the time, the webserver embedded indexer should be enough.
EE: for Kafka backend user
Due to a change in how we handle plugin defaults, the flow source needs to be available to the Kestra Executor. This change will sync the flow's source code with our queue allowing the executor to more efficiently apply pluginDefaults
defined in the flow YAML configuration.
For users with a Kafka backend, this migration can be performed by running the following CLI command:
./kestra sys-ee restore-queue --no-recreate --no-templates --no-triggers --no-namespaces --no-tenants
If you are using a Kestra version with the JDBC backend, this change doesn't apply to you, and you don't need to run the above command.