github kestra-io/kestra v0.23.0

latest releases: v0.24.4, v0.23.14, v0.22.27...
2 months ago

Changelog

📢 Breaking Changes Commits

#233

cli,core

  • 5bec2fa 🚨 change KESTRA_ env prefix by ENV_

core

docker

flows

  • aecf1db 🚨 evaluate flow trigger on PAUSED by default

plugins

  • 13d86c4 🚨 kill the Docker container on kill

scripts

  • 221236e 🚨 update pull policy to IF_NOT_PRESENT (#8169) - in accordance with new Docker Hub pull policy regulation, the default kestra pull policy will change from ALWAYS to IF_NOT_PRESENT, closes #8169

system

  • 56fa97b 🚨 remove the SQLServer runner
  • 2475942 🚨 Describe our internal metrics - *the following metrics has been removed:
  • executor.taskrun.next.count
  • executor.workertaskresult.count

The metric scheduler.execution.running.duration has been renamed to scheduler.execution.lock.duration*

ui

  • 9016257 🚨 prevent infinite loading loop in Namespace KV Store & Secrets pages if there is none

global

  • d6e470d 🚨 update pullPolicy default value to IF_NOT_PRESENT (#8170), closes #8170

🚀 Features


  • 1f8e5ad add new methods findAllAsync for the backup

build

core

core-ee

docs

execution

  • 70c1a86 allow to loop until an unlimited duration or iteration count, closes #9152
  • 30b39b2 add an execution kind

executions

flow

flows

iam

jdbc

  • e89e598 Improve JDBC queue poll duration selection
  • 2a26c41 avoid using the WorkerTaskResult queue when possible
  • 1e06b9f allow disabling queue cleaning.

jdbc-h2,jdbc-mysql,jdbc-postgres

  • 8462b17 add an index on queues.key

makefile

namespaces

plugin

  • 7e590dd add a way to provide additional type of plugins

plugins

  • 2aa5b1e add plugins InfluxDB, Jenkins, Ollama, GraphQL
  • 67c2ac8 add allowedResponseCodes on http tasks, closes #8973
  • 3c5975f add InfluxDB, GraphQL plugins
  • 3f9f60d add Go Script plugin
  • d27626f add Langchain4J plugins

storage

system

  • d7ca302 add server_type as global metrics tags
  • 15937a6 FlowRepository.findByNamespacePrefixWithSource()
  • 81d7588 add STARTS_WITH_NAMESPACE_PREFIX query filter for by namespace query
  • 6a465c1 monitor and close the Scheduler monitoring loop
  • 6039d10 add metrics for flowable tasks, closes #8341
  • 270b4d4 add metics for concurrency limit, closes #8341
  • ec21ef3 add a metrics for the Executor thread count, closes #8341
  • 88b8885 add metrics to the JDBC queue, closes #8340
  • 1b4efc5 restore the flow queue after tenant migration
  • 770a703 optimize MapUtils for merge
  • 593aad2 don't compute empty task outputs
  • a179f17 don't clone maps when not necessary
  • 0fd8461 use Property.ofValue(T) instead of Property.of(T)
  • 05d296d Property.ofValue & Property.ofExpression
  • 476f34e change the way we concurrently process executor queues
  • df70618 use the FlowMetaStore instead of the FlowRepository inside the Executor
  • 58fcd0a add TestSuite run and assertions
  • a117634 add metrics for Worker Job resubmission, closes #8341
  • e7b72a5 send task and trigger usage metrics
  • 1754f81 add NoopCache
  • 7117ae6 purge empty service instances, closes #8514
  • fe0a5d2 add metrics to the executor, closes #8341
  • a26fabe add uv to kestra docker image
  • 9beb86b add TestSuite model,taskFixture impl
  • eea47c6 add duration metrics for handle() method
  • e1c4ae2 add index to commonly queried fields in the WHERE conditions of the triggers table
  • 5131399 Allow to describe metrics (#1989), closes #1989

tenants

test

  • 7cc938c allow inline files fixtures and render fixture outputs

tests

  • faa77ae add execution url in test result
  • c8e6e5a add tests preview tab in left menu (#9191), closes #9191
  • 021357c validate the Flow exists when create or update Test
  • 2601df3 add a contextual Test badge on Execution topbar
  • 16ea41c add ERROR state and handling, closes #3804
  • d3228b2 add fixtures to results
  • 69037d0 improve empty page
  • fca529a rename testsuite to tests in UI,API

ui

  • b4e334c drag and convert tabs to panels (#9198), closes #9198
  • c1240d7 allow to close a tab with mouse middle click like in a navigator/ide (#9434), closes #9434
  • d7a4204 make trigger conditions in no-code a form (#8859), closes #8859
  • a213a90 treat the pluginsdefaults as a section (#8731), closes #8731
  • fdcea57 add version property to Frontend API call (#8650), closes #8650
  • 897abdd Add search in internal docs (#8458), closes #8458
  • 4729430 ability to hide secret value when typing in secrets
  • 959737f introduce patched version of monaco-yaml & yaml-language-server to have better autocompletion
  • ebcb0bd add plugin icons to auto-completions + make autocompletion work upon writing full package
  • 8a73edd improve styling of saved filter searches (#8040), closes #8040

variables

webserver

  • 2c766a5 move oneOf to anyOf in JsonSchemaGenerator to have better autocompletion

global

  • 9f2162c feat(): add Kestra plugin in the list
  • 59f2674 improved new custom dashboard (#9120), closes #9120
  • 28417f0 replace daily charts by customized charts (#9081), closes #9081
  • aae752f add a new method "taskWithState" that leverage on the property tasks (#8907), closes #5653 #8907
  • 2c53a21 Performance optimization for handle() method: Filter out executions with non-null next_execution_date in the query method, start a separate scheduled thread for scanning, reporting metrics and logging
  • 2c58e97 allow multiple nocode (#8532), closes #8532
  • fa5a391 synchronize task edition with editor (#8433), closes #8433
  • 433a332 use TaskTasks.vue to show subtask (#8332), closes #8332
  • c35352e Deprecated BOOLEAN input for new BOOL input with no undefined state (#8257), closes #8225 #8257
  • c14462f add afterExecution to basic.md (#8126), closes #8126
  • 61170e6 add example for HasRetryAttempt condition (#8133), closes #8133
  • 12eb836 feat(): add new crudeventtype "account_locked" (#8103), closes #8103

📘 Others

build

  • c25c60d remove add jmh-benchmarks gradle.properties to gitignore
  • d13a4e7 gradle runStandalone
  • 08f5ad2 add Postgres stat extension

ci

  • 4def8c5 Implement JReleaser for GitHub Release (#8231), closes #8231
  • 94811d4 align plugins handle for docker publish on EE CI
  • b716648 modify publish docker to align on EE
  • 675aa66 pass plugin version to docker workflow
  • 323527d lower build-artifacts workflow so github release can use it

cli,jdbc-postgres

  • 318f2b7 fix some compilation warnings

core

dashboards

deps

execution

flows

plugins

secrets

system

  • a0ee309 JdbcQueue code refactoring
  • b0f93e1 skip sleep in the JdbcQueue when at max poll size
  • 3639abb improve performance of IdUtils.fromParts()
  • 2d5d4b7 mask Caffeine metrics log
  • fcc1fcb rename FlowExecutorInterface to FlowMetaStoreInterface
  • ee444be prepare TestSuite ui
  • 8b5f333 add warn log when emit logQueue failed (#8432), closes #8432
  • 4ec2a5d don't emit two time a workertaskresult for RUNNING

test

  • 5574013 add module for jmh benchmarks

tests

  • ded5a93 add tests icon to tests list view

translations

triggers

  • b55032b remove column cron from triggers listing and sort out trigger details dialog (#9212), closes #8605 #9212
  • 61dcb85 swap the backfill button on triggers page with the one form flow triggers (#8624), closes #8606 #8624

ui

version

  • 691a775 update to version '0.23.0'
  • 2b578f0 update to version '0.23.0-rc5-SNAPSHOT'
  • 9e51b10 update to version '0.23.0-rc3-SNAPSHOT'
  • 4cddc70 update to version '0.23.0-rc2-SNAPSHOT'
  • 4a1cf98 bump to version '0.23.0-rc1-SNAPSHOT'
  • 8de568e update snapshot version 'v0.24.0-SNAPSHOT'.
  • 29eb0eb update to version 'v0.23.0-rc0-SNAPSHOT'.
  • a1db7b5 update @kestra-io/ui-libs to version 0.0.203 for finally block (#9246), closes #9246
  • 5205cf2 update the ui-libs version (#9184), closes #9184

webserver

global

🐛 Bug Fixes

assertions

build

  • bfc8556 fix deve-tool release-plugins script
  • 99a6d75 exclude jmh-benchmark module
  • 12affd4 amend Node Gradle to reflect changes (#7970), closes #7970
  • 451de81 fix gradle property for release

ci

  • 9504bba put back bump helm chart and remove if condition
  • 159c937 checkout actions from main branch
  • 55b9088 modify actions order
  • 601d1a0 Correctly pass all the secrets through all workflows
  • ccb871a fix workflow gradle-release
  • 059323a nocode translate (#8988), closes #8988
  • 3d1a3d0 use the right GitHub token for test report

cli

  • c2dc1c0 properly install all plugins depending on kestra distribution
  • a48fd02 fix NPE for commands not requiring plugins (#8212), closes #8212
  • bfdc48b prevent FlowUpdatesCommand to crash due to plugin loader
  • b314fc3 properly register plugins uninstall cmd
  • b8c55ba make worker args available through static KestraContext

container

  • c64f15a update tab container classes for better layout handling. (#8456), closes #8456

controls

  • b779aa1 adjust bottom position of contorls in multiPanelsEditor (#8465), closes #8465

core

  • de4ec49 yaml utils migration
  • d261de0 robots.txt was not served, closes #9015
  • 02cac65 filters was triggering endless refresh, closes #9508
  • a028a61 avoid infinite load upon route redirect (#9480), closes #9479 #9480
  • 023a77a properly map labels filters from query (#9480), closes #9324 #9480
  • bfee04b prevent incompatible timeRange & start/endDate filters + prevent multiple scope filters (#9480), closes #9240 #9480
  • ac37ae6 use Min annotation instead of Positive (#9432), closes #9380 #9432
  • 97992d9 handle properly dot in nested keys & commas in quoted filter values (#9410), closes #9410
  • cc72336 avoid adding invalid keys from query parameters to filter (#9383), closes #9364 #9383
  • 65503b7 add DefaultFilterLanguage as default in KestraFilter, closes #9365
  • 876b8cb avoid crashing in case of taskrun having too large value (#9359), closes #9312 #9359
  • 4dbeaf8 larger debounce for filter
  • f98e783 handle whitespaces in label key and value
  • 71dac0f smarter autocomplete order in editor
  • 3077d0a additional plugins are now properly shown in plugin docs (#9329), closes #9329
  • f069985 update background for plugin-doc in EE Apps and alert-info block styling in plugin doc. (#9323), closes #9323
  • cfa239a improve theme handling in Monaco editor (#9294), closes #9294
  • e163d91 rename NAMESPACE_PREFIX comparator to PREFIX
  • 1c1bc18 if task array has enum options, show select box instead of input (#9270), closes #9208 #9255 #9270
  • 282cd76 restore theme colors from Monaco editor
  • ea0c3b9 remove text filter for dashboards
  • 43ad5aa regex is not yet supported for text so we remove it for now
  • 83c6333 change naming from STARTS_WITH_NAMESPACE_PREFIX to NAMESPACE_PREFIX
  • 786be66 remove REGEX filter for text search
  • e237344 update save button disabled logic. (#9267), closes #9267
  • 7f67721 avoid adding incomplete key.{subKey} as text filter, closes #9243
  • fc7df18 prevent monaco suggestion widget to update its position (#9164), closes #9116 #9164
  • 76d068f same position in center for all modals (#9247), closes #9247
  • ac19b4a properly parse IN & NOT_IN values for Dashboards
  • 3511a8f skip empty values from filters in query
  • 30bf32a better relevance on filter syntax highlighting + IN working, closes #9214
  • 4d73138 restoreUrl is now scoped to route tab, closes #9235
  • fa96ca1 Valid correctly conditions in triggers (#9228), closes #9228
  • c0f66f6 amend positioning of the default tour elements (#9202), closes #9172 #9202
  • e3285b1 add red highlighter upon using wrong comparator for a key in filters, closes #9090 #9097
  • 87f4143 handle text filter properly for dashboards
  • c439d08 implement STARTS_WITH_NAMESPACE_PREFIX global filter using REGEX
  • f797f87 fixed eslint not to apply to tests
  • 3484074 handle no code inputs type change (#9166), closes #9101 #9166
  • 630e4fd repair audit logs type filter, closes #9091
  • c6bc44c better filter comparator detection
  • e29840d amend padding on the global error notification container (#9161), closes #9161
  • d8f8cb6 definition now expands from properties. (#9160), closes #9160
  • f93ecbf update regex to correctly render the alert for embedded docs. (#9151), closes #9151
  • 124fcbf switch filter colors on main theme change (#9140), closes #9119 #9140
  • 6e6d4e4 avoid sending date filters to flow list API call, closes #9132
  • 31a96fe properly filter Namespace executions
  • dd52bc1 text search without needing "text" key prefix, closes #9105
  • b2cfe1d properly remap q parameter to text in filter bar
  • 858f379 avoid sort, page & size from interfering with filter widget
  • 30adaca log level is not a multi-value filter, closes #9087
  • 961608f remove namespace & flowId keys on Flow -> Executions page filter
  • f585264 avoid red-coloured key in filters
  • 81a94ec bring back radio styles. (#9112), closes #9112
  • 6e0516f prevent cursor in code editor from jumping to top (#9095), closes #9013 #9095
  • 7047b60 amend keyboard save shortcut for both flow and namespace files (#9030), closes #9030
  • 9e84b12 support REGEX filtering
  • 7297221 add REGEX filtering on namespace field in JDBC
  • 37c001a avoid overriding sort, size and page from new filtering
  • a12a6cc filtering was not working with pagination, closes #9027
  • ba2179e avoid red-coloured filter keywords, closes #9024
  • 1a5b1f2 wrong childFilter naming
  • 9a759e2 avoid undefined due to scope filter addition, closes #9024
  • 997d71f scope is a single value filter
  • 79ee64a handle AND by spaces in filters (#9046), closes #9046
  • f380501 properly show custom dashboard card titles (#9035), closes #9035
  • 217fbcd update flow & namespace overview dashboard filters (#9034), closes #9033 #9034
  • cbc250b amend plugin page problems due to npe (#9031), closes #9031
  • c537914 use new color tokens for panes and editor. (#9020), closes #9020
  • c8f58f8 properly check if property is nullish (#9019), closes #9019
  • 81da94d avoid inserting empty tasks in flow (#9016), closes #9016
  • 3ad1327 full width for wrapper containing properties. (#9003), closes #9003
  • ee5c39c remove placeholder on input (#8984), closes #8984
  • eff58d9 few tweaks to align the placeholder and ui as per design. (#8980), closes #8980
  • 06635cd navigating back to plugins home. (#8972), closes #8972
  • 29c3bd7 tenant migration scripts now update keys, closes #3807 #8925
  • 246892a amend autocompletion in multi panel yaml flow editor (#8956), closes #8796 #8956
  • 2c94461 prevent multiple tabs for adding tasks to create duplicate entries (#8916), closes #8781 #8916 #8926
  • dc8095b filter the inputs with no id field to prevent breaking of panel (#8944), closes #8932 #8944
  • 769cc28 make sure that complex tasks are properly rendered for both inputs and sections (#8902), closes #8902
  • b5aaa6f cleanup LogService to always prefix with tenant
  • 1ee60c1 avoid multiple rendering in ForEachItem (#8906), closes #8905 #8906
  • 14d6ad5 filter deprecated properties from optional ones in no code editor (#8896), closes #8896
  • fb4b1c8 fix misc APIs with main tenants
  • e3c4f0e fix rooting to main tenant for configs endpoint
  • 0723565 center last step in tour and add Finish animation (#8862), closes #8862
  • 8e8bf8e tweak product tour flow listing (#8860), closes #8366 #8860
  • 9cdc3c5 make sure that complex tasks are properly rendered (#8848), closes #8119 #8848
  • c9a277d properly handle input creation/updating via no code editor (#8787), closes #8787
  • bc0f24f fixes change in theme aligned with selection in setttings. (#8815), closes #8815
  • f6b7dbd flaky test ExecutionServiceTest.replayEachSeq or replayEachSeq2
  • e7129b1 check for schema existence on no code input editing (#8775), closes #8775
  • c898da3 make no code breadcrumb clickable only in legacy mode (#8776), closes #8776
  • 6156af2 showing properties of any-of tasks (#8748), closes #8748
  • 5e4253e some logs can emits null message
  • 2792fa4 allow scalar-to-string concatenation in typed task property
  • e0af7e8 flaky test RunContextLoggerText.logs()
  • 722d94b introduce back the proper translation key (#8639), closes #8639
  • e47816c amend the problem with translation key (#3577) (#8638), closes #3577 #8638
  • a9f0cae Doc search is more relevant (#8601), closes #6329 #8601
  • bf41fb4 remove tutorial flows from anonymous report
  • 2943e10 safely access section and identifier query params (#8542), closes #8542
  • 10e882a change incorrectly used search parameter (#8534), closes #8534
  • 729cf56 failing DocumentationGeneratorTest.returnDoc()
  • 7957b9d fix indexer metric description (#8500), closes #8500
  • e73f15a bring back documentation on some plugins (#8354), closes #8265 #8354
  • 32b4a9e handle parsing error when reading flows from repository
  • 1aa37d5 duration defaults are rendered as duration string instead of timestamp, closes #3742
  • 840f010 fix NPE when generating flow graph
  • 6fee99a add additionalProperties=false to tasks to have a warning if there is unknown properties
  • 0b64da5 default namespace in namespace file
  • f43f8c2 be tolerant of decryption issue
  • 58ae507 mask secrets on log attributes, closes #3282
  • d14deac add a meaningful log for flow that can inject defaults
  • 0632052 use a stable flow logger name
  • 49b647e add missing docker plugin subgroup icon
  • 0a298ca allow dash in plugin version qualifier
  • d2d2635 namespace service now properly detects namespaces with flows inside
  • f14b638 compilation issue
  • 89c7620 avoid flow validation error on plugin alias duplicates
  • 5642a53 properly fix the issue with MapUtils.flattenToNestedMap
  • d5a2f44 HttpClient log the URL even if it's a secret, closes #8092
  • 0794b2b flatten map should not throw an exception
  • 0becaa0 charset should not be taken from, closes #8072

dashboard

dashboards

deps

  • 3d26205 fixed storybook router version to UI one

docs

editor

executions

  • 20c229a inclusive validation of start and end date
  • 2900607 properly guard against the npe error (#9147), closes #9147
  • 0523c04 by-query not working with new filters (#9058), closes #9058
  • 925169c avoid to stop following execution too early leading to UI display shifting from actual state (#8718), closes #8718
  • aae1315 amend storybook tests for inputs form (#8608), closes #8608
  • 475a961 fix execution failure due to UnsupportedOperationException (#8563), closes #8563
  • 3105ddc unqueing execution must remove the execution queued, closes #8448

executor

filters

flow

  • 4bd3a50 update flow revision restoration (#9311), closes #9311
  • 36900cb diff shows as per revision number (#9080), closes #9080
  • 1576051 re-enable NotEmpty constraint on property tasks for Sequential
  • 846e20a enhance error handling when injecting plugin defaults, closes #7894
  • b97347d handle parsing error when reading flows from repository, closes #7894

flows

flows,executions

  • 066a5f0 filtering QUERY NOT_EQUALS was not handled in jdbc

gradle

jdbc

kafka runner

logs

namespaces

naming

  • 2f8a590 name action file in the same way as name to avoid double display and confusion (#8634), closes #8634

nocode

plugins

revision

  • cb6a6bf restore side-by-side view in revision history after flow edit (#8439), closes #8439

sanitycheck

  • 1c9016b update flows id and namespace

secrets

server

  • 4b228c9 port changed during the redirection when no tenant id in uri (#8854), closes #8854

system

  • dace30d compilation issue
  • 1e0950f import flow should set the tenantId
  • bf18f67 don't set execution to queued twice
  • 6c7a8be use the correct config name for resonse cache
  • 3e21e69 wait for grace period before reemitting tasks for terminated_forced workers, closes #8334
  • 6630cf0 remove required props in definitions that have a default
  • 1a4bb04 rename flyway migrations
  • 84310e8 force a state after kill (#8937), closes #8936 #8937
  • caf701a remove main tenant from api/v1/configs
  • c942187 use a concurrent list to possibly fix the flaky test
  • eede188 handle storage version in storage interface factory
  • 75ff7d8 use the minPollInterval when the last poll is beyond all interval
  • e6e9803 avoid catching JVM fatal error on Worker
  • 5237bcc subflow validation can fail when typing
  • 2571f73 load OpenTelemetry lib in the app classloader
  • 8746f2b change default config values for liveness
  • d58898f restrict the JdbcConcurrencyLimitService to the JDBC runner

tasks

  • ee12c88 sleep example are a full one

test

  • 59a6c99 mockTaskRun should be public

tests

  • 84e4c62 test editor was showing previous shown plugin doc
  • 4041ebf add tenant id to log repository tests (#9100), closes #9100
  • f90e22a improve test robustness by avoiding spinning a new thread for receive timeout
  • e3fa5b7 assertions with numbers
  • 2b015f8 flaky test ExecutionServiceTest.deleteExecutionKeepLogs()

triggers

ui

ui-ee

  • e6b2f1f keep fetching if filtered kvs & secrets have no elements after fetch

webserver

  • 09943a1 set ids parameters as body instead of queryvalue (#8438), closes #8438
  • 955c6b7 handle out-of-bounds (>) namespaces fetch
  • 5e87655 first eval without masking secret function to error in case of missing secret, closes #8094

global

🏭 Tests

cli

  • 598582f add return code and YAML-output tests for ConfigPropertiesCommand (#8827), closes #8827

controller

core

plugins

server

storage

system

ui

  • 5cfb6aa ignore unhandled canceled promises in storybook (#8394), closes #8394
  • ab666bf failing test for autocompletiona after contributor's PR

global

🔄️ Changes

core

deps

  • 171272a revert monaco-yaml upgrade due to patch on previous version (#8797), closes #8797
  • 6642df4 revert monaco-yaml upgrade due to patch on previous version (#8791), closes #8791

flows

  • c8376da remove old FlowRepositoryInterface.find method not used anymore

namespaces

plugin

  • a14518b add dedicated service to parse tasks log line

system

ui

  • 59589b1 uniform the namespace components for oss and ee versions (#8256), closes #8256

global

🛠 Build

ci

  • 8656e85 fix setversion workflow not making tag push trigger main
  • 0101f53 require translations to be done (#9014), closes #9014

core

  • 63ec5ca update commit message and description for translation-related pull requests (#8358), closes #8358

deps

  • c7986ec bump org.testcontainers:testcontainers to 1.21.1
  • 9ff2df6 bump com.github.oshi:oshi-core from 6.8.1 to 6.8.2
  • f46234a bump org.postgresql:postgresql from 42.7.5 to 42.7.6
  • 97b23a2 bump org.testcontainers:junit-jupiter from 1.21.0 to 1.21.1
  • cbe3274 bump software.amazon.awssdk:bom from 2.31.45 to 2.31.50
  • 55fb234 bump me.champeau.jmh from 0.7.2 to 0.7.3
  • 6b00ab2 bump com.google.cloud:libraries-bom from 26.60.0 to 26.61.0
  • e4ec427 bump posthog-js from 1.245.0 to 1.245.1 in /ui (#8900), closes #8900
  • 174e3f8 bump org.sonarqube from 6.1.0.5360 to 6.2.0.5505
  • ba5890f bump io.micrometer:micrometer-core from 1.14.6 to 1.15.0
  • 1186a8d bump software.amazon.awssdk.crt:aws-crt
  • cc95c4a bump software.amazon.awssdk:bom from 2.31.40 to 2.31.45
  • 232194d bump com.github.docker-java:docker-java from 3.5.0 to 3.5.1
  • 625e783 bump com.google.cloud:libraries-bom from 26.59.0 to 26.60.0
  • c8c649c bump net.thisptr:jackson-jq from 1.2.0 to 1.3.0
  • 2c1ea4e bump software.amazon.awssdk:bom from 2.31.35 to 2.31.40
  • 5e08c7d bump software.amazon.awssdk.crt:aws-crt
  • 5759495 bump software.amazon.awssdk:bom from 2.31.30 to 2.31.35
  • 1bd8984 bump org.testcontainers:testcontainers
  • c565b3b bump org.jsoup:jsoup from 1.19.1 to 1.20.1
  • 5ce8763 bump org.jooq:jooq from 3.20.3 to 3.20.4
  • d52974d bump com.azure:azure-sdk-bom from 1.2.33 to 1.2.34
  • c9296b6 bump com.microsoft.playwright:playwright
  • 6f24e31 bump opensearchRestVersion from 2.19.1 to 2.19.2
  • 90180cc bump org.fusesource.jansi:jansi from 2.4.1 to 2.4.2
  • ce6770c bump jacksonVersion from 2.18.3 to 2.19.0
  • 04f32ab bump org.wiremock:wiremock-jetty12 from 3.12.1 to 3.13.0
  • d9ab998 bump software.amazon.awssdk:bom from 2.31.25 to 2.31.30
  • a06421d bump co.elastic.logging:logback-ecs-encoder
  • de6fcab bump org.opensearch.client:opensearch-java
  • b2f68a7 bump com.github.oshi:oshi-core from 6.8.0 to 6.8.1
  • 01cb30f bump software.amazon.awssdk:bom from 2.31.21 to 2.31.25
  • d2cda63 bump flyingSaucerVersion from 9.11.6 to 9.12.0
  • f89187d bump io.micronaut.platform:micronaut-platform
  • 8e4fe89 bump com.google.guava:guava from 33.4.7-jre to 33.4.8-jre
  • cfae13c bump io.micrometer:micrometer-core from 1.14.5 to 1.14.6
  • 6190f87 bump com.google.guava:guava from 33.4.6-jre to 33.4.7-jre
  • b98a0a7 bump commons-io:commons-io from 2.18.0 to 2.19.0
  • 3da2dc6 bump flyingSaucerVersion from 9.11.5 to 9.11.6
  • 6feb027 bump org.aspectj:aspectjweaver from 1.9.23 to 1.9.24
  • 83d6095 bump software.amazon.awssdk:bom from 2.31.16 to 2.31.21
  • 444e3d2 bump software.amazon.awssdk.crt:aws-crt
  • ae7bb88 bump com.google.guava:guava from 33.4.0-jre to 33.4.6-jre
  • 73e3fd0 bump software.amazon.awssdk:bom from 2.31.11 to 2.31.16
  • 0665b52 bump org.owasp.dependencycheck from 12.1.0 to 12.1.1
  • 781f9dc bump com.google.cloud:libraries-bom from 26.58.0 to 26.59.0
  • 92e4570 bump org.jooq:jooq from 3.20.2 to 3.20.3
  • f717063 bump org.sonarqube from 6.0.1.5171 to 6.1.0.5360
  • 881b009 bump flyingSaucerVersion from 9.11.4 to 9.11.5
  • ab81871 bump software.amazon.awssdk:bom from 2.31.6 to 2.31.11
  • addd76f bump com.azure:azure-sdk-bom from 1.2.32 to 1.2.33
  • 6be939c bump software.amazon.awssdk.crt:aws-crt
  • 4ea876d bump com.google.cloud:libraries-bom from 26.57.0 to 26.58.0

deps-dev

tests

  • 0f7360a replace workspaces with proper storybook config + working aliases

global

  • 3865f90 moved helm update trigger on EE side
  • b5cc011 influxdb and graphql not available yet
  • 86f0b23 update release-plugin script to set kestra version for plugins
  • 2c411a2 use storybook test addon to get coverage (#8316), closes #8316
  • c08213b remove some odd arguments to frontend checkout
  • 3df9d49 fix setversion-tag and devtools

📝 Documentation

core

core-pause

  • 1ff2e03 update pauseDuration properties, titles, descriptions (#8495), closes #8495

dashboard

docker

  • ffdebf3 update title and description of docker kill grace period property (#8733), closes #8733

flow-trigger

  • 10ce92c add note about no Pebble in conditions

http

  • 5293176 update SSL options property with note
  • 9b72ce5 add mention to check for plugins before using HTTP

global


  • d7fc689 fix storybook tests
  • 5064687 fix(core)*: make sure tour always opens with code & topology tabs visible (#9513), closes #9513
  • 9aa605e Feat/rework compatibility layer (#9490), closes #4062 #9490
  • bc81e01 fix(core)*: properly display chart colors for logs (#9429), closes #9429
  • 316d897 core: add storybook on executions filters (#9354), closes #9354
  • f544bc9 fix(system)*: don't include yourself as def in the JSONSchema
  • 979b271 fix(system)*: correctly resolve additional plugin subtypes so autocompletion work
  • cd9fdcd system: make restartForEachItem test more deterministic
  • 8846da5 fixed spacing in demo apps page (#9021), closes #9021
  • ea40226 Replace the default dashboard with custom dashboard (#8769), closes #3739 #8769
  • ca652a1 fix(plugins)*: ForEach executes task in the wrong order when no concurrency limit, closes #8904
  • a73c45a change label color to white (#8850), closes #8850
  • 05e3483 fix: change namespace hover to white (#8842), closes #8842
  • a856654 Update core/src/main/java/io/kestra/core/schedulers/AbstractScheduler.java
  • a8e826a fix(system)*: reset the trigger into the KafkaScheduler instead of the ExecutorMain
  • 79242f9 executions: remove flakiness on some tests around sleep
  • 2bfdca3 Translations from en.json (#8734), closes #8734
  • 5c060b5 fix(plugins)*: don't cache the condition property inside the If task, closes #8697
  • f980a68 fix(namespaces)*: send proper parameter for namespace on file creation/update (#8706), closes #8706
  • 02723aa fix(dashboards)*: SQL errors on logs data chart, closes #8128
  • 4e60202 feat(system)*: decrease defaut JDBC queue poll size
  • c5b7c5d chore(triggers)*: properly handle switches for triggers disabled from within flow source (#8106), closes #5736 #8011 #8106
  • b1a48c1 Add examples with expression and trimmed values (#6154), closes #6154
  • 728a6a3 basic.md: add link to configuration for kestra property variables (#8490), closes #8490
  • d14ff78 fix(execution)*: decode and hide nested inputs of type SECRET, closes #7964
  • 1506d68 system: bump sleep-short sleep time to 10s
  • bf4310e system: try with different task id
  • b4106af system: debug flaky error of shouldPauseExecutionByQueryRunningFlows
  • 1974fd1 system: debug flaky error of shouldPauseExecutionByQueryRunningFlows
  • ce3eea7 webserver: fix flaky test which could query previous tests tasks
  • 724058a Feat/storage outputs (#8361), closes #8361
  • d454d13 system: isolate SchedulerScheduleTest tests with tenantId
  • 8b6af7a chore(core)*: make sure that notifications with large message text are closeable (#8431), closes #8352 #8431
  • c069b2f chore(core)*: deboucing task validation from no code editor (#8418), closes #7073 #8418
  • 954d64e fix(core)*: allow horizontal scrolling of tabs in multi panel view (#8414), closes #8270 #8414
  • f61ba36 feat(core)*: allow moving of entire panels (#8377), closes #8272 #8377
  • b75730a chore(dashboards)*: amend hover color of table top buttons on dashboard (#8388), closes #8376 #8388
  • ceac4d3 feat(core)*: implement redirection to flow creation page on skipping tutorial (#8333), closes #8326 #8333
  • 752405a fix(flows)*: amend text color problem in no code editor on firefox (#8367), closes #8327 #8367
  • 860c1b2 feat(core)*: allow closing all tabs at once in a single panel (#8360), closes #8273 #8360
  • f871fa8 chore(translations)*: localize to languages other than english (#8353), closes #8353
  • c202875 feat(core)*: introduce a dropdown menu for each panel (#8351), closes #8272 #8273 #8351
  • 92c082e chore(flows)*: hide horizontal scroll on editor based inputs (#8347), closes #8347
  • e6937c4 feat(core)*: close code tab if file is deleted (#8331), closes #8271 #8331
  • ab2fea6 Core: task example indentation error
  • fd46673 Devcontainer: link instructions to contributing guide
  • 938b3cc fix storybook multipanel test
  • 5285bea feat(Unit Tests) #8171 convert hamcrest to assertj (#8276), closes #8171 #8276
  • 69193c6 Revert "fix(core): add additionalProperties=false to tasks to have a warning if there is unknown properties"
  • fce7ec1 core: flaky allow failure for each item test (#8228), closes #8228
  • 774a4ef Feat(): ci changes (#8217), closes #4964 #8136 #8217
  • 71110cc Revert "fix(core): HttpClient log the URL even if it's a secret"
  • 259b5b5 Revert "fix(core): require condition in Flow trigger (#7494)", closes #7494

Contributors

We'd like to thank the following people for their contributions:
AJ Emerich, AbdurRahman2004, Anna Geller, Bala Aparna, Bart Ledoux, Barthélémy Ledoux, Daniel Rivas, Dhinakaran T, Dhivya G, Florian Hussonnois, Frank Tianyu Zeng, François Delbrayelle, GitHub, GitHub Action, Hashim Khalifa, Karuna Tata, Kelvin Yim, Loïc Mathieu, Ludovic DEHON, Malaydewangan09, Mathieu Gabelle, MilosPaunovic, Miloš Paunović, Nicolas K., Piyush Bhaskar, Roman Acevedo, Satvik Kushwaha, Sayed Murtadha Ahmed, Shruti Mantri, Tanvir Ahmed, Will Russell, YannC, YannC., ben8t, brian-mulier-p, brian.mulier, dhinakaranst, gluttonweb, lwyang, nKwiatkowski, rajatsingh23, weibo1, yuri, 杨利伟

Breaking Changes

All editions: LoopUntil task changed default values for checkFrequency

The default behavior of the LoopUntil core task has changed as follows:

{ "maxIterations": null, "maxDuration": null, "interval": "PT1M" }

Previously, LoopUntil capped executions at 100 iterations and 1 hour duration (maxIterations: 100, maxDuration: PT1H, interval: PT1S). This was intended to prevent runaway loops from impacting instance stability, especially with frequent (1s) intervals.

What’s changed:

  • The default configuration no longer enforces arbitrary limits on iterations and duration.
  • The new default uses a 1-minute interval (PT1M), which greatly reduces the risk of instance performance issues, even with no iteration or duration limits.

Backward compatibility: If you want to retain the previous default limits to prevent potentially long-running loops, add the following to your global plugin defaults:

pluginDefaults:
  - forced: true
    type: io.kestra.plugin.core.flow.LoopUntil
    values:
      checkFrequency:
        maxIterations: 100
        maxDuration: PT1H
        interval: PT1S

Adding that plugin default restores the earlier behavior and prevents any breaking change for your existing flows.


All editions: Tenant is now required; defaultTenant (null tenant) is no longer supported

Kestra now requires a tenant context in both OSS and Enterprise versions. The previous defaultTenant (null tenant) is no longer supported.

OSS:

  • A fixed tenant named main is always used.
  • All API URIs now include the tenant: /api/v1/.../api/v1/main/....
  • There is a temporary routing layer to map legacy endpoints, but this will be removed in a future release.

Enterprise:

  • Tenants must be created and configured explicitly.
  • kestra.ee.tenants.enabled and kestra.ee.tenants.defaultTenant configuration properties have been removed.
  • Set kestra.ee.tenants.fallbackTenant in your configuration to route non-tenant API calls (API endpoints won't be rerouted, but we inject the fallback tenant ID into the request header)

Migration:
A Migration guide and scripts are provided to update your database and storage paths to the new tenant model.

Who needs to migrate?
All OSS users will need to run the migration. Additionally, the migration command is required for all EE customers who used to have the defaultTenant enabled:

kestra:
   tenants:
      defaultTenant: true

And those who didn't have tenants enabled:

kestra:
   tenants:
      defaultTenant: false
      enabled: false

Again, the above configuration properties are removed in 0.23, so you no longer have to worry about them, provided that you run the migration command described below after upgrading to 0.23.

  • Migration command (OSS):

    kestra migrate default-tenant [--dry-run]
    
  • Migration command (Enterprise & Cloud):

    kestra migrate default-tenant --tenant-id=your_tenant_id --tenant-name="Your Tenant Name" [--dry-run]
    
  • For internal storage migration steps, refer to the full Migration Guide documentation.


All editions: Internal storage path change to fix double slash (S3/GCS)

For users of S3 or GCS as internal storage, Kestra now removes the leading root slash in all storage paths. Storage keys now have a single slash separator, not a double slash. This helps display internal storage objects in various cloud storage interfaces.

  • Before 0.23: gs://bucket//company/team/_files/test.txt
  • After 0.23: gs://bucket/company/team/_files/test.txt

Required Action:
Run the migration scripts for your storage provider to update object paths. If not done, Kestra will not be able to access files with the old path structure.

Example (GCS):

#!/bin/bash

BUCKET="gs://mybucket"

echo "Starting GCS root slash cleanup on bucket $BUCKET"

# List all objects starting with /
gsutil ls "$BUCKET/**" | grep "$BUCKET//" | while read -r full_path; do
    # Extract just the key (remove bucket prefix)
    key="${full_path#${BUCKET}/}"

    # Skip folder markers (if any)
    if [[ "$key" == */ ]]; then
        echo "Skipping folder marker: $key"
        continue
    fi

    # Remove leading slash
    clean_key="${key#/}"

    echo "Copying $BUCKET/$key$BUCKET/$clean_key"

    # Copy to clean location
    gsutil cp "$BUCKET/$key" "$BUCKET/$clean_key"
done

echo "Cleanup finished!"

Example (S3):

#!/bin/bash

BUCKET="mybucket"

aws s3 ls s3://$BUCKET --recursive | awk '{print $4}' | grep '^/' | grep -v '/$' | while read -r key; do
    # Strip the leading slash
    clean_key="${key#/}"

    echo "Copying s3://$BUCKET/$key → s3://$BUCKET/$clean_key"

    # Copy to new key without leading slash
    aws s3 cp "s3://$BUCKET/$key" "s3://$BUCKET/$clean_key"

    # Optional: Delete original after copy succeeds
    # aws s3 rm "s3://$BUCKET/$key"
done

echo "Migration finished!"

See the full migration guide for local, MinIO, Azure, and other storage types, which also must be migrated due to the multitenancy requirement (see the section above).


All editions: The BOOLEAN-type input is deprecated in favor of BOOL

The Java-style BOOLEAN input, which used 3 options (true, false, or not defined), caused too much confusion and bugs, so it's now deprecated in favor of BOOL input, which is a toggle (can only be true or false). Read more: #8225.


All editions: Default environment variable prefix changed from KESTRA_ to ENV_ for security

Kestra previously defaulted to autoloading environment variables with the prefix KESTRA_ into flows. This posed a security risk, as Micronaut allows overriding configuration using environment variables and translates non-alphanumeric characters (such as : in kestra:storage:type) into underscores, producing env vars like KESTRA_STORAGE_TYPE. If a sensitive value (e.g., a storage password) was provided via an environment variable starting with KESTRA_, it would be available in all flows, increasing the risk of secret exposure.

Change:

  • The default prefix for autoloaded environment variables is now ENV_ (instead of KESTRA_).
  • Any variable you want to expose in flows must now start with ENV_ by default (unless you configure a custom prefix).
  • The KESTRA_CONFIGURATION env var still uses KESTRA_ as the configuration key (unchanged).

How to use:
In your Docker Compose or environment configuration, set environment variables using the ENV_ prefix rather than the KESTRA_ prefix:

kestra:
  image: kestra/kestra:latest
  environment:
    ENV_MY_VARIABLE: extra variable value
    ENV_NEW_VARIABLE: new variable value
    KESTRA_CONFIGURATION:
      kestra:
        variables:
          env-vars-prefix: "ENV_" # this is now the default as of v0.23

You can reference these in your flows as {{ envs.MY_VARIABLE }} and {{ envs.NEW_VARIABLE }}.

To use a custom prefix e.g. PROD_:

kestra:
  image: kestra/kestra:latest
  environment:
    PROD_MY_VARIABLE: extra variable value
    KESTRA_CONFIGURATION:
      kestra:
        variables:
          env-vars-prefix: "PROD_"

Then use {{ envs.MY_VARIABLE }} in flows.

Action required:

  • Review and update any existing environment variables that used the KESTRA_ prefix for flow variables and make sure that you now use ENV_ or your custom prefix.
  • No changes are needed for configuration properties that use KESTRA_CONFIGURATION.

For more details, check the Environment Variables Prefix documentation.


All editions: The default pullPolicy for Docker-based tasks changed

Due to the new Docker Hub pull usage and limits, all the Docker-based Kestra tasks will have their default pullPolicy updated from ALWAYS to IF_NOT_PRESENT to avoid any pull limit issue (PR kestra-io/plugin-scripts#230).


All editions: Flow trigger now also reacts to PAUSED state by default

Next to the terminated states, the Flow trigger now also reacts to the PAUSED state to make it easier to respond to paused workflow, e.g. to send alerts to the right stakeholders to manually approve and resume paused workflow executions.

Using the following flow with a Flow trigger as example:

id: react_to_states
namespace: company
tasks:
  - id: hello
     ...
triggers:
  - id: mytrigger
    type: io.kestra.plugin.core.trigger.Flow
    preconditions:
      id: flow
      flows:
        - namespace: company
  • Before 0.23, this flow would be triggered for each terminated execution in the company namespace.
  • From 0.23 on, this flow will be triggered for each terminated and PAUSED execution in the company namespace.

All editions: Python script tasks now use official python:3-13-slim image

To make it easier to get started, we used a custom ghcr.io/kestra-io/kestrapy:latest image in the past to contain kestra and amazon-ion pip packages. The script tasks now use the official python:3-13-slim image by default. If you want to maintain the previous behavior, simply add those using the new dependencies property and they will be installed at runtime (and cached):

id: python_demo
namespace: company.team

tasks:
  - id: python
    type: io.kestra.plugin.scripts.python.Script
    dependencies:
      - kestra
      - amazon-ion
      - requests
    script: |
      from kestra import Kestra
      import requests

      response = requests.get('https://kestra.io')
      print(response.status_code)

      Kestra.outputs({'status': response.status_code, 'text': response.text})

All editions: No more WARNING state on script tasks when ERROR logs are present

We no longer set the task-run state to Warning if the script task emits some ERROR or WARNING logs and the warningOnStdErr property is deprecated. Script tasks will now always report SUCCESS state if the Docker container exits with code 0, and FAILED state for any non-zero exit code — ERROR or WARNING logs no longer influence the task run state.

Example flow:

id: loguru
namespace: company.team

inputs:
  - id: nr_logs
    type: INT
    defaults: 100

tasks:
  - id: reproducer
    type: io.kestra.plugin.scripts.python.Script
    taskRunner:
      type: io.kestra.plugin.scripts.runner.docker.Docker
    containerImage: ghcr.io/kestra-io/pydata:latest
    script: |
      from loguru import logger
      from faker import Faker
      import time
      import sys

      logger.remove()
      logger.add(sys.stdout, level="DEBUG")
      logger.add(sys.stderr, level="DEBUG")

      def generate_logs(fake, num_logs):
          logger.error("Starting to generate log messages")
          for _ in range(num_logs):
              log_message = fake.sentence()
              logger.warning(log_message)
              time.sleep(0.01)
          logger.warning("Finished generating log messages")

      if __name__ == "__main__":
          faker_ = Faker()
          generate_logs(faker_, int("{{ inputs.nr_logs }}"))

Before this change, the flow would end in WARNING; now it ends in SUCCESS.


All editions: autocommit property removed from JDBC Query and Queries tasks

The autocommit property has been removed from both the Query and Queries tasks in the JDBC plugin.

Reason for change:

  • The Query task executes a single statement and does not support multi-step transactions; autocommit is not relevant.
  • The Queries task processes all contained queries within a single transaction by default; autocommit has no effect.

Impact:

  • The autocommit property is no longer configurable in either task.
  • You must remove any usage of the autocommit property in your existing flows, as using it will raise an error.

EE and Cloud: manual user refresh is required to migrate Superadmin property

The handling of Superadmin users in Kestra Cloud and Enterprise Edition has changed. Previously, the Superadmin status was determined by the user type (SUPER_ADMIN). In version 0.23, this is now managed through a dedicated property (isSuperAdmin). This change enables new use cases such as assigning a Superadmin permission to a Service Account as well as sending an invite with Superadmin permissions, but it also impacts user role detection for existing users.

Required action:
All EE customers must run the following CLI command after upgrading to 0.23:

kestra auths users refresh

This command migrates and refreshes user data to correctly assign Superadmin status under the new property-based model.

Impact:

  • Existing Enterprise and Cloud users with the type SUPER_ADMIN will not automatically have the new isSuperAdmin property set unless you run the migration command after upgrading to 0.23.
  • This may result in users unexpectedly losing Superadmin privileges. If you see this happening, run kestra auths users refresh from the CLI.

EE: SQL Server backend is no longer supported

We dropped support for the SQL Server backend.


{tenant} removed from Superadmin tenant management API routes (EE only)

The {tenant} parameter has been removed from several API routes related to tenant management in Enterprise Edition. This change affects only EE users who interact with these endpoints programmatically (i.e., via direct API calls).

Reason for change:

  • These routes are relevant only to Superadmin users, who can see and manage all tenants.
  • The {tenant} path parameter was unnecessary and led to confusion, as all access control is based on the authenticated user's privileges (i.e. their tenant access), not the path.
  • The endpoints now reflect the actual access model: actions depend on the Superadmin context, not on a specified {tenant} in the path.

Changed endpoints:

  • /api/v1/{tenant}/clusters/api/v1/clusters
  • /api/v1/{tenant}/tenants/api/v1/tenants
  • /api/v1/{tenant}/tenants/bindings//api/v1/tenants/bindings/
  • /api/v1/{tenant}/tenants/{resourceTenant}/group/api/v1/tenants/{resourceTenant}/group
  • /api/v1/{tenant}/tenants/{resourceTenant}/invitations/api/v1/tenants/{resourceTenant}/invitations
  • /api/v1/{tenant}/tenants/{resourceTenant}/namespaces/api/v1/tenants/{resourceTenant}/namespaces
  • /api/v1/{tenant}/tenants/{resourceTenant}/roles/api/v1/tenants/{resourceTenant}/roles
  • /api/v1/{tenant}/tenants/{resourceTenant}/users//api/v1/tenants/{resourceTenant}/users/

Impact:

  • If you are using these endpoints programmatically, update your API clients to remove the {tenant} path segment.
  • Access remains limited to Superadmin users only.

Don't miss a new kestra release

NewReleases is sending notifications on new releases.