Compare commits

...

1590 Commits

Author SHA1 Message Date
github-actions[bot]
c0ac4bb928 chore(version): update to version '0.22.38' 2025-12-19 10:46:22 +00:00
nKwiatkowski
4e5daf2ace fix: unit test 2025-12-19 11:43:50 +01:00
github-actions[bot]
1eeeb0c8ad chore(version): update to version '0.22.38' 2025-12-19 09:25:30 +00:00
Nicolas K.
4430d0b078 feat(CLI): add a new update from flow source CLI (#13760)
* feat(CLI): add a new update from flow source CLI

* feat(CLI): use the repository instead of the webserver

* feat(CLI): change command name to SyncFromSource

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-12-19 10:23:12 +01:00
github-actions[bot]
0ae24aa814 chore(version): update to version '0.22.37' 2025-12-09 09:59:04 +00:00
Roman Acevedo
655d99104c ci: add missing GH_PERSONAL_TOKEN in main-build.yml 2025-12-09 10:53:38 +01:00
Roman Acevedo
1b7663cb13 ci: add GH_PERSONAL_TOKEN in release-docker.yml CI for helm chart 2025-12-09 10:16:09 +01:00
brian.mulier
b3a94ce01f fix(core): deprecate Await util (#13369)
This reverts commit 9fa94deba9.
2025-12-04 11:18:37 +01:00
brian.mulier
83abff314c fix(executions): avoid Executor being stuck / slow startup due to flow init 2025-12-01 19:13:44 +01:00
brian.mulier
2bde949189 fix(tests): use another db name on webserver to avoid colliding with repositories 2025-12-01 18:22:01 +01:00
brian.mulier
0f3d5f5c64 refacto(core): rename Await.until(sleep) and (timeout) to avoid confusions 2025-12-01 18:17:57 +01:00
github-actions[bot]
98df16ae9a chore(version): update to version '0.22.36' 2025-11-18 13:08:46 +00:00
github-actions[bot]
a3fee164b9 chore(version): update to version '0.22.35' 2025-11-10 14:29:20 +00:00
github-actions[bot]
dc34a8e5d7 chore(version): update to version '0.22.34' 2025-11-03 10:44:48 +00:00
Roman Acevedo
9c2550f224 ci: add dry run and default plugin-version for release docker 2025-10-31 20:24:09 +01:00
Roman Acevedo
8506549ef3 ci: add skip test param to pre-release.yml 2025-10-28 18:00:01 +01:00
github-actions[bot]
6677f20ccd chore(version): update to version '0.22.33' 2025-10-14 12:31:46 +00:00
brian-mulier-p
63f30f11ef fix(flows): pebble autocompletion performance optimization (#11981)
closes #11881
2025-10-14 11:41:42 +02:00
nKwiatkowski
70ef82faba feat(tests): add flaky tests handling 2025-10-13 17:11:29 +02:00
github-actions[bot]
5358400c2f chore(version): update to version '0.22.32' 2025-10-07 13:13:02 +00:00
Loïc Mathieu
0e81417ccc Revert "fix(executions): evaluate multiple conditions in a separate queue"
This reverts commit e8cc0fe2e5.
2025-10-07 10:15:06 +02:00
Roman Acevedo
826d245fad ci: migrate CI to kestra-io/actions #11770
* ci: migrate CI to kestra-io/actions

- advance on https://github.com/kestra-io/kestra-ee/issues/5363

* ci: change Dockerfile.pr to dynamic version

# Conflicts:
#	Dockerfile.pr
2025-10-07 10:05:16 +02:00
Loïc Mathieu
46eac4021c fix(system): compilation issue 2025-10-06 14:41:39 +02:00
Loïc Mathieu
80c1edf3a8 fix(executions): purge executions by 100 by default
As 500 may be too much if executions are huge as the batch will be loaded in memory.
2025-10-03 16:59:45 +02:00
Loïc Mathieu
23ca0aacb8 feat(executions): improve performance of PurgeExecutions by batch deleting executions, logs and metrics
Closes #11680
2025-10-03 16:11:39 +02:00
Loïc Mathieu
076de1f322 fix(system): compilation issue 2025-10-03 11:04:19 +02:00
Loïc Mathieu
e8cc0fe2e5 fix(executions): evaluate multiple conditions in a separate queue
By evaluating multiple condition in a separate queue, we serialize their evaluation which avoir races when we compute the outputs for flow triggers.
This is because evaluation is a multi step process: first you get the existing condtion, then you evaluate, then you store the result. As this is not guarded by a lock you must not do it concurrently.

The race can still occurs if muiltiple executors run but this is less probable. A re-implementation would be needed probably in 2.0 for that.

Fixes https://github.com/kestra-io/kestra-ee/issues/4602
2025-10-03 11:00:14 +02:00
brian-mulier-p
9bae7add11 fix(core): avoid crashing UI in case of multiline function autocomplete (#11684) 2025-10-03 09:39:25 +02:00
Loïc Mathieu
ba94a77733 fix(system): compilation issue 2025-10-01 12:29:40 +02:00
Loïc Mathieu
e06e4f44e2 chore(system): move the SkipExecution service to the services package
It was there before so it will be easier to backport the change if it moves there.
2025-10-01 11:29:14 +02:00
Loïc Mathieu
84dc365c32 feat(system): allow to skip an indexer record
Part-of: https://github.com/kestra-io/kestra-ee/issues/5263
2025-10-01 11:29:14 +02:00
github-actions[bot]
614fc7d38f chore(version): update to version '0.22.31' 2025-09-30 08:28:07 +00:00
github-actions[bot]
8bca799319 chore(version): update to version '0.22.30' 2025-09-23 12:40:26 +00:00
nKwiatkowski
a450274745 chore(version): update to version '0.22.29' 2025-09-23 14:39:57 +02:00
Roman Acevedo
a244de3a21 ci: fix storybook ci (#11463)
* ci: fix storybook ci

* add missing e2e file

* fix
2025-09-23 13:46:33 +02:00
github-actions[bot]
02b0c3b69f chore(version): update to version '0.22.30' 2025-09-23 09:42:47 +00:00
brian.mulier
86f34b1421 fix(ci): same CI as develop 2025-09-22 18:33:22 +02:00
brian.mulier
10077ceab7 fix(system): avoid trigger locking after scheduler restart
closes #11434
2025-09-22 18:33:22 +02:00
brian-mulier-p
0a560e436e fix(tests): enforce closing consumers after each tests (#11399) 2025-09-19 16:29:45 +02:00
brian-mulier-p
3d8013207b fix(core): avoid ClassCastException when doing secret decryption (#11393)
closes kestra-io/kestra-ee#5191
2025-09-19 13:51:31 +02:00
brian.mulier
ddae03986c fix(audit-logs): restore author filter
closes kestra-io/kestra-ee#5123
2025-09-17 20:45:12 +02:00
github-actions[bot]
9e855fe3d1 chore(version): update to version '0.22.29' 2025-09-16 11:51:02 +02:00
Florian Hussonnois
7e36fb0a72 feat(plugins) allow disabling version support for specific tasks
Changes:
* Add param 'type' PluginRegistry isVersioningSupported method
* Remove regex validation on 'version' property

Related-to: kestra-io/kestra-ee#5090
2025-09-16 11:51:02 +02:00
Roman Acevedo
0c65941c92 ci: run pull request CI also for PRs on releases/* 2025-09-11 14:11:15 +02:00
Roman Acevedo
006d766ddb fix(executions): bulk actions by query did not respect filters
- fixes https://github.com/kestra-io/kestra-ee/issues/5037

the code was backported from releases/0.23.x, because the major filter reworks was done for 0.23
2025-09-11 14:11:15 +02:00
Loïc Mathieu
f5c9ca1789 chore(version): upgrade to 0.22.28 2025-09-09 10:03:28 +02:00
github-actions[bot]
a40b81e665 chore(version): update to version '0.22.27' 2025-09-02 12:22:15 +00:00
Roman Acevedo
a39635ffaf ci: fix setversion-tag.yml not triggering a main.yml job on a pushed tag
the missing token: ${{ secrets.GH_PERSONAL_TOKEN }} is the only difference between this CI and EE CI, so it is probably the right fix

# Conflicts:
#	.github/workflows/setversion-tag.yml
2025-09-02 10:42:17 +02:00
github-actions[bot]
ead6664cdb chore(version): update to version '0.22.26' 2025-08-27 08:56:42 +00:00
Piyush Bhaskar
9aedb86ae0 fix(core): selecting label only shows execution of current flow. (#10914) 2025-08-27 12:13:32 +05:30
github-actions[bot]
5037620ea5 chore(version): update to version '0.22.25' 2025-08-26 11:16:16 +00:00
brian.mulier
9328c11ec1 fix(logs): add SLF4J to RunContextLogger 2025-08-26 12:58:23 +02:00
brian.mulier
2d617973b0 fix(logs): emitAsync is now keeping messages order 2025-08-25 16:36:47 +02:00
brian.mulier
750ec615df fix(logs): higher max message length to keep stacktraces in a single log 2025-08-25 16:33:55 +02:00
brian.mulier
951765635d chore(deps): bump Micronaut platform to 4.9.2
closes #10626
closes #10788
2025-08-25 16:33:54 +02:00
YannC
7f9abfeddf chore(deps): upgrade micronaut-platform to 4.8.0 (#8232)
* chore(deps): upgrade micronaut-platform to 4.8.0

* fix: http client version enforcement is not needed anymore as docker-java as updated the dependency

* fix: make applicationContext protected in SchedulerPollingTriggerTest

* fix: upgrade docker-java version to 3.5.0

* fix: make some method protected in the AbstractRunnerTest so it can be override
2025-08-21 20:30:25 +02:00
brian-mulier-p
387cf0191e fix(core): add proxy so that origin is the same as request url for workers (#10053) 2025-08-21 11:44:28 +02:00
nKwiatkowski
e8716bc919 chore: update version to 0.22.24 2025-08-19 15:20:38 +02:00
brian.mulier
d804cf756c fix(core): change cache policy on files returned by webserver that needs to stay fresh
closes #7499
2025-08-19 13:40:32 +02:00
YannC.
9ffef679ed chore: update version to 0.22.23 2025-08-12 10:11:24 +02:00
brian.mulier
f094381da5 fix(dashboard): properly use time filters in queries
closes kestra-io/kestra-ee#4389
2025-08-11 22:31:01 +02:00
Nicolas K.
8c4fe023e5 feat(releases): add test jar to meven central deployment (#10675)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-08-11 17:17:41 +02:00
brian.mulier
d578beacae tests(core): add a test to taskrunners to ensure it's working multiple times on the same working directory
part of kestra-io/plugin-ee-kubernetes#45
2025-08-11 15:10:00 +02:00
brian.mulier
50a3a17555 fix(core): ensure props with defaults are not marked as required in generated doc 2025-08-07 15:09:25 +02:00
brian.mulier
d202c60e50 fix(core): wrong @NotNull import leading to key not being marked as required
closes #9287
2025-08-07 15:07:39 +02:00
brian.mulier
d056aa9f08 chore(version): version 0.22.22 2025-08-05 10:54:36 +02:00
brian.mulier
108003208e fix(core): avoid follow execution from being discarded too early
closes #10472
closes #7623
2025-07-31 10:25:07 +02:00
Loïc Mathieu
a237162e16 fix(tests): wrong URL 2025-07-29 13:54:43 +02:00
Loïc Mathieu
fc3a8543c7 fix(test): wrong URL in test 2025-07-29 12:55:28 +02:00
Loïc Mathieu
890bb8f162 Revert "fix(executions): flow concurrency limit not honors when executions are created at a high rate"
This reverts commit c7cec53056.
2025-07-29 10:30:50 +02:00
Loïc Mathieu
7338003477 chore(version): version 0.22.21 2025-07-29 10:19:31 +02:00
brian.mulier
d52df03a2a fix(core): add translations 2025-07-29 10:19:31 +02:00
Roman Acevedo
fd084f0bc0 fix(triggers): bulk action on triggers did not take into account this is async (#10307) 2025-07-29 09:30:35 +02:00
YannC
f1d137897e fix: set postgres and mysql queue offset as a bigint (#10344) 2025-07-28 16:28:37 +02:00
Loïc Mathieu
7ac44bd234 fix(core): compilation issue 2025-07-28 14:12:23 +02:00
Loïc Mathieu
a7c3694738 fix(core): amend misc label-related issues (#10044)
* fix(core): amend misc label-related issues

* re-enabled bulk update of label value
* re-enabled merging flow-execution labels by key
* made duplicated keys rejection readable
* forced multiple validations within `RequestUtils`
* ensured existing labels can be overriden
* added multiple tests validating complex scenarios

BREAKING CHANGE: switched from first to last label value override
BREAKING CHANGE: preventing empty key/value labels
BREAKING CHANGE: preventing whitespace in key

* fix(core): reflect feedback

* Deduplicated a list inside the `Labels` task.
* Worked around label mutation at `Worker`.
* Attempted to deduplicate labels within `Execution` as possible.

* fix(core): remove irrelevant changes
2025-07-28 11:33:12 +02:00
Loïc Mathieu
c7cec53056 fix(executions): flow concurrency limit not honors when executions are created at a high rate
This is due to the fact that we now process the execution queue concurrently so there is a race when counting currently running executions. This can be seen easily using a ForEachItem as it could create tens or hundreds of executions almost instantly leading to almost all those executions started as they would all see 0 executions running...

Using a dedicated execution running queue, as done in EE, would serialize the messages and fix the issue.

However, if using multiple executor instances and concurrency limit = 1, there is a theoretical race as no locks will be done if no execution is running. A max surge of executions could be as high as the number of executor but this race is less probable to happen in real world scenario.

Fixes #10167
2025-07-25 12:08:33 +02:00
Loïc Mathieu
850f23d796 fix(executions): race condition inside nested ForEach with concurrency
Fixes #10167
2025-07-25 09:46:13 +02:00
Florian Hussonnois
113d40284b chore(version): bump to version '0.22.20' 2025-07-22 16:12:55 +02:00
Florian Hussonnois
f1ae4586d3 fix(test): fix ScriptServiceTest 2025-07-22 16:12:54 +02:00
Nicolas K.
3dcee8263c fix(pebble): #8953 add more flexible day number conversion method (#10205)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-07-22 15:02:17 +02:00
YannC.
5a1634c43a fix: handle label filter with and instead or for flow
close #4390
2025-07-22 09:41:30 +02:00
YannC.
dd492f2bea fix: remove old test 2025-07-22 09:40:08 +02:00
Loïc Mathieu
4aa7cdf10a fixx(system): compilation issue 2025-07-21 12:42:52 +02:00
Loïc Mathieu
610586cb8e fix(executions)*: restart with finally or afterExecution
When a flow fail and is restarted and contains either a finally or an afterExecution block, those are not resetted so the restart will skip all task and terminate the flow.
The fix will reset the status of those tasks so they are restarted.

Fixes #10155
2025-07-21 12:41:03 +02:00
Loïc Mathieu
4a47fc1ac2 fix(executions): support unicode file name inside the internal storage
Fixes #9550
2025-07-21 12:40:08 +02:00
Piyush Bhaskar
be994eca25 fix(triggers): only updates the trigger that matches both flowId and triggerId (#10156) 2025-07-17 14:12:30 +05:30
YannC.
c877780eef chore(version): upgrade to v0.22.19 2025-07-15 11:42:33 +02:00
YannC.
4b5ced14a2 fix: use correct field instead of null in the filter 2025-07-15 11:02:19 +02:00
Loïc Mathieu
8c51ba561d feat(system): add NoopCache
To use where we want to be able to disable caching.
2025-07-09 17:47:06 +02:00
Loïc Mathieu
79f1aefab3 chore(system): rename FlowExecutorInterface to FlowMetaStoreInterface
Part-of: https://github.com/kestra-io/kestra-ee/issues/3474
2025-07-09 17:38:32 +02:00
brian-mulier-p
7a17bd696b fix(core): trim expressions in select & multiselect to be able to use '|' instead of '>-' (#10017)
closes #10016
2025-07-09 16:38:22 +02:00
nKwiatkowski
67d47f0bab fix: failing unit test 2025-07-08 16:42:35 +02:00
nKwiatkowski
6ab8b2c008 fix: failing test 2025-07-08 15:49:42 +02:00
nKwiatkowski
8f49863f44 chore(version): upgrade to v0.22.18 2025-07-08 15:20:35 +02:00
Loïc Mathieu
d74f39bcec fix(webserver)*: bulk set labels remove existing labels
FIxes #9764
2025-07-07 15:25:51 +02:00
Loïc Mathieu
a057b6d429 fix(system): force running after execution tasks even if the execution is killed
Fixes #9852
2025-07-07 12:40:33 +02:00
nKwiatkowski
2d24698a76 feat(cicd): #4006 add javadoc and sources to cli release 2025-07-03 14:57:36 +02:00
nKwiatkowski
a16c7f2246 Merge remote-tracking branch 'origin/releases/v0.22.x' into releases/v0.22.x 2025-07-03 11:07:31 +02:00
YannC.
6ed58a7ac7 chore(version): upgrade to v0.22.17 2025-07-02 17:17:57 +02:00
YannC.
59db2c937a fix: revert test changes 2025-07-02 17:17:57 +02:00
Nicolas K.
44780a1fe7 feat(cicd): #4006 change signing method (#9854)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-07-02 17:17:57 +02:00
Nicolas K.
1bfa05e42f feat(cicd): #4006 change signing method (#9854)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-07-02 11:14:30 +02:00
YannC.
8f8182d94b chore(version): upgrade to v0.22.17 2025-07-02 10:47:16 +02:00
YannC.
0c1615a59e fix: revert test changes 2025-07-02 10:47:16 +02:00
Nicolas K.
0c412ffc2a feat(cicd): #4006 migrate to maven central (#9807)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-07-01 16:21:55 +02:00
YannC.
2ba976dedf fix(ui): use correct key in filter query 2025-07-01 15:41:45 +02:00
Nicolas K.
162e1d8b58 feat(cicd): #4006 migrate sonatype to maven central (#9803)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-07-01 15:06:18 +02:00
nKwiatkowski
bedf507bd9 Merge remote-tracking branch 'origin/releases/v0.22.x' into releases/v0.22.x
# Conflicts:
#	core/src/main/java/io/kestra/core/runners/RunVariables.java
#	core/src/main/java/io/kestra/plugin/core/execution/SetVariables.java
#	core/src/test/java/io/kestra/core/http/client/HttpClientTest.java
2025-07-01 15:04:57 +02:00
YannC.
200edf5d2a fix(triggers): correctly replace the update triggers when disabling 2025-07-01 14:17:59 +02:00
YannC.
df70080f9e feat(triggers): avoid clearing selection when refreshing in triggers list 2025-07-01 14:17:59 +02:00
Loïc Mathieu
481b6d03dc fix(system)*: mitigate possible deadlock for execution delay and SLA
In case multiple instances of the executor are started, the execution delay loop and the monitoring SLA loop have a risk of duplicate execution resume or execution SLA violation computation.
This could create some race conditions and duplicate execution update.
But this may also risk to create some deadlocks as two instances of the executor may try to lock the same exection to restart it (or fail it due to SLA).
2025-06-30 14:34:48 +02:00
YannC.
2dbbdfdf7c fix(executions): added greater than and lower than for start/end date in supportedOp 2025-06-30 12:07:32 +02:00
Loïc Mathieu
9c3ce3461d feat(cluster): persist maintenance mode in the database
Part-of: https://github.com/kestra-io/kestra-ee/issues/3735
2025-06-30 11:34:30 +02:00
Loïc Mathieu
950f8fe4de chore(version): upgrade to 0.22.16 2025-06-26 09:44:42 +02:00
brian-mulier-p
2377d1594d fix(variables): put fixtures files with arbitrary key and extract it back as root level "files" variable (#9689) 2025-06-26 09:37:32 +02:00
Loïc Mathieu
e9c1cdab2e chore(system): call the close runnable later 2025-06-25 14:36:56 +02:00
brian.mulier
1c31659c16 chore(version): upgrade to version 0.22.15 2025-06-24 15:31:18 +02:00
Loïc Mathieu
acce98939c test(core): fix falling test on schedule 2025-06-24 15:31:18 +02:00
Loïc Mathieu
13fe5f5421 fix(system): possible NPE on trigger when computing variables 2025-06-24 15:31:18 +02:00
brian-mulier-p
05d9797262 fix: avoid failure to deserialize json objects that have unknown fields with http client (#9668)
closes #9667
2025-06-24 15:31:18 +02:00
Loïc Mathieu
b5b198d063 feat(executions)*: add tasks to set and unset execution variables
Closes #9555
2025-06-24 14:52:04 +02:00
brian-mulier-p
267ae7d034 fix: avoid failure to deserialize json objects that have unknown fields with http client (#9668)
closes #9667
2025-06-23 12:25:06 +02:00
Loïc Mathieu
52c383cb1d feat(executions)*: add tasks to set and unset execution variables
Closes #9555
2025-06-23 10:43:37 +02:00
Loïc Mathieu
bea92cd2b7 fix(core): test compilation issue 2025-06-20 15:41:13 +02:00
Loïc Mathieu
97c2f0476d fix(system): flow graph fail to be created while editting a flow
Fixes #9551

It is not the validation per se that fail, it's the graph dependency computation that is also done while editing a flow that fail.
2025-06-20 12:10:10 +02:00
Loïc Mathieu
09f913d62d fix(system)*: runIf inside a WorkingDirectory can crash the Worker
Fixes #9639
2025-06-20 12:09:52 +02:00
Florian Hussonnois
b9f81edc56 fix(executor): delete WorkerJobRunning for any terminated task (#9493)
Make ExecutorService responsible for deleting WorkerJobRunning
when a terminated TaskRun is added to an execution.

Changes:
 - Remove unecessary read before delete on WorkerJobRunning table.

Close: #9493
2025-06-19 11:27:46 +02:00
nKwiatkowski
29786246f3 fix(core): #4102 add open telementry in the class loader ignore list 2025-06-17 11:19:48 +02:00
Loïc Mathieu
faf7182a42 chore(version): upgrade to version 0.22.14 2025-06-17 09:27:54 +02:00
Ludovic DEHON
c22d936128 fix(tasks): sleep example are a full one 2025-06-16 15:02:12 +02:00
Ludovic DEHON
4a377904d0 fix(core): robots.txt was not served
close kestra-io/kestra#9015
2025-06-13 23:01:34 +02:00
Miloš Paunović
352c65e675 fix(namespaces): properly pass namespace parameter on file/folder creation (#9478)
Closes https://github.com/kestra-io/kestra-ee/issues/4028.
2025-06-11 11:59:16 +02:00
github-actions[bot]
3fe7a871dd chore(version): update to version '0.22.13' 2025-06-10 14:53:11 +00:00
Florian Hussonnois
fe4e788060 ci: fix setversion-tag and devtools 2025-06-10 16:52:38 +02:00
Ludovic DEHON
9c7a706f7d feat(system): add server_type as global metrics tags 2025-06-10 09:22:46 +02:00
nKwiatkowski
bd4623397f chore(version): upgrade version to v0.22.12 2025-06-06 10:31:41 +02:00
MilosPaunovic
aaf8eb13e2 chore(trnaslations): add missing keys 2025-06-05 17:45:22 +02:00
nKwiatkowski
ae6b27ae9b chore(version): upgrade version to v0.22.11 2025-06-05 16:38:29 +02:00
Karel Krýda
4043832700 fix(ui): amended selection of multiple filter values (#9350) 2025-06-05 15:53:17 +02:00
nKwiatkowski
cef9243c13 fix(test): fix failing unit tests 2025-06-05 15:45:37 +02:00
brian-mulier-p
0303fdba11 fix(core): avoid crashing in case of taskrun having too large value (#9359)
closes #9312
2025-06-05 14:10:56 +02:00
Loïc Mathieu
6e6b0c1a47 fix(plugin): resolves subtypes inside the JSONSchema 2025-06-05 11:37:50 +02:00
Nicolas K.
d613d12f41 fix(flows): #9319 error when puase with timeout trigger an execution (#9334)
* fix(flows): #9319 error when puase with timeout trigger an execution even after it's terminated

* fix(flows): only skip paused flow when execution is terminated

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-06-05 10:11:43 +02:00
brian-mulier-p
6a5e143973 fix(core): additional plugins are now properly shown in plugin docs (#9329)
closes kestra-io/plugin-langchain4j#61
2025-06-05 09:38:55 +02:00
Loïc Mathieu
ffaa39ff41 fix(system)*: don't include yourself as def in the JSONSchema
For AdditionalPlugin, as we resolves subtypes using isAssignable, we will resolve ourself as a subtype which leads to infinite loop while parsing the schema.
2025-06-04 13:20:18 +02:00
Loïc Mathieu
62ef572011 fix(system)*: correctly resolve additional plugin subtypes so autocompletion work
Part-of: https://github.com/kestra-io/plugin-langchain4j/issues/61
2025-06-04 11:07:51 +02:00
Florian Hussonnois
ba31a3c8a7 chore(version): update to version '0.22.10' 2025-06-03 14:32:03 +02:00
Loïc Mathieu
06399d0357 feat(plugins): add Langchain4J plugins 2025-06-02 13:58:51 +02:00
Loïc Mathieu
8a608e8c7e feat(plugin): add a way to provide additional type of plugins
Provide a way for plugins to define a new type of plugins.
To do that, a plugin must provide both an abstract base class that extends AdditionalPlugin and a set of concret classes.
Both the abstract base class and the concrete classes mut be inside the same plugin. This is a limitation that we may work on later by providing, for example, an SPI to add base classes to the application classloader.
2025-06-02 13:58:15 +02:00
Loïc Mathieu
ef8cb725fe feat(system): Property.ofValue & Property.ofExpression
Deprecate Property.of(T) in favor of Property.ofValue(T) and new Property(String) in favor of Property.ofExpression(String)
2025-06-02 13:57:45 +02:00
Miloš Paunović
7aa4658bbb fix(dashboards): amend line chart values & bar chart stacks sorting (#9158)
Closes https://github.com/kestra-io/kestra/issues/6603.
Closes https://github.com/kestra-io/kestra-ee/issues/3918.
2025-05-30 10:46:44 +02:00
YannC.
64ff19abcb ci: fix the workflow release 2025-05-30 09:58:16 +02:00
Loïc Mathieu
6032bf7dd9 fix(core): compilation issue 2025-05-30 09:45:22 +02:00
YannC.
b5531a50e6 ci: moved helm update trigger on EE side 2025-05-30 09:24:00 +02:00
Miloš Paunović
5fbd8715e7 fix(dashboards): amend line chart values & bar chart stacks sorting (#9141)
Closes https://github.com/kestra-io/kestra/issues/6603.
Closes https://github.com/kestra-io/kestra-ee/issues/3918.
2025-05-29 10:36:29 +02:00
Florian Hussonnois
7e88409f3e fix(system): wait for grace period before reemitting tasks for terminated_forced workers (#9094)
When a worker transitition to the TERMINATED_FORCED, the LivenessCoordinator
should wait for termination grace period to ensure
that all in-flight task-runs had time to be completely processed by the executors

Related-to: #8334
Fix: #9094
2025-05-28 15:52:26 +02:00
Loïc Mathieu
aab4bbd3ec fix(dashboard): Properly cast log level column in Dashboards
Fixes #8128
2025-05-27 16:19:25 +02:00
Florian Hussonnois
c7352899d6 chore(version): update to version '0.22.9' 2025-05-27 15:31:58 +02:00
Florian Hussonnois
620e201dbb fix(build): fix compile errors 2025-05-27 15:31:57 +02:00
YannC
808f2db8b3 fix: avoid the Kestra Instance to be indexed (#9018)
close #9015
2025-05-27 12:16:38 +02:00
Florian Hussonnois
bbcf00dce0 fix(cli): properly install all plugins depending on kestra distribution
Related-to: kestra-io/kestra-ee#3806
2025-05-26 20:37:42 +02:00
Ludovic DEHON
a6c9b7c541 feat(plugins): add allowedResponseCodes on http tasks
close #8973
2025-05-26 09:27:27 +02:00
YannC
d8bfec8cb5 fix(filters): change label filtering to 'and' instead of 'or' (#8661)
* fix(filters): change label filtering to 'and' instead of 'or'

link to #8489

* test(execution): add test to validate and behavior

* test(execution): fix test
2025-05-23 11:28:56 +02:00
brian-mulier-p
3d5b530a59 fix(system): force a state after kill (#8937)
closes #8936
2025-05-23 10:53:59 +02:00
brian.mulier
07713ab214 fix(plugins): remove "DYNAMIC" log from browser console 2025-05-21 14:54:12 +02:00
Florian Hussonnois
3618d45a1a fix(flows): migrate LoopUntil to Property API to support pebble expr (#8754)
Related-to: #8754
2025-05-20 17:20:56 +02:00
YannC.
3386f54b6a chore(version): upgrade version to v0.22.8 2025-05-20 14:42:11 +02:00
Barthélémy Ledoux
9f885f71fa fix(namespaces): use the right route param to get namespace files (#8747) 2025-05-20 09:39:49 +02:00
nKwiatkowski
a569e0a81d fix(flows): flow with path now have the tenant id 2025-05-19 16:13:39 +02:00
brian.mulier
371551045e fix(plugins): show back if property is dynamic
closes kestra-io/ui-libs#471
2025-05-19 12:58:39 +02:00
brian.mulier
d68c7b653f fix(plugins): add back metrics to plugin docs
closes kestra-io/kestra#8792
2025-05-19 12:58:39 +02:00
Loïc Mathieu
339ee10ac6 fix(system)*: reset the trigger into the KafkaScheduler instead of the ExecutorMain 2025-05-19 12:03:51 +02:00
Loïc Mathieu
3dd67ca396 feat(system): change the way we concurrently process executor queues
Instead of consuming multiple time the queue, which lead to concurrent queries on the `queues` table, process concurrently via an ExecutorService the messages from the queue.
We dind't process a new batch of messages until the existing one is totally process to be sure we process in FIFO the same execution message.

Also, go back to a poll size of 100 to mitiguate the performance hit due to this change.
2025-05-15 18:27:40 +02:00
brian.mulier
9ab5a9b9ad chore(version): version 0.22.7 2025-05-13 16:17:38 +02:00
brian.mulier
36bcd943fa tests(executions): remove flakiness on some tests around sleep 2025-05-13 16:15:25 +02:00
brian.mulier
a37785aae2 fix(executions): avoid to stop following execution too early leading to UI display shifting from actual state (#8718)
part of kestra-io/kestra-ee#3526
2025-05-13 16:10:48 +02:00
Florian Hussonnois
24c00bc065 fix(system): avoid catching JVM fatal error on Worker
Re-throw VirtualMachineError when an exception is catched
from a worker task ensuring, for example, that OOM are
correctly propagated.
2025-05-13 09:06:02 +02:00
Miloš Paunović
634b6b2c2f fix(namespaces)*: send proper parameter for namespace on file creation/update (#8706)
There was a problem with sending the non-existing parameter to `vuex` action for creation/update of namespace files. Now that's sorted.

Closes https://github.com/kestra-io/kestra-ee/issues/3567.
2025-05-09 13:03:19 +02:00
Loïc Mathieu
86e64e83d8 chore(version): version 0.22.6 2025-05-06 14:14:04 +02:00
Barthélémy Ledoux
15d1824e16 fix(editor): check isFlow when displaying NoCode in legacy editor (#8645) 2025-05-06 10:30:18 +02:00
Loïc Mathieu
9cd4dbfefc fix(flows): ForEach concurrency should not be over the number of values
Fixes #8614
2025-05-06 10:27:46 +02:00
Loïc Mathieu
6f874b9325 fix(dashboards)*: SQL errors on logs data chart
- PostgreSQL needs a cast from enum to text.
- Missing quotes on the WHERE clause.

Fixes #8128
2025-04-30 18:12:10 +02:00
Florian Hussonnois
2da00f94ef chore(version): update to version '0.22.5' 2025-04-29 15:57:16 +02:00
Florian Hussonnois
51b4099185 test(core): fix InputsTest 2025-04-29 15:57:16 +02:00
Loïc Mathieu
ebba95688e feat(system)*: decrease defaut JDBC queue poll size
Decreasing it from 100 to 50 didn't show any performance hit but should lower the memory consumption now that we process the queue concurrently in the executor.

## BEFORE - pollSize=100
- 10 tx/s: 150ms
- 25 tx/s: 200ms
- 50 tx/s: 300ms
- 75 tx/s: 5.2s
- 100 tx/s: 15s

## AFTER - pollSize=50
- 10 tx/s: 150ms
- 25 tx/s: 200ms
- 50 tx/s: 300ms
- 75 tx/s: 4.8s
- 100 tx/s: 14s
2025-04-29 15:11:48 +02:00
Florian Hussonnois
54c35aeb50 fix(executions): fix execution failure due to UnsupportedOperationException (#8563)
Fix: #8563
2025-04-29 14:13:43 +02:00
github-actions[bot]
8d27408234 chore(core): localize to languages other than english (#8568)
Extended localization support by adding translations for multiple languages using English as the base. This enhances accessibility and usability for non-English-speaking users while keeping English as the source reference.

Co-authored-by: GitHub Action <actions@github.com>
2025-04-29 10:37:42 +02:00
Piyush Bhaskar
0016657826 chore(triggers)*: properly handle switches for triggers disabled from within flow source (#8106)
It was not clear as to which trigger can not be enabled and why. Now, that is much more clear with the proper tooltips and disabling of switch toggling.

Closes https://github.com/kestra-io/kestra/issues/8011.
Closes https://github.com/kestra-io/kestra/issues/5736.
2025-04-29 10:34:59 +02:00
nKwiatkowski
be968cb20b fix(namespaces): namespaceFiles with same name are wrongly overwritten 2025-04-28 16:16:56 +02:00
Nicolas K.
0de1caac2a fix(namespaces): namespaceFiles with same name are wrongly overwritten (#8562)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-04-28 16:15:50 +02:00
Nicolas K.
b79c1818b5 fix(core): change incorrectly used search parameter (#8534)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-04-28 10:35:55 +02:00
杨利伟
d0f4f7c56b fix(jdbc): add service_id index on service_instance table 2025-04-25 09:37:54 +02:00
Loïc Mathieu
1689149182 fix(system): restrict the JdbcConcurrencyLimitService to the JDBC runner 2025-04-23 16:39:16 +02:00
Loïc Mathieu
e0f831820b fix(execution)*: decode and hide nested inputs of type SECRET
Fixes #7964
2025-04-23 12:20:07 +02:00
Loïc Mathieu
5c0ccc6a73 fix(executions): unqueing execution must remove the execution queued
When an execution is queued in the JDBC backend, a record is inserted inside the execution_queued table, we must remove this record when we unqeue an execution.

Fixes #8448
2025-04-23 12:19:19 +02:00
nKwiatkowski
85a4e5d7dc chore(version): upgrade to 0.22.4 2025-04-22 15:39:10 +02:00
YannC
ee4c8397f6 fix(ui): add new property in filters (#8444) 2025-04-18 21:29:00 +02:00
Sayed Murtadha Ahmed
fb3d7af5b9 chore(core)*: make sure that notifications with large message text are closeable (#8431)
There was a problem when an error message is too big, the toaster could not be closed. This change is amending that issue.

Closes https://github.com/kestra-io/kestra/issues/8352.
2025-04-17 11:45:10 +02:00
YannC.
e68c04c9f7 fix(ui): correct path for namespace files on namespace page
close #8140
2025-04-17 10:35:49 +02:00
Karuna Tata
e53c1f1d2b chore(core)*: deboucing task validation from no code editor (#8418)
There was an issue when a user edited a task from the No Code editor—the validation endpoint was being called excessively, instead of waiting for the user to finish typing. This has now been resolved with this PR.

Closes https://github.com/kestra-io/kestra/issues/7073.

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-04-16 12:31:33 +02:00
weibo1
f257c7ef1c feat(system): add index to commonly queried fields in the WHERE conditions of the triggers table 2025-04-16 09:11:30 +02:00
Miloš Paunović
c90baa73c4 fix(core)*: allow horizontal scrolling of tabs in multi panel view (#8414)
If there are multiple tabs opened in a single panel of the new multi panel view,  there was no ability to scroll and see the overflowing ones. With changes in this PR, users can now do just that.

Closes https://github.com/kestra-io/kestra/issues/8270.
2025-04-16 08:41:01 +02:00
Karuna Tata
e28a8ec465 feat(core)*: allow moving of entire panels (#8377)
Changes in this pull request now allow users to move entire panels where ever they want, plus, there are `Move right` and `Move left` options in the context menu.

Closes https://github.com/kestra-io/kestra/issues/8272.

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-04-16 07:48:33 +02:00
Satvik Kushwaha
9a002743c7 chore(dashboards)*: amend hover color of table top buttons on dashboard (#8388)
Tables on main dashboard which have the `See all` buttons needed UI tweaking of color on hover, which is handled in this pull request.

Closes https://github.com/kestra-io/kestra/issues/8376.

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-04-15 14:15:23 +02:00
YannC.
8920d0e86a chore(version): upgrade to 0.22.3 2025-04-15 11:27:43 +02:00
Karuna Tata
ff7c106261 feat(core)*: implement redirection to flow creation page on skipping tutorial (#8333)
When a user clicks the `Skip tutorial` button, it just does that, shuts the tutorial down but leaves the user on the same page. This change will redirect users to `Flow Creation` page if the `Skip Tutorial` button is clicked.

Closes https://github.com/kestra-io/kestra/issues/8326.

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-04-15 08:13:33 +02:00
Florian Hussonnois
8ae57ab8bc fix: add missing indices for service instance table 2025-04-14 21:29:16 +02:00
Satvik Kushwaha
b6c0ac3ae6 fix(flows)*: amend text color problem in no code editor on firefox (#8367)
There was an issue with title color of tasks on the `No Code` editor (which stayed dark no matter the mode selected), but only viewed in `Firefox` browser. That is sorted out with this pull request.

Closes https://github.com/kestra-io/kestra/issues/8327.

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-04-14 09:37:49 +02:00
brian-mulier-p
a6adea8a8d fix(core): bring back documentation on some plugins (#8354)
swagger is now resolved from Kestra classpath

closes #8265
2025-04-11 16:04:46 +02:00
Miloš Paunović
9abf19e876 feat(core)*: allow closing all tabs at once in a single panel (#8360)
Adds the ability to close all tabs in a single panel with a single click, improving usability and eliminating the need to close each tab individually.

Closes https://github.com/kestra-io/kestra/issues/8273.
2025-04-11 15:15:31 +02:00
github-actions[bot]
805c4d4611 chore(translations)*: localize to languages other than english (#8353) 2025-04-11 12:12:26 +02:00
Miloš Paunović
9e3372d87c feat(core)*: introduce a dropdown menu for each panel (#8351)
This is the initial work to support the two related issues mentioned above, which is introducing the context menu for each tab panel, which will give us the place to list related actions.

Relates to https://github.com/kestra-io/kestra/issues/8272.
Relates to https://github.com/kestra-io/kestra/issues/8273.
2025-04-11 11:56:59 +02:00
MilosPaunovic
22e3396d8a chore(version): update changelog.md with details for v0.22.2 2025-04-11 10:09:26 +02:00
Miloš Paunović
a9eace9095 chore(flows)*: hide horizontal scroll on editor based inputs (#8347)
There was always a horizontal scrollbar present at editor compnent when used as input field, which was previously handled for the No Code editor in https://github.com/kestra-io/kestra/pull/8216.

Relates to https://github.com/kestra-io/kestra-ee/issues/3404.
2025-04-11 08:09:58 +02:00
Miloš Paunović
5a14b59a7d feat(core)*: close code tab if file is deleted (#8331)
In the new multi panel view, if we have `code` tab opened and delete that file from `files` panel, we'll automatically close the opened tab for the file in question.

Closes https://github.com/kestra-io/kestra/issues/8271.
2025-04-10 14:52:48 +02:00
brian.mulier
6d079e018e fix(core)!: prevent failing execution in case of duplicate label upon inheritance 2025-04-10 11:02:32 +02:00
Piyush Bhaskar
aa8019335b chore(ui): improve the filter label colors on hover (#8141) 2025-04-09 11:19:25 +02:00
Piyush Bhaskar
63c19fa84a chore(ui): amend scrollbar issue on the no code editor fields (#8216) 2025-04-09 11:19:16 +02:00
Karuna Tata
349d1ff78e chore(ui): remove reorder buttons when there's only one value in no code arrays (#8266) 2025-04-09 11:18:54 +02:00
nKwiatkowski
25fd5ea46d feat(Unit Tests): add assertj dependency 2025-04-08 15:56:41 +02:00
YannC
bd8db96ede chore(ci): modify publish docker to align on EE 2025-04-08 15:52:36 +02:00
YannC
67bfcca426 Feat(): ci changes (#8217)
* fix(): avoid running release workflow on releases branch

* feat(): avoid running CI on draft PR

close #4964

* fix(ci): only publish docker image in workflow release if develop branch or specific asked

close #8136
2025-04-08 15:49:45 +02:00
MilosPaunovic
3036778134 fix(ui): allow tab button to take effect while using editor 2025-04-08 15:33:13 +02:00
brian.mulier
546d5478d2 chore: upgrade to 0.22.2 2025-04-08 14:25:58 +02:00
Florian Hussonnois
37ef0a8b38 fix(core): fix NPE when generating flow graph
Fix NPE when generating flow graph and a task cannot be deserialized

Fix: kestra-io/kestra-ee#3369
2025-04-08 14:04:38 +02:00
Miloš Paunović
95281746c7 fix(ui): amend namespace files creation & editing problems (#8279) 2025-04-08 13:50:14 +02:00
Miloš Paunović
d0db138736 chore(ui): pass prop to maximize the height of namespace file editor (#8278) 2025-04-08 13:49:52 +02:00
Miloš Paunović
e3059fdf6a chore(ui): amend the sizing of editor panels (#8277) 2025-04-08 13:48:08 +02:00
brian.mulier
59cc561868 feat(ui): ability to hide secret value when typing in secrets
closes kestra-io/kestra-ee#3358
2025-04-08 00:13:16 +02:00
Loïc Mathieu
412837952e feat(jdbc-h2,jdbc-mysql,jdbc-postgres): add an index on queues.key 2025-04-07 16:00:39 +02:00
brian.mulier
8fb6e6af28 fix(ui)!: prevent infinite loading loop in Namespace KV Store & Secrets pages if there is none 2025-04-07 15:08:32 +02:00
Loïc Mathieu
a63dbe8e83 feat(jdbc): allow disabling queue cleaning. 2025-04-04 13:43:22 +02:00
Loïc Mathieu
ffd06a57eb fix(core): default namespace in namespace file 2025-04-04 11:52:21 +02:00
Miloš Paunović
120d06454d chore(version): update the CHANGELOG.MD with details for 0.22.1 2025-04-04 08:48:14 +02:00
Loïc Mathieu
9857930da1 chore: upgrade to 0.22.1 2025-04-03 16:00:08 +02:00
Nicolas K.
f9c47b2324 fix(jdbc): #8219 unquoted timestamp field breaking query (#8222)
* fix(jdbc): #8219 unquoted timestamp field breaking query

* fix(jdbc): #8219 fix hard coded quoted field

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-04-03 14:55:06 +02:00
Loïc Mathieu
38f68dae5b fix(core): be tolerant of decryption issue
If we cannot decrupt outputs, let's ignore the outpot and log a warning.
This may only happen on configuratin mismatch between nodes.
2025-04-03 13:58:45 +02:00
YannC
632c5836da chore(ci): align plugins handle for docker publish on EE CI 2025-04-03 13:47:57 +02:00
YannC
fedbffbdf5 chore(ci): modify publish docker to align on EE 2025-04-03 13:47:52 +02:00
Florian Hussonnois
8ccab1d6df fix(cli): fix NPE for commands not requiring plugins (#8212)
Fix: #8212
2025-04-03 09:47:36 +02:00
Shruti Mantri
0833e800d3 feat: add afterExecution to basic.md (#8126)
* feat: add afterExecution to basic.md

* Update ui/src/assets/docs/basic.md

---------

Co-authored-by: AJ Emerich <aemerich@kestra.io>
2025-04-02 13:48:58 +02:00
Loïc Mathieu
6ead4e63cd fix(jdbc): possible deadlock on service instance
If multiple Executors restart at the same time and there was a not of worker task to resubmit, there was a possible deadlock as the service instance table is selected for update so it can block other executors.
Using skipped lock avoid that and is still correct as other executors can skip the dead instance handling as it was already in process by the first executor.

findById was not changed in this commit as it's not part of the worker task resubmission process.
2025-04-02 10:55:06 +02:00
Loïc Mathieu
9cb51ba0ee fix(gradle): Windows selfrun.bat
Fixes https://github.com/kestra-io/kestra-ee/issues/3324
2025-04-02 09:46:31 +02:00
MilosPaunovic
b78748ebfb chore(version): update the CHANGELOG.MD with details for 0.22.0 2025-04-02 08:55:59 +02:00
brian.mulier
5757b576e9 fix(ui): keep fetching if filtered kvs & secrets have no elements after fetch
might close kestra-io/kestra-ee#3311
2025-04-01 19:50:19 +02:00
Loïc Mathieu
94dcba1262 fix(core): mask secrets on log attributes
Fixes #3282
2025-04-01 14:39:02 +02:00
Loïc Mathieu
ae223c8d78 Revert "fix(core): HttpClient log the URL even if it's a secret"
This reverts commit 54aa935702.
2025-04-01 14:38:54 +02:00
Loïc Mathieu
7cfbb91e7b fix(core): use a stable flow logger name
If we keep the executionId in it, as it's now used to create the forward logger, a new logger will be created for each execution.
This may also fix a memory leak.
2025-04-01 14:38:45 +02:00
YannC
3ce2cdaeb9 fix(cli): prevent FlowUpdatesCommand to crash due to plugin loader 2025-04-01 13:50:44 +02:00
Loïc Mathieu
c5f2901f7f chore: upgrade to v0.22.0 2025-04-01 10:32:38 +02:00
YannC
ea2bb3f6bd fix(): allows namespace to be search by in filter 2025-04-01 10:26:19 +02:00
Loïc Mathieu
ed58b7b5b8 chore: version v0.22.0-rc4-SNAPSHOT 2025-03-31 15:19:12 +02:00
Barthélémy Ledoux
e6e0ffcdb7 fix: make flowWarnings show to unlock saving (#8157)
closes #8115
2025-03-31 15:18:07 +02:00
Barthélémy Ledoux
ca84a0fbfd fix: task array needed better typings (#8158)
closes #8117
2025-03-31 15:17:55 +02:00
Loïc Mathieu
08579cf555 chore: upgrade to v0.22.0-rc3-SNAPSHOT 2025-03-31 14:18:00 +02:00
Roman Acevedo
2b5d08c9f2 chore(deps): add bouncycastle:bcpkix-jdk18on to platform 2025-03-31 11:53:15 +02:00
Loïc Mathieu
822a3b438a chore: disable tests that are too flaky
An issue will be open to track them and re-enabled them later.
2025-03-31 10:47:52 +02:00
Nicolas K.
f6db013142 feat(core-ee): #7501 split file log exporter to multiple files (#8138)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-31 09:49:27 +02:00
Miloš Paunović
a031bfc129 chore(ui): show blueprint id field in case of missing title (#8154) 2025-03-31 09:40:54 +02:00
Loïc Mathieu
1613dee76b fix(core): add missing docker plugin subgroup icon 2025-03-28 16:43:36 +01:00
Florian Hussonnois
a884708862 chore: upgrade to version 'v0.22.0-rc2-SNAPSHOT' 2025-03-28 15:54:38 +01:00
Florian Hussonnois
91bf3207f4 fix(cli): properly register plugins uninstall cmd 2025-03-28 15:41:00 +01:00
Florian Hussonnois
95b1f8dfcc fix(core): allow dash in plugin version qualifier 2025-03-28 15:40:47 +01:00
brian.mulier
4e7c6e87be fix(ui): search bars are properly working in secrets & KV pages
closes #8110
closes kestra-io/kestra-ee#3290
2025-03-28 15:15:42 +01:00
Miloš Paunović
8ac089de1d chore(ui): add padlock icon to secrets menu item (#8129) 2025-03-28 12:46:25 +01:00
Miloš Paunović
3d7c891b95 chore(ui): amend file tree context menu link colors (#8123) 2025-03-28 12:46:15 +01:00
brian.mulier
54eccac637 fix(ui): global secret page design
closes kestra-io/kestra-ee#3268
2025-03-28 11:19:46 +01:00
brian.mulier
b3799cc039 fix(ui): repair tenant translation 2025-03-28 11:19:46 +01:00
brian.mulier
143ebc061f fix(ui): add routeContext where it was missing 2025-03-28 11:19:46 +01:00
brian.mulier
224026c399 fix(webserver): handle out-of-bounds (>) namespaces fetch 2025-03-28 11:19:45 +01:00
brian.mulier
a093198004 fix(core): namespace service now properly detects namespaces with flows inside 2025-03-28 11:19:45 +01:00
Loïc Mathieu
380e329e97 fix(core): compilation issue 2025-03-28 09:26:12 +01:00
Loïc Mathieu
6ee206f5f3 Revert "fix(core): require condition in Flow trigger (#7494)"
This reverts commit c5767fd313.
2025-03-28 09:12:58 +01:00
Miloš Paunović
6c43f9c7c3 chore(ui): handle editor blueprint loading problem (#8113) 2025-03-28 08:58:54 +01:00
Roman Acevedo
ec067e1a06 fix: doc and deprecated field was not showing for dynamic non-string properties (#8006)
fix: doc and deprecated field was not showing for dynamic non-string properties (#8006)
2025-03-27 18:36:24 +01:00
Florian Hussonnois
8ebc3fbba7 fix(core): avoid flow validation error on plugin alias duplicates 2025-03-27 17:59:53 +01:00
Nicolas K.
7e087c696c fix(kafka runner): #2709 filter child forEach tasks before merging th… (#8095)
* fix(kafka runner): #2709 filter child forEach tasks before merging the output, and add sleep before restarting flows to ensure failure is persisted

* feat(kafka runner): #2709 wait until executions are persisted as Failed in the database before restarting

* fix(runner): put back the sleep instead of the wait

* clean(runner): remove unused variables

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-27 17:09:26 +01:00
YannC
04b84df6ea feat(): add new crudeventtype "account_locked" (#8103) 2025-03-27 17:08:34 +01:00
Loïc Mathieu
b8e8333f62 fix(core): properly fix the issue with MapUtils.flattenToNestedMap 2025-03-27 16:28:47 +01:00
Loïc Mathieu
54aa935702 fix(core): HttpClient log the URL even if it's a secret
Fixes https://github.com/kestra-io/kestra/issues/8092
2025-03-27 16:02:00 +01:00
brian.mulier
8be17827c7 fix(ui): properly detect yaml to inject json schema into MonacoEditor
closes #8090
2025-03-27 13:39:45 +01:00
Miloš Paunović
9d83d9b6eb chore(ui): pass custom height property to execution output debug editors (#8100) 2025-03-27 13:36:56 +01:00
Miloš Paunović
ccd47f14ae chore(ui): include labels of saved search filter on page reload (#8099) 2025-03-27 13:17:36 +01:00
brian.mulier
8f4ce5fc18 fix(webserver): first eval without masking secret function to error in case of missing secret
closes #8094
2025-03-27 13:10:11 +01:00
Miloš Paunović
acb305dfdb chore(ui): make app & dashboard editors re-sizable (#8096) 2025-03-27 12:02:42 +01:00
Loïc Mathieu
4c93a2b0e9 fix(core): flatten map should not throw an exception
As it is called inside the Executor, it must be fail-safe.
2025-03-27 10:58:29 +01:00
Florian Hussonnois
dea66ca259 fix(cli): make worker args available through static KestraContext
part-of: kestra-io/kestra-ee#3259
2025-03-26 16:41:38 +01:00
Loïc Mathieu
c965f2f64c feat(*): add new methods findAllAsync for the backup 2025-03-26 14:04:58 +01:00
Miloš Paunović
6516f7fc60 chore(ui): improve saved search filtering functionality (#8073)
* chore(ui): passing prefix down  to saved search label component

* chore(ui): check if filters have operation field on encoding

* chore(ui): trigger search automatically on choosing the saved item
2025-03-26 11:18:29 +01:00
github-actions[bot]
2dd61fc194 chore(translations): localize to languages other than English (#8071) 2025-03-26 11:18:16 +01:00
YannC
771e841d78 chore(ci): pass plugin version to docker workflow 2025-03-26 10:39:29 +01:00
YannC
4448203031 fix(): add missing command to flow subcommand 2025-03-26 10:24:13 +01:00
yuri
e083163583 feat(ui): improve styling of saved filter searches (#8040)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-03-26 09:58:22 +01:00
Florian Hussonnois
8617eb0c7b chore: upgrade to version 'v0.22.0-rc1-SNAPSHOT' 2025-03-25 17:32:59 +01:00
YannC
2a002e9531 chore(ci): lower build-artifacts workflow so github release can use it 2025-03-25 17:32:59 +01:00
Barthélémy Ledoux
bc8bd7b00b feat: cleaner multipanel tab move (#8029)
* feat: better/simpler display for tab movement

* Revert "remove tests to make sure we merge"

This reverts commit a979232f6c.

* fix some tests

* better tests

* fix: make it work even after first move

* fix the blinking

* add a few tests

* one fix for split panel one for size

* fix test ?

* fix: scroll all the way

* make sure tab 4 is visible

* better borders

* fix dem darn tests
2025-03-25 15:46:05 +01:00
YannC
40f6334b0b fix(): datetime filtering issues (#8027)
close #7959
2025-03-25 14:48:27 +01:00
Nicolas K.
71151f5ac2 feat(core): #5467 add inheritance for KV in pebble and Get task (#8031)
* feat(core): #5467 add inheritance for KV in pebble and Get task

* fix(core): #5467 error when namespace don't contain dot

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-25 14:46:17 +01:00
brian.mulier
75e7635505 fix(ui): make sure global secret view iterates over all secrets 2025-03-25 13:43:05 +01:00
Florian Hussonnois
6c9dc8fba4 fix(core): fix NPE when closing standalone runner 2025-03-25 12:26:50 +01:00
brian.mulier
28d1f005a4 fix(ui): fail-safe secrets API calls on global secrets view 2025-03-25 12:09:07 +01:00
AJ Emerich
7fd7a6fcbc feat(docs): add example for best practice with multiline json http post request (#8023) 2025-03-25 11:42:27 +01:00
yuri
57707faf37 fix(ui): amend operator value of labels inside the filter (#8028) 2025-03-25 11:20:04 +01:00
brian.mulier
c64c2c7104 fix(ui): fail-safe secrets API calls 2025-03-25 11:08:22 +01:00
YannC
8f9b2fc0db fix(): use correct property for blueprint type
close #3227
2025-03-25 10:22:49 +01:00
Satvik Kushwaha
aab9e55794 chore(ui): limit flow run dialog maximum height (#7938)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-03-25 10:02:50 +01:00
Miloš Paunović
f9d48d6f74 fix(ui): allow multi label filtering (#8022) 2025-03-25 09:52:54 +01:00
Florian Hussonnois
267d848d3f fix(core): ensure defaults can be injected in flows (#3206)
Flow revisions create from older Kestra versions may not be linked to their original source.
In such cases, fall back to the generated source approach to enable plugin default injection.

close: #3206
2025-03-25 09:17:55 +01:00
brian.mulier
edbf14c1b8 fix(ui): handle properly layout of global Secrets when there is a secret manager 2025-03-25 02:45:21 +01:00
brian.mulier
d9ac267161 feat(ui): introduce global Secrets page
closes kestra-io/kestra-ee#1257
2025-03-25 01:39:18 +01:00
brian.mulier
74455ad993 fix(ui): prevent function parameters autocompletion from deleting parenthesis 2025-03-25 01:39:18 +01:00
YannC
e2dd02173f fix(): use correctly context-path when needed (#8018) 2025-03-24 20:30:55 +01:00
YannC
c7b3a42f34 fix(): make absolute date work with metrics (#8015)
close #7951
2025-03-24 18:46:45 +01:00
Rudhra Bharathy G
fe882bbee6 fix(): moved the logic to the backend (#5917)
close #5740
Co-authored-by: YannC <ycoornaert@kestra.io>
2025-03-24 17:59:54 +01:00
YannC
1efb21c087 fix(): make KestraFilter works with legacy default dashboard + avoid showing custom dashboard in namespace/flow pages (#8012)
close #7959
2025-03-24 16:33:48 +01:00
github-actions[bot]
beb6182104 chore(translations): localize to languages other than English (#8013)
Co-authored-by: GitHub Action <actions@github.com>
2025-03-24 16:24:15 +01:00
Miloš Paunović
7f0d3521db chore(ui): add anchors to plugin documentation (#8014) 2025-03-24 16:11:47 +01:00
benjoEK1337
7e4453632c fix(core): Handling for trailing slash in the KESTRA_URL configuration (#6373)
* fix(core): Handling for trailing slash in the KESTRA_URL configuration

* Update webserver/src/main/java/io/kestra/webserver/controllers/api/ExecutionController.java

---------

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
Co-authored-by: Loïc Mathieu <loikeseke@gmail.com>
2025-03-24 16:10:43 +01:00
Loïc Mathieu
4a3d6b30d2 feat(core,jdbc): reset the trigger inside the JdbcExecutor
Fixes #7237
2025-03-24 15:54:53 +01:00
Florian Hussonnois
fe7c14c048 chore: refactor StorageInterfaceFactory to be a bean
changes:
* extract class for ServiceType

related-to: kestra-io/kestra-ee#3021
2025-03-24 15:45:24 +01:00
Barthélémy Ledoux
7b007aafc0 feat: parse docs is 2 steps to avoid user waiting with nothing (#7149) 2025-03-24 15:25:46 +01:00
Barthélémy Ledoux
f6aa2729b2 feat: multi panel editor without the refactor (#7971)
* refactor: move logic out of EditorView.vue and into store flow.js

* fix create mode

* feat: add multi panel flow editor

* missing flow id

* fix helpers tests ?

* restore helpers test

* fix one failing test

* fix: remove non-working stories

* remove size when one does split

* fix duplicated simulation

* fix tests

* try and fix the test

* remove tests to make sure we merge
2025-03-24 15:13:26 +01:00
Nicolas K.
0ca25445fd fix(platform): move slf4j api to enforce platform to fix it's version in test (#8007)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-24 14:25:16 +01:00
Piyush Bhaskar
4900963cb9 fix(ui): amend task source tabs colors (#8010) 2025-03-24 14:01:48 +01:00
Piyush Bhaskar
21d264f444 chore(ui): highlight first item in global search bar autocomplete (#8009) 2025-03-24 13:43:27 +01:00
Miloš Paunović
b6a3d0cd54 chore(ui): removing dynamic section of collapsible plugin properties (#8008) 2025-03-24 13:11:29 +01:00
Bart Ledoux
3244b1c293 fix: remove unwanted change in Curl 2025-03-24 11:52:49 +01:00
Florian Hussonnois
0987d0b349 feat(core): add new subkey arg to secret pebble function
Add new `subkey` named argument to the pebble function `secret`
to be able to select a specific field inside a secret containing
a JSON value

close: kestra-io/kestra-ee#3200
2025-03-24 11:43:14 +01:00
dependabot[bot]
5a2ac895ec build(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.36.2 to 0.36.3.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.36.2...v0.36.3)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 11:14:10 +01:00
Loïc Mathieu
7421693445 fix(core): race while initializing trigger + possible duplicate update 2025-03-24 11:10:17 +01:00
Loïc Mathieu
19894dbcd6 fix(core): race in the FlowListener
It sometimes throw ConcurrentModificationException while sending flow updates to the consumers.
2025-03-24 11:10:17 +01:00
dependabot[bot]
62e37f3b15 build(deps): bump software.amazon.awssdk:bom from 2.31.1 to 2.31.6
Bumps software.amazon.awssdk:bom from 2.31.1 to 2.31.6.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 10:48:44 +01:00
dependabot[bot]
37af61f41d build(deps): bump com.github.oshi:oshi-core from 6.7.1 to 6.8.0
Bumps [com.github.oshi:oshi-core](https://github.com/oshi/oshi) from 6.7.1 to 6.8.0.
- [Release notes](https://github.com/oshi/oshi/releases)
- [Changelog](https://github.com/oshi/oshi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oshi/oshi/compare/oshi-parent-6.7.1...oshi-parent-6.8.0)

---
updated-dependencies:
- dependency-name: com.github.oshi:oshi-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 10:29:32 +01:00
dependabot[bot]
491f07296a build(deps): bump com.google.cloud:libraries-bom from 26.56.0 to 26.57.0
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/java-cloud-bom) from 26.56.0 to 26.57.0.
- [Release notes](https://github.com/googleapis/java-cloud-bom/releases)
- [Changelog](https://github.com/googleapis/java-cloud-bom/blob/main/release-please-config.json)
- [Commits](https://github.com/googleapis/java-cloud-bom/compare/v26.56.0...v26.57.0)

---
updated-dependencies:
- dependency-name: com.google.cloud:libraries-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 10:29:14 +01:00
dependabot[bot]
6d59630a67 build(deps): bump com.microsoft.playwright:playwright
Bumps [com.microsoft.playwright:playwright](https://github.com/microsoft/playwright-java) from 1.50.0 to 1.51.0.
- [Release notes](https://github.com/microsoft/playwright-java/releases)
- [Commits](https://github.com/microsoft/playwright-java/compare/v1.50.0...v1.51.0)

---
updated-dependencies:
- dependency-name: com.microsoft.playwright:playwright
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 10:28:36 +01:00
YannC
a098650559 fix(): restarting trigger does not break the list anymore (#8004)
close #7712
2025-03-24 10:21:19 +01:00
Barthélémy Ledoux
505049a69e refactor: move flow editor logic into flow store (#7968)
* refactor: move logic out of EditorView.vue and into store flow.js

* fix create mode

* missing flow id

* fix helpers tests ?

* restore helpers test

* remove unfinished test files

* fix plugin docs

* remove issues on lowcode
2025-03-24 09:48:17 +01:00
yuri1969
a1abd28a3d fix(build): Gradle space-assignment deprecation 2025-03-24 09:26:44 +01:00
yuri1969
49a29c4bf1 fix(core): amend server start announcements
Servers announced their start even when their async startup process
was still in progress. This lead to confusing situations - a server
announced a successfull start but in fact it failed just few
moments later.

Note, the log message needs to be ported to EE server impls.
2025-03-24 09:25:00 +01:00
Miloš Paunović
49af8f336a fix(ui): include parameters into request for plugin schema fetching (#8002) 2025-03-24 09:12:52 +01:00
Nicolas K.
8642771a2b fix(core): working dir interface contract by putting back putFile(path, content) (#7980)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-21 16:58:51 +01:00
Nicolas K.
e44487c8d8 feat(core): #7932 add file exist comportment to NamespaceFiles (#7979)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-21 15:17:12 +01:00
Ludovic DEHON
f29aab0719 feat(core): speed up namespace file download and add a log & metrics
close #7871
close #7870
2025-03-21 13:44:16 +01:00
Loïc Mathieu
73c7a2d3d3 feat(core): allow null or empty proxy address to bypass proxy conf
Fixes #7961
2025-03-21 12:36:11 +01:00
brian.mulier
773a6e9093 fix(ui): change plugin doc properly upon switching plugin type
closes #7876
2025-03-21 11:51:44 +01:00
Ludovic DEHON
df1bbcfb7f fix(cicd): display ui unit test status 2025-03-21 09:53:49 +01:00
brian.mulier
f3419084fa fix(ui): filter tests were not up-to-date 2025-03-21 09:49:07 +01:00
brian.mulier
ab7788aeaf feat(ui): introduce global KV Store view
part of kestra-io/kestra-ee#1257
closes kestra-io/kestra-ee#1743
2025-03-21 09:49:07 +01:00
YannC
99e06632e0 fix(): prevent using LABELS in JDBC
link #6655
2025-03-20 21:54:41 +01:00
YannC
7b3d5a593e fix(): remove old '$eq' to avoid error in dashboard
link #7959
2025-03-20 21:09:09 +01:00
Bart Ledoux
cca7ed0bff fix: update ui-libs 2025-03-20 18:33:56 +01:00
Loïc Mathieu
481138e433 fix(core): add metric Publish task doc & icon
fixes #7154
2025-03-20 16:24:38 +01:00
Barthélémy Ledoux
267ffb69dc fix: only run posthog in prod mode (#7952) 2025-03-20 14:40:47 +01:00
Loïc Mathieu
43f1374aa3 chore: add GraalVM plugin 2025-03-20 13:10:39 +01:00
Loïc Mathieu
fe944ccc5b chore: add jattach into our Docker image 2025-03-20 11:57:55 +01:00
YannC
cec8702fc6 feat(): allow to specify a parent namespace in the flow updates command, and the possibility to allow child namespace in the flow bulk create command (#7956) 2025-03-20 11:24:23 +01:00
YannC
f898a679c4 fix(): Adapt the usage of the new query filter for custom dashboard (#7935)
close #7091
2025-03-19 17:13:56 +01:00
Nicolas K.
9a9d59f433 fix(core-ee): NPE when execution labels are null (#7950)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-19 17:09:17 +01:00
Loïc Mathieu
0579e23a20 fix(core): triggers don't have an execution ID already 2025-03-19 15:39:08 +01:00
YannC
343367d8c5 feat(): save last dashboard used in local storage (#7948)
close kestra-io/kestra-ee#2615
2025-03-19 14:45:45 +01:00
Miloš Paunović
d47e8083ac fix(ui): prevent filter text prefix to show up when searching locally (#7947) 2025-03-19 13:51:24 +01:00
Miloš Paunović
7c4d6b02a7 chore(ui): introduce a refresh functionality to execution logs page (#7946) 2025-03-19 12:07:34 +01:00
Miloš Paunović
95dd1b8a55 chore(deps): regular dependency update (#7944) 2025-03-19 10:41:29 +01:00
Loïc Mathieu
0ec2d88429 Revert "build(deps): bump protobufVersion from 3.25.5 to 4.30.1"
This reverts commit 6946c92683.
2025-03-19 10:27:44 +01:00
dependabot[bot]
c3b504a9ed build(deps): bump pdfjs-dist from 4.10.38 to 5.0.375 in /ui (#7942)
Bumps [pdfjs-dist](https://github.com/mozilla/pdf.js) from 4.10.38 to 5.0.375.
- [Release notes](https://github.com/mozilla/pdf.js/releases)
- [Commits](https://github.com/mozilla/pdf.js/compare/v4.10.38...v5.0.375)

---
updated-dependencies:
- dependency-name: pdfjs-dist
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 10:25:58 +01:00
Loïc Mathieu
8cba4dab62 fix(core): possible NPE if no manifest 2025-03-19 10:03:12 +01:00
Miloš Paunović
1b22d1e3d1 fix(ui): amend dependabot errors with parsing of package-lock.json file (#7941) 2025-03-19 09:33:20 +01:00
Loïc Mathieu
6194f244c8 feat(core): require existing namespace
Part-of: https://github.com/kestra-io/kestra-ee/issues/3071
2025-03-18 15:56:36 +01:00
Loïc Mathieu
11a1664865 feat(*): allow disabling flow logs and use a specific logger for executions, tasks and triggers
Fixes #7753
2025-03-18 15:53:30 +01:00
Miloš Paunović
db394f6371 chore(ui): remove the flow topology control button from image export (#7937) 2025-03-18 15:32:21 +01:00
Loïc Mathieu
a7433c6f62 feat(core): add correlationId to the Flow trigger
Fixes #7920
2025-03-18 14:35:59 +01:00
Loïc Mathieu
745c64c4b0 feat(model, core): document tasks props that are internal storage URI
Fixes https://github.com/kestra-io/kestra/issues/681
2025-03-18 14:29:57 +01:00
YannC
5d15e2081c fix(*): Improve log timestamp precision + allow to override timestamp… (#7847)
* fix(*): Improve log timestamp precision + allow to override timestamp in log consumer

close #5915
close #7243
close #5662

* chore(): review changes
2025-03-18 14:25:24 +01:00
Miloš Paunović
7d098eaa4e feat(ui): add beta badge global component (#7934) 2025-03-18 11:56:43 +01:00
Florian Hussonnois
0ee9abb372 fix: OpenTelemetry should be optional
OpenTelementry must be optional when OTEL is globally disabled
in micronaut.
2025-03-18 10:34:23 +01:00
github-actions[bot]
3f542ae737 chore(translations): localize to languages other than English (#7929) 2025-03-18 10:20:49 +01:00
rajatsingh23
811cc7722a feat(ui): add the option to copy single/all logs to clipboard (#7755)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-03-18 09:49:54 +01:00
Florian Hussonnois
f4f8ecb247 feat!: make kv pebble function raise error by default (#7855)
BREAKING CHANGE: use 'true' as default value for kv function arg errorOnMissing.

close: #7855
2025-03-18 09:24:16 +01:00
Florian Hussonnois
3566c4d365 fix(cli): return exit 0 in CLI plugins cmd
The CLI plugins install command must return exit code 0
even when no plugin are installed
2025-03-18 09:23:58 +01:00
YannC
a7421987b7 chore(): change docker image used for AbstractTaskRunnerTest 2025-03-18 09:19:17 +01:00
ben8t
c640b8208b [fix] fix sleep assert comparison (#7924) 2025-03-18 09:16:20 +01:00
ben8t
db71b56dcd Update documentation Switch core task (#6792) 2025-03-18 09:13:39 +01:00
Florian Hussonnois
8076fcc990 fix: disable micronaut otel by default 2025-03-18 08:47:19 +01:00
Miloš Paunović
bd520c2150 fix(ui): amend displaying large amount of logs (#7923)
* chore(ui): amend plugin documentation console errors

* fix(ui): amend displaying large amount of logs
2025-03-18 08:35:55 +01:00
Florian Hussonnois
2c731a0192 fix(core): avoid ClassCastException when parsing flow inputs (#7882)
Use toString() instead of casting objects directly to String
to avoid undesirable ClasCastException we expect a string type

close: #7882
2025-03-17 14:48:15 +01:00
github-actions[bot]
3b291b75cf chore(translations): localize to languages other than English (#7918) 2025-03-17 14:23:48 +01:00
Miloš Paunović
1563d1d2da feat(ui): implement a default tab setting for flows (#7917) 2025-03-17 13:44:09 +01:00
dependabot[bot]
5c73953c81 build(deps): bump org.aspectj:aspectjweaver from 1.9.22.1 to 1.9.23
Bumps [org.aspectj:aspectjweaver](https://github.com/eclipse/org.aspectj) from 1.9.22.1 to 1.9.23.
- [Release notes](https://github.com/eclipse/org.aspectj/releases)
- [Commits](https://github.com/eclipse/org.aspectj/commits)

---
updated-dependencies:
- dependency-name: org.aspectj:aspectjweaver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 13:16:50 +01:00
dependabot[bot]
f89aa8d278 build(deps): bump org.slf4j:slf4j-api from 2.0.16 to 2.0.17
Bumps org.slf4j:slf4j-api from 2.0.16 to 2.0.17.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 13:16:41 +01:00
github-actions[bot]
7efa3975fc chore(translations): localize to languages other than English (#7915) 2025-03-17 12:54:11 +01:00
Miloš Paunović
a3362b0c85 chore(ui): properly sanitize execution errors markdown content before rendering (#7914) 2025-03-17 12:52:02 +01:00
dependabot[bot]
ab9ba91e5a build(deps): bump org.jooq:jooq from 3.19.18 to 3.20.2
Bumps org.jooq:jooq from 3.19.18 to 3.20.2.

---
updated-dependencies:
- dependency-name: org.jooq:jooq
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 12:04:50 +01:00
Loïc Mathieu
355e24c9da chore(core): merge outputs only when necessary 2025-03-17 11:36:59 +01:00
github-actions[bot]
78dcca64ae chore(translations): localize to languages other than English (#7909) 2025-03-17 11:28:11 +01:00
Anna Geller
57c749d812 Revert "Adjusted the CI to skip frontend and backend tests for commits/PRs co…" (#7910)
This reverts commit 71a59e7b85.
2025-03-17 11:18:15 +01:00
Ash
2d7c233a5e chore(ui): improve charts horizontal scrollbar (#7508) 2025-03-17 10:48:16 +01:00
Piyush Bhaskar
cfac2c6fef chore(ui): change display on gantt page for created & queued executions (#7706) 2025-03-17 10:31:40 +01:00
Piyush Bhaskar
06352e46dc chore(ui): use the correct shadow on charts (#7752) 2025-03-17 10:22:55 +01:00
Piyush Bhaskar
08312aef97 chore(ui): show loading skeletons on dashboard (#7417) 2025-03-17 10:19:50 +01:00
github-actions[bot]
e05554e12d chore(translations): localize to languages other than English (#7908) 2025-03-17 10:10:57 +01:00
Miloš Paunović
cbb6ca77f7 feat(ui): add copy button to kv store listing rows (#7907) 2025-03-17 09:59:11 +01:00
dependabot[bot]
3dcd3c9785 build(deps): bump nl.basjes.gitignore:gitignore-reader
Bumps [nl.basjes.gitignore:gitignore-reader](https://github.com/nielsbasjes/codeowners) from 1.11.1 to 1.11.3.
- [Release notes](https://github.com/nielsbasjes/codeowners/releases)
- [Changelog](https://github.com/nielsbasjes/codeowners/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nielsbasjes/codeowners/compare/v1.11.1...v1.11.3)

---
updated-dependencies:
- dependency-name: nl.basjes.gitignore:gitignore-reader
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:52:28 +01:00
dependabot[bot]
7f6e15ec4a build(deps): bump aquasecurity/trivy-action from 0.29.0 to 0.30.0
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.29.0 to 0.30.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.29.0...0.30.0)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:51:53 +01:00
dependabot[bot]
ab061e9a12 build(deps): bump dorny/test-reporter from 1 to 2
Bumps [dorny/test-reporter](https://github.com/dorny/test-reporter) from 1 to 2.
- [Release notes](https://github.com/dorny/test-reporter/releases)
- [Changelog](https://github.com/dorny/test-reporter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dorny/test-reporter/compare/v1...v2)

---
updated-dependencies:
- dependency-name: dorny/test-reporter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:51:41 +01:00
dependabot[bot]
8eb91b75e9 build(deps): bump com.github.oshi:oshi-core from 6.7.0 to 6.7.1
Bumps [com.github.oshi:oshi-core](https://github.com/oshi/oshi) from 6.7.0 to 6.7.1.
- [Release notes](https://github.com/oshi/oshi/releases)
- [Changelog](https://github.com/oshi/oshi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oshi/oshi/compare/oshi-parent-6.7.0...oshi-parent-6.7.1)

---
updated-dependencies:
- dependency-name: com.github.oshi:oshi-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:51:30 +01:00
dependabot[bot]
0134d5e5c2 build(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.36.1 to 0.36.2.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.36.1...v0.36.2)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:51:18 +01:00
dependabot[bot]
6946c92683 build(deps): bump protobufVersion from 3.25.5 to 4.30.1
Bumps `protobufVersion` from 3.25.5 to 4.30.1.

Updates `com.google.protobuf:protobuf-java` from 3.25.5 to 4.30.1
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.25.5...v4.30.1)

Updates `com.google.protobuf:protobuf-java-util` from 3.25.5 to 4.30.1

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: com.google.protobuf:protobuf-java-util
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:50:36 +01:00
dependabot[bot]
149dcac5f9 build(deps): bump software.amazon.awssdk:bom from 2.30.36 to 2.31.1
Bumps software.amazon.awssdk:bom from 2.30.36 to 2.31.1.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:50:27 +01:00
Miloš Paunović
0af5aea287 chore(ui): create flow button on welcome page to start product tour (#7906) 2025-03-17 08:40:57 +01:00
Barthélémy Ledoux
9413d4df06 fix(ui): use container queries for dashboard (#7889) 2025-03-17 08:24:39 +01:00
Miloš Paunović
87ee267f10 chore(ui): complete refactor of yaml utils (#7888) 2025-03-17 08:14:48 +01:00
Will Russell
02336ed397 fix(docs): typos 2025-03-14 19:04:38 +00:00
Will Russell
379199e186 fix(docs): fail examples 2025-03-14 18:47:57 +00:00
Will Russell
ebec8c2121 fix(docs): schedule example 2025-03-14 18:41:36 +00:00
Malay Dewangan
564c36ceab fix: remove labels from an execution (#7256)
* fix: remove labels from an execution

* feat(test): add test for removing labels from execution

* fix(test): update test for removing labels from execution

* feat: handle system labels and add unit test for system labels

---------

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-03-14 15:19:29 +01:00
Miloš Paunović
3d248d0d74 refactor(ui): remove the obsolete console statement (#7887) 2025-03-14 15:00:35 +01:00
Loïc Mathieu
70e6d47c1a feat(webserver): add Kestra URL to the config endpoint 2025-03-14 14:57:52 +01:00
Loïc Mathieu
1ba54cd08e feat(core): add Kestra env name and URL to the expression context 2025-03-14 14:57:52 +01:00
Florian Hussonnois
eb6b40a04b feat(cli): add new --all option to plugin install cmd (#7375)
This commit adds the option all to the plugin install command
for installing all available public plugins.

Changes:
* add new service class PluginCatalogService

close: #7375
2025-03-14 14:44:30 +01:00
Anna Geller
d314c52924 docs: kv pebble (#7886) 2025-03-14 14:31:52 +01:00
Trinaya Kantevari
71a59e7b85 Adjusted the CI to skip frontend and backend tests for commits/PRs containing the 'docs-only' text. #6729 (#7756)
* Update pull-request.yml to skip tests for PRs with 'docs-only'.

Updated the if condition in the frontend and backend jobs to skip tests if 'docs-only' is present in the Pull Request title, body, or labels.

* Update workflow-test.yml to skip tests for commits with 'docs-only'.

Updated the if condition in the frontend and backend jobs to skip tests if 'docs-only' is present in the commit message.

* Apply suggestions from code review

---------

Co-authored-by: Anna Geller <anna.m.geller@gmail.com>
2025-03-14 14:29:26 +01:00
Will Russell
ff504afd8f fix(docs): add parallel example 2025-03-14 12:37:00 +00:00
YannC
64e5b80049 fix(ui): display back core property if not in a task
close #7879
2025-03-14 11:44:22 +01:00
Loïc Mathieu
c9baaf8565 fix(core): Avoid calling Worker post construct method twice 2025-03-14 09:58:30 +01:00
Miloš Paunović
02ad2af305 chore(ui): re-organize visuals for empty state component (#7875) 2025-03-14 08:46:57 +01:00
Florian Hussonnois
bed11f1541 chore(core): add PluginVersioning interface and version for TaskRunner
Changes:
- add new interface PluginVersioning
- update interfaces TaskInterface, TriggerInterface, TaskRunner

close: kestra-io/kestra-ee#3122
2025-03-14 08:26:52 +01:00
Miloš Paunović
6d14773ea7 chore(ui): prevent node state history to be shown if there is no date present (#7867) 2025-03-13 16:26:25 +01:00
Loïc Mathieu
74577cb059 chore(deps): upgrade @kestra-io/ui-libs to 0.0.157 2025-03-13 15:50:45 +01:00
Miloš Paunović
e63b019857 chore(ui): re-organize visuals for empty state component (#7866) 2025-03-13 15:18:29 +01:00
github-actions[bot]
8684bd9481 chore(translations): localize to languages other than English (#7863) 2025-03-13 14:36:31 +01:00
Miloš Paunović
586e089ada feat(ui): add afterExecution block to no code editor (#7848) 2025-03-13 13:53:52 +01:00
Loïc Mathieu
acebfef0d1 fix(deps): move OTLP metrics lib to CLI to avoid warning in tests 2025-03-13 13:05:20 +01:00
Loïc Mathieu
f7019af9d5 feat(core): add afterExecution to the topology 2025-03-13 13:02:34 +01:00
Loïc Mathieu
1419680006 fix(core): missing afterExecution in FlowForExecution 2025-03-13 13:02:34 +01:00
Shruti Mantri
64290f5d17 feat: add finally to the flow assets in basic.md (#7857) 2025-03-13 10:27:43 +01:00
Loïc Mathieu
e2da2dfeb0 fix(core): allowedNamespace is already called in the KvStoreService 2025-03-12 16:37:16 +01:00
Will Russell
977fe222a4 fix(docs): 2025 get started video 2025-03-12 13:11:18 +00:00
ben8t
0a24a5d13f Remove pebble function references that don't exist (#7698)
* [fix] remove pebble function references that don't exist

* [fix] pebble documentation

* [fix] remove non-existing functions
2025-03-12 12:23:22 +01:00
Loïc Mathieu
ecfe925ece feat(core): redact KESTRA_JAVA_OPTS from the env available to executions 2025-03-12 11:31:53 +01:00
dependabot[bot]
76f6c93e48 build(deps): bump @babel/runtime-corejs3 from 7.26.9 to 7.26.10 in /ui (#7840)
Bumps [@babel/runtime-corejs3](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime-corejs3) from 7.26.9 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime-corejs3)

---
updated-dependencies:
- dependency-name: "@babel/runtime-corejs3"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-12 08:43:56 +01:00
dependabot[bot]
cfb76f4279 build(deps): bump @babel/helpers from 7.26.9 to 7.26.10 in /ui (#7841)
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.26.9 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-12 08:43:18 +01:00
Miloš Paunović
50bbf03d53 chore(deps): regular dependency update (#7839) 2025-03-12 08:29:38 +01:00
Loïc Mathieu
2c9f09a82e feat(build): configure heap size to max 50% of available memory (#7800)
* feat(build): configure heap size to max 50% of available memory

* Apply suggestions from code review

Co-authored-by: brian-mulier-p <bmmulier@hotmail.fr>

---------

Co-authored-by: brian-mulier-p <bmmulier@hotmail.fr>
2025-03-11 16:38:51 +01:00
github-actions[bot]
c9579e5dcd chore(translations): localize to languages other than English (#7803)
Co-authored-by: GitHub Action <actions@github.com>
2025-03-11 16:34:42 +01:00
Miloš Paunović
1b13559a61 chore(ui): add the ability to change word wrap and to copy the preview output content (#7801) 2025-03-11 15:12:51 +01:00
Loïc Mathieu
c2e62d653d feat(core,jdbc): switch back to a cached thread pool for async JDBC queue
But with less threads as 2xnbCore was too much.
2025-03-11 14:25:32 +01:00
Bart Ledoux
14ff4438fe chore: update ui-libs 2025-03-11 14:06:59 +01:00
Loïc Mathieu
39b8fc1039 feat(core): afterExecution tasks
Fixes https://github.com/kestra-io/kestra-ee/issues/2792
2025-03-11 13:35:08 +01:00
Florian Hussonnois
1cb323b7aa fix(core): fix properly map MavenPluginRepositoryConfig 2025-03-11 13:17:23 +01:00
brian.mulier
4a12827684 fix(ui): remove errors from dashboard validation if it's fixed
closes #7748
2025-03-11 12:26:50 +01:00
brian.mulier
82a346b2ce fix(ui): make switch view buttons from dashboard editor the same as flow editor ones 2025-03-11 12:23:18 +01:00
dependabot[bot]
dea392a941 build(deps): bump io.micrometer:micrometer-core from 1.14.3 to 1.14.5
Bumps [io.micrometer:micrometer-core](https://github.com/micrometer-metrics/micrometer) from 1.14.3 to 1.14.5.
- [Release notes](https://github.com/micrometer-metrics/micrometer/releases)
- [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.3...v1.14.5)

---
updated-dependencies:
- dependency-name: io.micrometer:micrometer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 11:22:43 +01:00
Loïc Mathieu
d0af5767d5 feat(core): add execution state in Pebbe context
Fixes #7155
2025-03-11 11:21:50 +01:00
brian.mulier
a064c7a956 feat(ui): introduce kv() and secret() pebble autocompletions
closes kestra-io/kestra-ee#77
2025-03-11 00:10:29 +01:00
brian.mulier
9b5b2b981f fix(webserver): add endpoint for inherited secrets 2025-03-10 23:42:33 +01:00
YannC
fac2ae813c fix(jdbc): return correct total when paginating custom dashboard chart (#7790)
close #7164
2025-03-10 18:05:44 +01:00
Nicolas K.
233a871c58 feat(core-ee): add json format to file log exporter (#7789)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-10 17:47:51 +01:00
Nicolas K.
05f24f3d65 fix(core): #7740 http configuration bearer token may change to basic because of allowFailed (#7788)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-10 16:33:15 +01:00
dependabot[bot]
66e5a7ca31 build(deps): bump software.amazon.awssdk:bom from 2.30.31 to 2.30.36
Bumps software.amazon.awssdk:bom from 2.30.31 to 2.30.36.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:48:03 +01:00
dependabot[bot]
fefaa7cdbb build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.5 to 1.20.6.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.5...1.20.6)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:47:46 +01:00
YannC
fd6b9dc065 fix(tests): increase seconds diff between dates (#7785) 2025-03-10 15:08:20 +01:00
dependabot[bot]
5935308e43 build(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.34.0 to 0.36.1.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.34.0...v0.36.1)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:02:29 +01:00
dependabot[bot]
83f06f3374 build(deps): bump org.jsoup:jsoup from 1.18.3 to 1.19.1
Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.18.3 to 1.19.1.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.18.3...jsoup-1.19.1)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:02:19 +01:00
dependabot[bot]
8d7bc6fdd4 build(deps): bump com.github.docker-java:docker-java from 3.4.1 to 3.4.2
Bumps [com.github.docker-java:docker-java](https://github.com/docker-java/docker-java) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/docker-java/docker-java/releases)
- [Changelog](https://github.com/docker-java/docker-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/docker-java/docker-java/compare/3.4.1...3.4.2)

---
updated-dependencies:
- dependency-name: com.github.docker-java:docker-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:01:44 +01:00
dependabot[bot]
03a44c1039 build(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.21.0 to 2.22.0.
- [Release notes](https://github.com/opensearch-project/opensearch-java/releases)
- [Changelog](https://github.com/opensearch-project/opensearch-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/opensearch-project/opensearch-java/compare/v2.21.0...v2.22.0)

---
updated-dependencies:
- dependency-name: org.opensearch.client:opensearch-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:00:59 +01:00
dependabot[bot]
5af0858445 build(deps): bump org.testcontainers:junit-jupiter from 1.20.5 to 1.20.6
Bumps [org.testcontainers:junit-jupiter](https://github.com/testcontainers/testcontainers-java) from 1.20.5 to 1.20.6.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.5...1.20.6)

---
updated-dependencies:
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:00:31 +01:00
dependabot[bot]
0a304ff1d3 build(deps): bump com.gorylenko.gradle-git-properties
Bumps com.gorylenko.gradle-git-properties from 2.4.2 to 2.5.0.

---
updated-dependencies:
- dependency-name: com.gorylenko.gradle-git-properties
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 15:00:13 +01:00
dependabot[bot]
92418841fc build(deps): bump com.azure:azure-sdk-bom from 1.2.31 to 1.2.32
Bumps [com.azure:azure-sdk-bom](https://github.com/azure/azure-sdk-for-java) from 1.2.31 to 1.2.32.
- [Release notes](https://github.com/azure/azure-sdk-for-java/releases)
- [Commits](https://github.com/azure/azure-sdk-for-java/compare/azure-sdk-bom_1.2.31...azure-sdk-bom_1.2.32)

---
updated-dependencies:
- dependency-name: com.azure:azure-sdk-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 14:59:56 +01:00
Florian Hussonnois
01036c829d fix(core): wait for service-manager-task thread to be stopped 2025-03-10 14:22:38 +01:00
Loïc Mathieu
5ffeee532c fix(jdbc): flaky tests JdbcServiceLivenessCoordinatorTest 2025-03-10 12:38:56 +01:00
Loïc Mathieu
c606760522 chore(core): disable OTLP metrics on tests 2025-03-10 12:38:56 +01:00
Loïc Mathieu
0870d8ebd8 fix(core): flaky test ExitTest.shouldExitAndKillTheExecution() 2025-03-10 12:38:56 +01:00
Florian Hussonnois
d2d0726f73 fix(cli): fix double shutdown warn messages
Changes:
- Avoid registering two shutdown-hooks that will both log the
shutdown message - leading to some confusion
- Some code cleanup/refactoring
2025-03-10 12:31:06 +01:00
Nicolas K.
868a232527 fix(core): failing schedule test (#7783)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-10 12:03:11 +01:00
Loïc Mathieu
3ef11044a2 feat(core): custom log filter
Since Logback 1.5.13, there is no more default implementation for the EvaluatorFilter so we need to supply our own.
See https://logback.qos.ch/manual/filters.html#evaluatorFilter
2025-03-10 10:56:13 +01:00
Miloš Paunović
2d1582f761 chore(ui): respect line numbers prop as part of editor options (#7781) 2025-03-10 10:34:15 +01:00
github-actions[bot]
94d36fdc01 chore(translations): localize to languages other than English (#7780) 2025-03-10 10:13:49 +01:00
dependabot[bot]
0388909828 build(deps): bump robinraju/release-downloader from 1.11 to 1.12
Bumps [robinraju/release-downloader](https://github.com/robinraju/release-downloader) from 1.11 to 1.12.
- [Release notes](https://github.com/robinraju/release-downloader/releases)
- [Commits](https://github.com/robinraju/release-downloader/compare/v1.11...v1.12)

---
updated-dependencies:
- dependency-name: robinraju/release-downloader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:55:11 +01:00
Miloš Paunović
ff4f43c39b chore(ui): re-order namespace tabs (#7778) 2025-03-10 09:38:51 +01:00
Miloš Paunović
140d058beb chore(ui): remove single empty space between label key and value so it can be copied (#7774) 2025-03-10 08:08:22 +01:00
Loïc Mathieu
4276a0afd9 Revert "fix(core): ThresholdFilter is now stricly lower"
This reverts commit bd82f5e3b6.
2025-03-07 18:12:33 +01:00
Loïc Mathieu
1692cab533 feat(core): add outputs to the Flow trigger
Fixes #6848
2025-03-07 18:10:00 +01:00
Nicolas K.
3013e9dfd5 feat(core): #5467 add namespaces in the namespaceFiles parameter (#7749)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-07 17:18:45 +01:00
brian.mulier
440a942900 fix(ci): generate_translations.py is now deleting keys that are no longer in en translation to avoid ghost translations 2025-03-07 16:49:45 +01:00
Loïc Mathieu
7696d41d5f fix(jdbc): resubmit worker job to the good worker group
Fixes #7730
2025-03-07 16:44:28 +01:00
github-actions[bot]
45abaa146e chore(translations): localize to languages other than English (#7746)
Co-authored-by: GitHub Action <actions@github.com>
2025-03-07 14:57:33 +01:00
Loïc Mathieu
e9f2711cd3 feat(core): handle worker group fallback inside the scheduler 2025-03-07 14:48:02 +01:00
brian.mulier
166262209a fix(tests): reject promise with 404 instead of empty resolve if non-mocked store call in flowAutoCompletionProvider.spec.ts 2025-03-07 14:01:37 +01:00
Miloš Paunović
99bad6abb0 chore(ui): use uniformed pagination component for custom dashboard tables (#7744) 2025-03-07 13:39:40 +01:00
Barthélémy Ledoux
acc10ed638 fix(flow editor): enhance behavior when switching file tabs (#7722)
* fix(flow editor): when opening a new file and coming back to flow, validation + lowcode are broken

* fix: sync flowYaml only onEdit

* fix: files can now be saved again

* fix: make editor saving button ready for better ux

* allow for a bit of time for storybook to launch the inputs story

* add storybook for flow editor

* setup storybook
2025-03-07 11:29:54 +01:00
Loïc Mathieu
88341bb5c9 feat(webserver): mask the secret() function result from eval outputs
Fixes https://github.com/kestra-io/kestra-ee/issues/3073
2025-03-07 11:26:28 +01:00
brian-mulier-p
e8411b6b11 refacto(ui): move autocompletion to its own service (#7710)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2025-03-07 10:46:44 +01:00
github-actions[bot]
6af105a8bf chore(translations): localize to languages other than English (#7739)
Co-authored-by: GitHub Action <actions@github.com>
2025-03-07 10:14:51 +01:00
Miloš Paunović
9a2e09cc8c chore(ui): uniforming empty state for components (#7737) 2025-03-07 09:11:16 +01:00
Nicolas K.
9b1a9d64bc feat(core): #7721 add namespace to pebble file functions (#7729)
* feat(core): #7721 add namespace to pebble file functions

* clean(core): #7721 extract tenantId only once

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-06 18:05:19 +01:00
Bart Ledoux
4678616520 fix: repair collapsed menu submenus 2025-03-06 17:12:24 +01:00
Bart Ledoux
07e4598fa4 fix(demo): on pages stop showing the docs without a button
closes #7726
2025-03-06 16:54:52 +01:00
YannC
01fe48b47a fix(ui): improved fetch of type for pluginDoc and avoid removing doc if map has "type" as property but without doc (like ENUM value) (#7727)
close #6101
close #7708
2025-03-06 16:47:04 +01:00
YannC
f7e61a46df feat(core): add new crudEventType value 2025-03-06 15:49:45 +01:00
Loïc Mathieu
dfe5552a1e feat(core): allow reading file from any namespaces
Fixes https://github.com/kestra-io/kestra-ee/issues/1934
2025-03-06 15:36:24 +01:00
YannC
593558dd22 fix(runner-memory): delete MemorySchedulerTriggerState back due to cherry-pick 2025-03-06 15:28:29 +01:00
Miloš Paunović
b22764290e chore(ui): properly sanitize markdown content before rendering (#7724) 2025-03-06 15:13:10 +01:00
YannC
78bfbf0d5e fix(): align to EE 2025-03-06 14:13:06 +01:00
ben8t
f505f29360 Add core plugin sanitychecks (#7592)
* [feature] add sanitychecks

* [feature] add dag sanitychecks

* [fix] use assert

* [fix] use assert

* [feature] add for each sanity
2025-03-06 13:43:54 +01:00
ben8t
1726347dbf change email oss auth default (#7717) 2025-03-06 10:47:24 +01:00
Miloš Paunović
bbf232ba52 fix(ui): prevent context docs open on editor custom blueprints click (#7716) 2025-03-06 09:53:54 +01:00
yuri1969
8f9fc5fe4b fix(core): stop Docker runner gracefully 2025-03-06 09:34:11 +01:00
Ludovic DEHON
9a56b763f4 chore(core): make registry unregister usable with immutable list 2025-03-06 08:48:36 +01:00
Miloš Paunović
40d37d9e42 chore(ui): auto expand first element in execution overview cascaders (#7715) 2025-03-06 08:48:22 +01:00
Florian Hussonnois
e200bbdb6b fix(cli): fix regression on CLI plugin doc cmd 2025-03-05 21:24:09 +01:00
brian.mulier
ef65623b13 fix(core): avoid duplicates in plugins subgroups + properly retrieve subgroup title 2025-03-05 18:36:45 +01:00
Nicolas K.
d8b2e92e8d feat(core-ee): #2838 add audit log shipper (#7701)
* feat(core-ee): #2838 add audit log shipper

* fix: scheduler flacky tests

* feat(core-ee): add pretty string audit log and clean PR

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-05 16:30:11 +01:00
Loïc Mathieu
2c63112a59 feat(core, jdbc): dynamic worker group key
Fixes https://github.com/kestra-io/kestra-ee/issues/3064
2025-03-05 15:37:01 +01:00
dependabot[bot]
20b87f1c9c build(deps): bump jacksonVersion from 2.18.2 to 2.18.3
Bumps `jacksonVersion` from 2.18.2 to 2.18.3.

Updates `com.fasterxml.jackson:jackson-bom` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.18.2...jackson-bom-2.18.3)

Updates `com.fasterxml.jackson.core:jackson-core` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.18.2...jackson-core-2.18.3)

Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.core:jackson-annotations` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.module:jackson-module-parameter-names` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-modules-java8/compare/jackson-modules-java8-2.18.2...jackson-modules-java8-2.18.3)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-yaml` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-dataformats-text/compare/jackson-dataformats-text-2.18.2...jackson-dataformats-text-2.18.3)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-smile` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-dataformats-binary/compare/jackson-dataformats-binary-2.18.2...jackson-dataformats-binary-2.18.3)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-cbor` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-dataformats-binary/compare/jackson-dataformats-binary-2.18.2...jackson-dataformats-binary-2.18.3)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-ion` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-dataformat-ion/commits)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-xml` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.18.2...jackson-dataformat-xml-2.18.3)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-guava` from 2.18.2 to 2.18.3
- [Commits](https://github.com/FasterXML/jackson-datatypes-collections/compare/jackson-datatypes-collections-2.18.2...jackson-datatypes-collections-2.18.3)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.18.2 to 2.18.3

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jdk8` from 2.18.2 to 2.18.3

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson:jackson-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.module:jackson-module-parameter-names
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-smile
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-cbor
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-ion
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 15:36:23 +01:00
dependabot[bot]
ca4e6a4b33 build(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/opensearch-project/opensearch-java/releases)
- [Changelog](https://github.com/opensearch-project/opensearch-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/opensearch-project/opensearch-java/compare/v2.20.0...v2.21.0)

---
updated-dependencies:
- dependency-name: org.opensearch.client:opensearch-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 13:11:00 +01:00
dependabot[bot]
82df58d26f build(deps): bump com.google.cloud:libraries-bom from 26.54.0 to 26.56.0
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/java-cloud-bom) from 26.54.0 to 26.56.0.
- [Release notes](https://github.com/googleapis/java-cloud-bom/releases)
- [Changelog](https://github.com/googleapis/java-cloud-bom/blob/main/release-please-config.json)
- [Commits](https://github.com/googleapis/java-cloud-bom/compare/v26.54.0...v26.56.0)

---
updated-dependencies:
- dependency-name: com.google.cloud:libraries-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 12:28:30 +01:00
dependabot[bot]
b6f91128a1 build(deps): bump opensearchRestVersion from 2.18.0 to 2.19.1
Bumps `opensearchRestVersion` from 2.18.0 to 2.19.1.

Updates `org.opensearch.client:opensearch-rest-client` from 2.18.0 to 2.19.1
- [Release notes](https://github.com/opensearch-project/OpenSearch/releases)
- [Changelog](https://github.com/opensearch-project/OpenSearch/blob/main/CHANGELOG-3.0.md)
- [Commits](https://github.com/opensearch-project/OpenSearch/compare/2.18.0...2.19.1)

Updates `org.opensearch.client:opensearch-rest-high-level-client` from 2.18.0 to 2.19.1
- [Release notes](https://github.com/opensearch-project/OpenSearch/releases)
- [Changelog](https://github.com/opensearch-project/OpenSearch/blob/main/CHANGELOG-3.0.md)
- [Commits](https://github.com/opensearch-project/OpenSearch/compare/2.18.0...2.19.1)

---
updated-dependencies:
- dependency-name: org.opensearch.client:opensearch-rest-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.opensearch.client:opensearch-rest-high-level-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 12:15:10 +01:00
Miloš Paunović
a7abc17c0b chore(deps): regular dependency update (#7705) 2025-03-05 12:01:18 +01:00
Miloš Paunović
9607d0152e chore(ui): properly sanitize markdown content before rendering (#7697) 2025-03-05 08:17:02 +01:00
AJ Emerich
fc3c1a4c54 docs: fix typo in storage reverse task title (#7667) 2025-03-04 18:31:56 +01:00
Miloš Paunović
4cee4fca61 chore(ui): make sure chart stacks are following the same order every time (#7664) 2025-03-04 15:22:14 +01:00
Miloš Paunović
475573d13e feat(ui): add markdown formatting to flow run dialog (#7663) 2025-03-04 14:34:15 +01:00
Miloš Paunović
cfac9f339f chore(ui): properly sanitize markdown content before rendering (#7662) 2025-03-04 14:02:07 +01:00
Loïc Mathieu
cd97705d87 feat(core, jdbc): DashboardRepository.findAll() 2025-03-04 11:03:31 +01:00
Nicolas K.
56406c6b5c feat(#7636): add default options for HttpClient (#7650)
* feat(#7636): add default options for HttpClient

* fix(webserver): flacky execution controller tests

* fix(webserver): flacky execution controller tests

* fix(webserver): flacky execution controller tests

* fix(webserver): rework executor controller kill test

* fix(webserver): rework executor controller kill test

* fix(webserver): rework executor controller kill test

* fix(webserver): rework executor controller kill test

* fix(webserver): rework executor controller kill test

* fix(webserver): rework executor controller kill test

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-03-04 10:02:10 +01:00
YannC
38921a265a chore(deps): upgrade ui-libs version to v0.0.154 2025-03-03 22:11:53 +01:00
Shruti Mantri
be61869642 feat: add example for expression condition (#7660) 2025-03-03 18:22:49 +01:00
Shruti Mantri
1f09afe564 feat: add examples for flow conditions (#7659) 2025-03-03 17:52:56 +01:00
Shruti Mantri
35a0520dba feat: add examples for conditions - 3 (#7657)
Co-authored-by: AJ Emerich <aemerich@kestra.io>
2025-03-03 17:52:20 +01:00
YannC
cf6fad0896 fix(): avoid crash on injectDefault 2025-03-03 17:42:21 +01:00
Miloš Paunović
af0c1134e1 chore(ui): improve the topology tooltip label for adding task button (#7656) 2025-03-03 16:14:40 +01:00
Loïc Mathieu
12180457ea fix(core): MultipleCondition documentation 2025-03-03 15:14:55 +01:00
Loïc Mathieu
1eb9adf30a fix(core): validation error when timeWindow.type is null 2025-03-03 15:14:55 +01:00
dependabot[bot]
e7f2ec2aee build(deps): bump software.amazon.awssdk:bom from 2.30.16 to 2.30.31
Bumps software.amazon.awssdk:bom from 2.30.16 to 2.30.31.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 15:06:43 +01:00
dependabot[bot]
94421f141e build(deps): bump org.owasp.dependencycheck from 12.0.2 to 12.1.0
Bumps org.owasp.dependencycheck from 12.0.2 to 12.1.0.

---
updated-dependencies:
- dependency-name: org.owasp.dependencycheck
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 14:36:41 +01:00
dependabot[bot]
65b071adfd chore(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.4 to 1.20.5.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.4...1.20.5)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 14:31:35 +01:00
Ludovic DEHON
d2bf56fecf fix(cicd): missing acls for test reports 2025-03-03 14:17:45 +01:00
dependabot[bot]
998a5cca32 chore(deps): bump flyingSaucerVersion from 9.11.3 to 9.11.4
Bumps `flyingSaucerVersion` from 9.11.3 to 9.11.4.

Updates `org.xhtmlrenderer:flying-saucer-core` from 9.11.3 to 9.11.4
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.3...v9.11.4)

Updates `org.xhtmlrenderer:flying-saucer-pdf` from 9.11.3 to 9.11.4
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.3...v9.11.4)

---
updated-dependencies:
- dependency-name: org.xhtmlrenderer:flying-saucer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.xhtmlrenderer:flying-saucer-pdf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 14:15:30 +01:00
dependabot[bot]
4b48ad597d build(deps): bump nl.basjes.gitignore:gitignore-reader
Bumps [nl.basjes.gitignore:gitignore-reader](https://github.com/nielsbasjes/codeowners) from 1.10.0 to 1.11.1.
- [Release notes](https://github.com/nielsbasjes/codeowners/releases)
- [Changelog](https://github.com/nielsbasjes/codeowners/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nielsbasjes/codeowners/compare/v1.10.0...v1.11.1)

---
updated-dependencies:
- dependency-name: nl.basjes.gitignore:gitignore-reader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 14:14:41 +01:00
dependabot[bot]
66fdb58f4b build(deps): bump com.github.oshi:oshi-core from 6.6.6 to 6.7.0
Bumps [com.github.oshi:oshi-core](https://github.com/oshi/oshi) from 6.6.6 to 6.7.0.
- [Release notes](https://github.com/oshi/oshi/releases)
- [Changelog](https://github.com/oshi/oshi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oshi/oshi/compare/oshi-parent-6.6.6...oshi-parent-6.7.0)

---
updated-dependencies:
- dependency-name: com.github.oshi:oshi-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 14:14:27 +01:00
Loïc Mathieu
8c708e2d53 feat(core): improve merging outputs by merging them at the task level 2025-03-03 13:57:48 +01:00
Loïc Mathieu
677585213a feat(core): use HashMap.newHashMap(int) 2025-03-03 13:57:48 +01:00
Loïc Mathieu
ff3f90465d feat(core): replace new ArrayList by Collections.emptyList() 2025-03-03 13:57:48 +01:00
YannC
8f5189df49 fix(): recoverMissedSchedules behavior on long running executions (#7617)
* fix(): handle missed scheduled for long running execution

close #7549

* tests(core): add test for backfill last/none on long running execution

* fix(): review pr

* fix(): shorter test

* fix(): fix tests and add missing getStopAfter

* tests(): fix scheduler tests
2025-03-03 13:14:16 +01:00
Miloš Paunović
9446eefd94 fix(ui): make sure adding labels on flow run dialog is possible (#7652) 2025-03-03 11:29:35 +01:00
YannC
334410ab58 fix(): make subflow not found a warning instead of an error (#7649) 2025-03-03 10:38:28 +01:00
nKwiatkowski
7ccb97a963 Revert "feat(#7636): add default options for HttpClient"
This reverts commit 5b42d0adba.
2025-03-03 10:09:08 +01:00
nKwiatkowski
3957177455 Merge remote-tracking branch 'origin/develop' into develop 2025-03-03 10:05:13 +01:00
nKwiatkowski
5b42d0adba feat(#7636): add default options for HttpClient 2025-03-03 10:05:01 +01:00
Loïc Mathieu
8bd3c2fef8 fix(ci): fix vulnerability check workflow 2025-03-03 09:41:13 +01:00
Miloš Paunović
d8fc4a9ce2 fix(ui): allow sidebar theme toggle to update the editor theme (#7648) 2025-03-03 09:15:24 +01:00
Florian Hussonnois
bfd82e0b5c chore(core): eval value property once for flowable task Switch 2025-02-28 18:38:31 +01:00
Loïc Mathieu
fa07cbd3b9 feat(core): improve performance of ExecutorService.handleChildWorkerTaskResult
Searching for a retry in all parents is a costly operation, doing it only wgen we are retrying or failing avoid it most of the time.
2025-02-28 17:40:29 +01:00
github-actions[bot]
2c77a43935 chore(translations): localize to languages other than English (#7635)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-28 16:09:24 +01:00
Piyush Bhaskar
60a84a49f8 chore(ui): improve empty state of the namespace files editor (#7495) 2025-02-28 15:54:39 +01:00
Piyush Bhaskar
d8295ef4ae feat(ui): allow reordering tabs in the editor (#7531) 2025-02-28 15:46:30 +01:00
Miloš Paunović
b02325a2e4 chore(ui): remove crud details from execution overview (#7634) 2025-02-28 15:39:43 +01:00
Florian Hussonnois
a098847c65 feat(core): enhance plugin management
Changes:
* add new interface PluginManager
* add new CLI for un-installing plugins
* add new option --locally to CLI plugin install
* refactor service for downloading plugins
* refactor PluginController
* move Version util class from EE to OSS
* migrate aether lib to maven-resolver (#915)

part-of: #915
2025-02-28 15:04:40 +01:00
brian.mulier
5f21eb5790 fix(ui): use watch with ref instead of accessing the value 2025-02-28 14:16:05 +01:00
MilosPaunovic
036a7cf4f7 fix(ui): improve check for text label of filters section 2025-02-28 14:00:32 +01:00
MilosPaunovic
446a034d6b fix(ui): additional check for text label of filters section 2025-02-28 12:48:38 +01:00
github-actions[bot]
3fff36881a chore(translations): localize to languages other than English (#7633)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-28 12:23:36 +01:00
Anna Geller
174ac280d2 Update README.md 2025-02-28 11:12:41 +01:00
Miloš Paunović
c610ccdaee chore(ui): improve label for text search in filters section (#7631)
* chore(ui): improve label for text search in filters section

* chore(ci): prevent running translation spec on ci:cd workflow
2025-02-28 11:07:19 +01:00
Hashim Khalifa
d8ed5b8b88 feat:string filter (#7428)
* feat:string filter

* chore: include string filter in docs
2025-02-28 10:38:32 +01:00
brian.mulier
17e54134ce fix(core): no longer lowercasing PluginClassIdentifier to have proper validation upon Plugin deserialization
closes #7387
2025-02-28 10:01:57 +01:00
Anna Geller
cacbd069f9 Update README.md 2025-02-28 01:07:18 +01:00
Anna Geller
de5a0f4623 Update README.md 2025-02-28 01:05:24 +01:00
Piyush Bhaskar
0f6c8d3521 fix(ui): executions naviation based on start Date. (#7626) 2025-02-27 21:21:21 +01:00
Anna Geller
c8207b8706 fix: confusing trace log 2025-02-27 20:33:26 +01:00
brian.mulier
39cd6189ac chore(deps): bump ui-libs to 0.0.151 2025-02-27 18:47:43 +01:00
brian.mulier
9b4f3148fc fix(ui): replace alert blocks upon markdown rendering to display them properly
closes #7393
2025-02-27 16:46:23 +01:00
Shruti Mantri
ca6a7a9e16 Add full examples for dayweek, dayweekinmonth and publicholidays conditions (#7615)
* Add full examples for dayweek, dayweekinmonth and publicholidays conditions

* Update core/src/main/java/io/kestra/plugin/core/condition/DayWeekInMonth.java

---------

Co-authored-by: AJ Emerich <aemerich@kestra.io>
2025-02-27 16:39:41 +01:00
Bart Ledoux
3dc8e98ed3 fix: make sure nocode edits the right task from the topology
closes #7619
2025-02-27 15:58:17 +01:00
github-actions[bot]
ea79be9de8 chore(translations): localize to languages other than English (#7618)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-27 15:17:13 +01:00
Anna Geller
3804bdc7f7 fix: improve translation prompt 2025-02-27 15:14:02 +01:00
Anna Geller
d04764814a fix: turn CI flag to a dropdown 2025-02-27 14:41:31 +01:00
Anna Geller
020d674d8c fix(translations): allow retranslating modified keys when needed 2025-02-27 14:39:17 +01:00
Miloš Paunović
ec7458dce5 feat(ui): make filter dropdown be positioned below the input caret (#7614) 2025-02-27 14:24:53 +01:00
Anna Geller
ae75ea06d2 fix: improve some wording 2025-02-27 14:19:30 +01:00
github-actions[bot]
53cd056871 chore(translations): localize to languages other than English (#7613)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-27 14:14:52 +01:00
Piyush Bhaskar
9bab2d2cfa feat(ui): introduce the execution timeline section on overview tab (#7498)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-27 14:09:48 +01:00
Loïc Mathieu
4d87d95eac chore(deps): upgrade Micronaut core to 4.7.15 2025-02-27 14:09:22 +01:00
Anna Geller
81635ddc84 fix: clean up translations script 2025-02-27 13:11:46 +01:00
github-actions[bot]
781d1338e9 chore(translations): localize to languages other than English (#7610)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-27 12:47:51 +01:00
Anna Geller
37ba85a130 Revert "chore(translations): localize to languages other than English (#7605)" (#7609)
This reverts commit 04b8a0a14c.
2025-02-27 12:41:42 +01:00
Anna Geller
7c7ac5a70d fix: only re-translate if the key is not already in the target dict (#7608)
* fix: only re-translate if the key is not already in the target dict or is empty

* Update generate_translations.py

* Update generate_translations.py
2025-02-27 12:40:46 +01:00
Shruti Mantri
f315485fc6 feat: add full examples for datetimebetween condition (#7598) 2025-02-27 11:30:59 +00:00
github-actions[bot]
04b8a0a14c chore(translations): localize to languages other than English (#7605)
Co-authored-by: GitHub Action <actions@github.com>
2025-02-27 11:53:09 +01:00
Anna Geller
8dc702ed16 fix(translations): fix translation key detection by comparing against last modifying commit (#7604) 2025-02-27 11:47:24 +01:00
Anna Geller
6dee52da16 fix: ci for translations (#7602)
* fix: ci for translations

* clean uo
2025-02-27 10:39:36 +01:00
Anna Geller
31dce9aadd Update generate-translations.yml 2025-02-27 10:23:30 +01:00
Anna Geller
cf1d98f56d chore(translations): standalone action for translations (#7597) 2025-02-27 10:22:01 +01:00
Harshit Dhaduk
3bbe65653b feat(ui): add ability to have persistent filter options (#7276)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-27 09:31:45 +01:00
Piyush Bhaskar
5108dd5e25 feat(ui): improve inspecting details of multiple executions (#7516) 2025-02-27 08:33:02 +01:00
Tanvir Ahmed
1ea331b8ab chore: introduce Devcontainer setup (#7507)
Co-authored-by: brian.mulier <bmmulier@hotmail.fr>
2025-02-26 19:26:55 +01:00
aeSouid
e9ceda4666 Fix issue text filter after label 2025-02-26 19:18:16 +01:00
brian.mulier
a996347de2 fix(ui): LabelInput.vue was causing UI freeze 2025-02-26 16:38:31 +01:00
Nicolas K.
d8e3a9ab8b Feat/npe on runcontext cleanup (#7585)
* fix(#7548): NPE on runContext cleanup if logger is null

* clean(#7548): unused import

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-26 14:06:41 +01:00
Miloš Paunović
e097bdbe53 chore(deps): regular dependency update (#7588) 2025-02-26 13:41:58 +01:00
Miloš Paunović
0090caad3f fix(ui): make sure adding labels on flow run dialog is possible (#7587) 2025-02-26 12:43:56 +01:00
Loïc Mathieu
7fbe433221 fix(core): properly render list properties 2025-02-26 12:03:55 +01:00
Miloš Paunović
b489848ab9 chore(ui): remove background and check mark from selected filters dropdown list (#7583) 2025-02-26 11:23:05 +01:00
Loïc Mathieu
fc7ef1ca38 fix(core): log can have no executionId
Fixes https://github.com/kestra-io/kestra-ee/issues/2980
2025-02-26 11:03:43 +01:00
Miloš Paunović
0dfe54baa8 fix(ui): amend inconsistencies inside the product tour (#7582) 2025-02-26 11:02:40 +01:00
Miloš Paunović
45c5592609 fix(ui): make flow deletion work as expected (#7579) 2025-02-26 09:04:18 +01:00
Miloš Paunović
3134d2abe2 chore(ui): respect default execution tab settings field when opening single execution (#7576) 2025-02-26 08:35:07 +01:00
aeSouid
2bb5ac61c2 Labels multiselect: (#7544)
combine the labels filter by operation to handle multiselect when building the query
2025-02-25 16:50:38 +01:00
Malaydewangan09
be04c168fd refactor: update http client and fix tests 2025-02-25 16:31:27 +01:00
Malaydewangan09
04c4916ac6 chore: add wiremock and update tests 2025-02-25 16:31:27 +01:00
Malaydewangan09
8d2af87db3 fix: refactor PluginSearchCommand 2025-02-25 16:31:27 +01:00
Malaydewangan09
e7950279bb feat: add plugin search command 2025-02-25 16:31:27 +01:00
Đỗ Trọng Hải
44936e9cdf fix(ui): improve coloring for task object tooltips in no code editor (#7515) 2025-02-25 15:38:57 +01:00
yuri
27755a3791 fix(ui): preselect filter comparator option (#7518) 2025-02-25 15:33:21 +01:00
brian.mulier
ff4f7abb0f fix(ui): styling enhancements for plugin doc
closes kestra-io/ui-libs#196
2025-02-25 15:21:24 +01:00
brian.mulier
48b117b351 fix(ui): plugins TOC is now handling every type of plugins 2025-02-25 15:21:24 +01:00
yuri
daca5675d0 fix(ui): amend label filter encoding after values change (#7536) 2025-02-25 14:05:12 +01:00
Miloš Paunović
b3278bf208 feat(ui): introduce topology export to image files (#7541) 2025-02-25 13:42:13 +01:00
Loïc Mathieu
8a26fdd83e chore(core): move run context property validation to the run context
This would avoid loading the Validator from the application context each time we render a property
2025-02-25 11:09:46 +01:00
Loïc Mathieu
38b8190be9 fix(core): Subflow using the old task name never ends
Fixes #7506
2025-02-25 11:06:31 +01:00
Miloš Paunović
52cb63c436 chore(ui): prevent system labels to be shown in set labels dialog (#7539)
* chore(ui): prevent system labels to be shown in set labels dialog

* chore(ui): improve the removal of labels
2025-02-25 10:42:07 +01:00
dependabot[bot]
f3cff1b8cd build(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.7.5 to 4.7.6.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.7.5...v4.7.6)

---
updated-dependencies:
- dependency-name: io.micronaut.platform:micronaut-platform
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 10:14:04 +01:00
Loïc Mathieu
a2c89e508c fix(core): handle space in HTTP request URI
Fixes #6936
2025-02-25 09:03:58 +01:00
aeSouid
c8aae742a2 fix(ui): amend filtering of logs (#7535) 2025-02-25 08:33:11 +01:00
aeSouid
eab7b746e5 Fix the search by labels input as single value 2025-02-24 19:31:14 +01:00
nKwiatkowski
1d5981665f fix(core): #172 add reactor into classloader blacklist 2025-02-24 18:41:15 +01:00
Ludovic DEHON
4500c976d6 fix(core): content type encoding should not be mandatory 2025-02-24 18:33:25 +01:00
Loïc Mathieu
cf10269f25 fix(jdbc): be resilient to DataException
We usually fail fast, but when a DataException is thrown it means the JDBC driver throws an exception with error code 22: data exception.
As the exception is from the data not the database or the network, there is no point of failfast, we throw a QueueException that may or may not be handled gracefully by the call site.
2025-02-24 16:56:10 +01:00
MilosPaunovic
cf635058cd chore(ui): use system namespace label from configs 2025-02-24 14:45:28 +01:00
aeSouid
bd6937a9f0 Fix the multi select status for the IAM/invitaiton page (#7528) 2025-02-24 13:36:34 +01:00
Miloš Paunović
59cc6f32d0 refactor(ui): remove obsolete chartjs-chart-treemap library (#7529) 2025-02-24 13:33:48 +01:00
Miloš Paunović
b8423ef70e chore(ui): purge empty labels on execution (#7527) 2025-02-24 12:24:50 +01:00
Miloš Paunović
0ec1b3a983 chore(ui): prevent sending random strings as child filter values (#7526)
* chore(ui): properly handle child filter

* chore(ui): prevent sending random strings as child filter values
2025-02-24 11:19:16 +01:00
Anna Geller
8cebd39f0d docs: debug expression (#7514)
* docs: debug expression

* fix: translation script

* fix: translations commit depth

* fix: comment
2025-02-24 10:22:21 +01:00
Ludovic DEHON
9fce6cfe65 fix(core): missing content type on http client 2025-02-21 23:18:27 +01:00
brian.mulier
c8c0c4e63f fix(core): camel to snake-case for app-blocks in RegisteredPlugin 2025-02-21 19:44:06 +01:00
Loïc Mathieu
25723b1acb fix(core): typo in PluginScanner 2025-02-21 19:40:16 +01:00
rajatsingh23
065d299422 chore(ui): restore automatic scroll to bottom on logs (#7365) 2025-02-21 15:08:13 +01:00
brian.mulier
9ec4d9282b fix(core): rename dashboards subgroups 2025-02-21 14:48:03 +01:00
brian.mulier
16284e5b95 fix(core): move package-info.java to proper dashboard packages 2025-02-21 14:35:36 +01:00
Ludovic DEHON
a115eb5373 fix(core): try to log message for unhandled realtime trigger exception 2025-02-21 12:50:21 +01:00
brian.mulier
ac2643c108 fix(core): add package-info.java to script + handle subgroups properly 2025-02-21 12:23:24 +01:00
Adam Hirshson
4710baec7d chore(ui): improve the scope of translations (#7505)
Co-authored-by: Yailan Bordas <bordasyailan@gmail.com>
Co-authored-by: Yailan Bordas <109761932+YAI-cs@users.noreply.github.com>
Co-authored-by: Christian Arauz <carau022@fiu.edu>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-21 09:20:52 +01:00
Miloš Paunović
1efe531228 chore(ui): add translation key/value pairs (#7509) 2025-02-21 09:19:09 +01:00
brian.mulier
df92491e55 fix(core): add package-info.java to dashboard package 2025-02-20 19:05:58 +01:00
aeSouid
e7c65e020a chore(ui): improve scope type filters (#7504) 2025-02-20 14:14:08 +01:00
Miloš Paunović
90212ee7dc fix(ui): properly filter out log levels (#7503) 2025-02-20 12:18:58 +01:00
Miloš Paunović
ac1984b349 fix(ui): make flow metrics behave as expected (#7502) 2025-02-20 11:59:27 +01:00
YannC
c5767fd313 fix(core): require condition in Flow trigger (#7494)
close #971
2025-02-20 10:19:06 +01:00
Ludovic DEHON
8ee79264ed fix(tasks): remove useless format metrics on return (#7486) 2025-02-19 22:56:29 +01:00
Mathieu Gabelle
c6d21776ec fix: render before command with options in CommandsWrapper (#7496) 2025-02-19 17:02:31 +01:00
Aabhas Sao
45a9ea0cc5 chore(ui): simplify query search with spaces inside (#7404)
Signed-off-by: Aabhas Sao <aabhassao0@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-19 16:26:47 +01:00
YannC
1f60a86739 fix(core): if subflow is disabled, raise an error (#7490) 2025-02-19 14:17:28 +01:00
Piyush Bhaskar
d0e8b691e3 chore(ui): amend margins of EE locked pages (#7446) 2025-02-19 14:11:45 +01:00
Piyush Bhaskar
0687a97eb8 feat(ui): add keyboard shortcuts for changing editor font size (#7450)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-19 13:54:20 +01:00
Miloš Paunović
dcf89b5db8 chore(translations): add missing key/value pairs (#7492) 2025-02-19 13:53:46 +01:00
Piyush Bhaskar
b1e29fbe31 chore(ui): improve styling of editor file tree (#7420) 2025-02-19 13:40:38 +01:00
Miloš Paunović
4b2113fb9b chore(ui): remove obsolete props (#7487) 2025-02-19 13:37:19 +01:00
Piyush Bhaskar
dc1728e420 fix(ui): fix the light theme contrast for editor. (#7438)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-19 13:31:47 +01:00
Miloš Paunović
8c83290d7a chore(deps): regular dependency update (#7485) 2025-02-19 12:54:49 +01:00
Miloš Paunović
212b3a82a9 fix(ui): improve handling of main filter labels on page load (#7456) 2025-02-19 12:08:53 +01:00
Miloš Paunović
1612c65ea3 fix(ui): properly cast value to boolean (#7455) 2025-02-19 11:29:07 +01:00
Miloš Paunović
6257b1508c chore(ui): disable click on search button if filtering is automatic (#7454) 2025-02-19 11:08:57 +01:00
yuri
f1670b8ac8 fix(webserver): allow special chars in label key (#7419) 2025-02-19 09:06:48 +01:00
brian.mulier
ce15ca1cac fix(ci): QEMU issue 2025-02-18 23:36:53 +01:00
Ludovic DEHON
a53395ab3f fix(core): http proxy was not passed to configuration
close #7449
2025-02-18 22:46:15 +01:00
Mathieu Gabelle
e0eaf675b2 refactor: return only command when no interpreter and no beforeCommands (#7452) 2025-02-18 18:59:04 +01:00
Ludovic DEHON
666f8a7ad9 fix(cicd): update concurrency key 2025-02-18 18:21:25 +01:00
brian.mulier
cebe8f3545 fix(tests): increase timeout on JdbcServiceLivenessCoordinatorTest.taskResubmitSkipExecution 2025-02-18 15:48:36 +01:00
brian.mulier
16e3830c9c fix(core): render delete property at the beginning in Docker task runner 2025-02-18 15:48:36 +01:00
brian.mulier
15b85ac952 fix(core): remove props with default from required in json schema to avoid validation errors
closes #7406
2025-02-18 15:48:36 +01:00
Miloš Paunović
db016a085f chore(ui): add arrows to namespace listing (#7448) 2025-02-18 13:54:07 +01:00
YannC
d5f6da10dd fix(): invert condition 2025-02-18 12:38:54 +01:00
brian.mulier
3723275817 fix(core): move back to the old worker thread pool because it was restricting it to 1 thread 2025-02-18 12:24:21 +01:00
YannC
ef29883138 fix(core): provide tenantId when looking for subflow (#7442) 2025-02-18 11:38:25 +01:00
Mathieu Gabelle
5ced9b6c4f refactor: remove rendering from Docker (#7439)
rendering is done in the CommandsWrapper so no need to render again in the task runner
2025-02-18 11:15:14 +01:00
Miloš Paunović
11f3629f38 chore(ui): add missing translations (#7444) 2025-02-18 11:11:50 +01:00
Miloš Paunović
d8c5a1e14c chore(ui): amend namespace flow creation label (#7443) 2025-02-18 11:09:55 +01:00
Miloš Paunović
cee2734817 fix(ui): improve modifying inputs from no code editor (#7440) 2025-02-18 10:36:15 +01:00
brian.mulier
13cb0fb96d fix(tests): logs are asynchronously inserted so we wait for them to be fully in 2025-02-18 10:19:58 +01:00
YannC
a020e3f3ae ci(test): force test if ref is a tag 2025-02-18 09:46:28 +01:00
brian.mulier
12fef24279 chore(deps): bump ui-libs to 0.0.141 2025-02-18 01:38:22 +01:00
rajatsingh23
4a55485cd6 fix(ui): better duration consistency on Gantt chart 2025-02-18 00:38:54 +01:00
brian.mulier
aed5734e17 chore(deps): bump ui-libs to 0.0.140 2025-02-18 00:25:39 +01:00
brian.mulier
d55ce16f57 fix(tests): wider maxDuration for retry-failed-flow-duration.yml 2025-02-18 00:05:14 +01:00
aeSouid
4abf3e9e6b Filter feat: (#7432)
Fix handle namespace column in filtering on scope
2025-02-17 14:43:03 +01:00
Bart Ledoux
fbd8934346 fix: restore red dot when there is news 2025-02-17 14:17:13 +01:00
Bart Ledoux
df6d339310 refactor: avoid en.json warning when building 2025-02-17 14:16:47 +01:00
YannC
a89ef71580 ci(publish-docker): attempts with command on qemu docker image 2025-02-17 11:15:14 +01:00
YannC
89c2d3951c ci(publish-docker): attempts with ubuntu 0.20 (#7431) 2025-02-17 10:48:10 +01:00
Mathieu Gabelle
e061a3617c refactor: introduce render in commands wrapper for property string (#7430) 2025-02-17 10:44:54 +01:00
Mathieu Gabelle
410cf0e389 fix: enable rendering of commands properties inside CommandsWrapper (#7381)
* fix: move commands to Property

migrate to Property in TaskCommands and CommandsWrapper
implement beforeCommand and interpreter
2025-02-17 09:49:49 +01:00
YannC
f783ab72b5 fix(test): attempt at making the test not flakky (#7400) 2025-02-17 09:20:26 +01:00
Anna Geller
72e78c8c31 Update ExecutionOutputs.java (#7394) 2025-02-17 09:20:10 +01:00
YannC
a716094a9d ci(): now run the file changes detection also in the workflow test 2025-02-17 09:15:26 +01:00
YannC
c75def0eac ci():allow release to be run 2025-02-17 09:10:08 +01:00
Piyush Bhaskar
c27d5ce480 chore(ui): improved Logs empty page (#7415) 2025-02-16 22:44:00 +01:00
aeSouid
49960d67ab chore(ui): improve filter parameters decoding for absolute date (#7409) 2025-02-14 14:51:13 +01:00
Loïc Mathieu
d9d2f86971 fix(core): ForEachItem inside an If task
Fixes #6801
2025-02-14 14:46:09 +01:00
Laibrez
95f5862201 chore(ui): improve execution outputs section (#7377)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-14 14:45:20 +01:00
AJ Emerich
e6419cf7a2 fix(ui): correct english translations (#7401)
Closes https://github.com/kestra-io/kestra-ee/issues/2913
2025-02-14 14:19:38 +01:00
Miloš Paunović
c1faeab068 chore(ui): make import flows button be a secondary one, styling-wise (#7405) 2025-02-14 12:59:44 +01:00
Aabhas Sao
dd3ff3e771 chore(ui): vertically center all elements in table rows (#7372)
Signed-off-by: Aabhas Sao <aabhassao0@gmail.com>
2025-02-14 11:52:37 +01:00
Miloš Paunović
e635338b47 chore(ui): improve colors of filter dropdown selector (#7403) 2025-02-14 11:47:10 +01:00
Loïc Mathieu
ddfed2e65c fix(core): taskrun list can be null 2025-02-14 11:45:33 +01:00
aeSouid
52fe6afae0 Filter feat: (#7389)
namespace mulitple choice in and not in
2025-02-14 11:37:57 +01:00
Miloš Paunović
a9ff2af159 fix(ui): properly handle the operation labels in filter component (#7399) 2025-02-14 10:50:16 +01:00
Miloš Paunović
bf19a8f5ad chore(ui): improve the labels behavior (#7397) 2025-02-14 10:30:46 +01:00
Loïc Mathieu
41712b8d80 feat(jdbc): consume multiple times the execution and worker task result queues
So that the executor use multiple threads to process messages.
2025-02-14 09:19:51 +01:00
Loïc Mathieu
f8a6e3fb04 feat(core, jdbc): use an elastic thread pool
To avoid using too many threads when it's not needed.
2025-02-14 09:19:39 +01:00
Ludovic DEHON
ad651cdc53 fix(ui): fix slack button on error toast 2025-02-13 19:27:20 +01:00
Miloš Paunović
f57a463983 chore(ui): improve breadcrumbs on namespace view (#7386) 2025-02-13 15:46:04 +01:00
Miloš Paunović
b3e66d8844 chore(ui): include autocompletion shortcut in the preview list (#7384) 2025-02-13 15:03:42 +01:00
Miloš Paunović
dc64d81dd0 chore(ui): add link to filtered triggers page from backfill dialog (#7380) 2025-02-13 12:17:53 +01:00
YannC
be30034143 ci(): moved build artifacts directly in docker workflow 2025-02-13 11:20:16 +01:00
YannC
f8d8e0998c ci(): fix outputs 2025-02-13 10:47:58 +01:00
Bart Ledoux
b8d0ae3ecf fix: changing language should work with providers too 2025-02-13 10:32:20 +01:00
Loïc Mathieu
def8fa3ff1 fix(cli): disable by default OTEL metrics 2025-02-13 10:21:18 +01:00
YannC
cfc0c9f9f2 ci(docker): revert fixed qemu version 2025-02-13 10:06:14 +01:00
YannC
49fe36250a ci(docker): fixed version of qemu 2025-02-13 10:00:32 +01:00
YannC
0c19f4c518 ci(): map outputs in build artifacts 2025-02-13 09:40:55 +01:00
YannC
1e6d553ce6 ci(): correct output in workflow build artifacts 2025-02-13 09:08:00 +01:00
YannC
1ebbdbbae6 fix(scheduler): delete trigger when flow is not found (#7366)
close #7312
2025-02-13 08:52:19 +01:00
Ludovic DEHON
5b29a0d070 fix(cicd): add mariadb plugins on docker image 2025-02-12 23:48:50 +01:00
Ludovic DEHON
239fb6a685 fix(core): handle http request with no content type 2025-02-12 19:48:50 +01:00
YannC
9924ba5ae2 fix(ui): refresh dashboard list (#7370)
close #2791
2025-02-12 17:44:24 +01:00
Loïc Mathieu
13ac335c93 feat(jdbc): clean more eagerly some queues based on configuration 2025-02-12 16:35:46 +01:00
Loïc Mathieu
9d717caf95 feat(jdbc): queues.updated should be set when the record is updated 2025-02-12 16:35:46 +01:00
Loïc Mathieu
1d65fd96b4 fix(jdbc): delete the executor state at the correct stage
Without this change, the executor state is deleted when the execution is terminated.
Then the last execution message is emitted, which goes again into the queue wich recreates the executor state.
2025-02-12 16:11:32 +01:00
Loïc Mathieu
b45a44bd35 fix(core): render list
Fixes #7253
2025-02-12 16:09:16 +01:00
YannC
bd9ba882fb test(webserver): flaky ExecutionControllerTest for kill (#7368) 2025-02-12 15:59:39 +01:00
Miloš Paunović
4b682931e0 chore(ui): add validation messages for custom dashboard crud actions (#7367) 2025-02-12 14:38:10 +01:00
YannC
d657f48278 ci: cleanup 2025-02-12 14:28:49 +01:00
Eduardo Goncalvez
714938bec6 chore(ui): add shadows to main charts (#7314)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-12 11:38:59 +01:00
Barthélémy Ledoux
73a9eb485f fix: make menu hierarchy get closer to the original designs (#7102)
* fix: make menu hierarchy get closer to the original designs

* smaller spacing in lower hierachy

* chore: add sidebar story
2025-02-12 10:52:14 +01:00
Miloš Paunović
4d9f2a130f fix(ui): make sure bulk selection is taking into account only selected items (#7362) 2025-02-12 10:47:41 +01:00
Barthélémy Ledoux
a040ec44b9 fix: trim bookmarks better (#7359) 2025-02-12 10:19:22 +01:00
Barthélémy Ledoux
b1c27b1869 fix: add proper ellipsis to sidemenu (#7361) 2025-02-12 10:19:06 +01:00
Loïc Mathieu
ed14493632 feat(core): add system.correlationId label to triggered executions 2025-02-12 10:12:56 +01:00
Miloš Paunović
3803f4ea4c chore(deps): regular dependency update (#7358) 2025-02-12 09:59:20 +01:00
Miloš Paunović
4992cf34fa chore(translations): amend theme key (#7356) 2025-02-12 09:23:03 +01:00
YannC
420afd7758 ci():fix frontend being skipped (#7355) 2025-02-12 09:21:59 +01:00
Shamar
c3852a2933 chore(ui): improve the doughnut chart legend (#7321)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-12 08:59:43 +01:00
YannC
41417adf8b ci(): fixed vulnerabilities-check.yml wrong character 2025-02-12 08:57:16 +01:00
Pravesh-Sudha
cd89cd8fb6 chore(ui): introduce filters bar to flow triggers page (#7292)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-12 08:45:47 +01:00
YannC
9b5e16a02d ci(): call reusable workflow correctly 2025-02-12 08:42:09 +01:00
Ludovic DEHON
f4b78755ad docs(core): better documentation on docker tasks 2025-02-11 22:12:43 +01:00
Ludovic DEHON
7bf42cb1cb fix(cicd): npm install in the wrong folder for vulnerabilities checks 2025-02-11 22:12:38 +01:00
Loïc Mathieu
7dbf86d54e fix(core): possible NPE when an execution has no labels 2025-02-11 18:01:27 +01:00
Loïc Mathieu
e7f551edc2 feat(jdbc): purge worker job queue early 2025-02-11 16:30:40 +01:00
Loïc Mathieu
31d2212419 feat(jdbc): puerge worker task result queue early 2025-02-11 16:30:40 +01:00
Loïc Mathieu
dd8ae5e642 feat(jdbc): purge execution queue early 2025-02-11 16:30:40 +01:00
Nicolas K.
0aadbab9c4 fix(core): add request.yaml file back (#7308)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-11 16:15:25 +01:00
YannC
49759da3b4 ci(): Remove if from test workflow 2025-02-11 15:48:20 +01:00
YannC
489e01cf38 ci(): Use correct workflow 2025-02-11 15:46:39 +01:00
YannC
1821ec27c9 ci(): Correct outputs 2025-02-11 15:44:01 +01:00
YannC
a6918b1f34 ci(): Remove unnecessary secrets 2025-02-11 15:37:49 +01:00
YannC
17693c7380 ci(): Missing GOOGLE_SERVICE_ACCOUNT secrets 2025-02-11 15:27:33 +01:00
YannC
806135e3e9 ci(): Remove GITHUB_TOKEN from secrets definition 2025-02-11 15:25:27 +01:00
YannC
7381b32e16 ci(): rewrite release part 2025-02-11 15:22:33 +01:00
YannC
7b175dac04 ci(): trigger main ci on dispatch 2025-02-11 14:19:48 +01:00
YannC
2c3de87dcc ci(): trigger main ci also on develop branch 2025-02-11 14:19:19 +01:00
YannC
7b9efa08a6 fix(h2): remove indenting in sql file (#7306) 2025-02-11 13:52:38 +01:00
Piyush Bhaskar
1a96fe4b4b chore(ui): improve styling of main filter tags (#7305)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-11 13:51:24 +01:00
YannC
938de9b222 fix(core): do not validate subflow if namespace or id is pebble (#7294)
close #7271
2025-02-11 13:44:30 +01:00
Florian Hussonnois
9505c48e55 chore: remove some compilation warnings 2025-02-11 13:04:38 +01:00
YannC
fe197ebd21 ci(): run translations only if necessary 2025-02-11 12:52:40 +01:00
YannC
c5b6d6b2a7 ci(): moved multiple actions to reusable workflows (#7299) 2025-02-11 11:47:56 +01:00
dependabot[bot]
90da5f7cf7 build(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.19.0 to 2.20.0.
- [Release notes](https://github.com/opensearch-project/opensearch-java/releases)
- [Changelog](https://github.com/opensearch-project/opensearch-java/blob/v2.20.0/CHANGELOG.md)
- [Commits](https://github.com/opensearch-project/opensearch-java/compare/v2.19.0...v2.20.0)

---
updated-dependencies:
- dependency-name: org.opensearch.client:opensearch-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 11:45:27 +01:00
dependabot[bot]
4c5638d957 build(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.7.4 to 4.7.5.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.7.4...v4.7.5)

---
updated-dependencies:
- dependency-name: io.micronaut.platform:micronaut-platform
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 11:45:09 +01:00
dependabot[bot]
8260dc6033 build(deps): bump io.pebbletemplates:pebble from 3.2.2 to 3.2.3
Bumps [io.pebbletemplates:pebble](https://github.com/PebbleTemplates/pebble) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/PebbleTemplates/pebble/releases)
- [Commits](https://github.com/PebbleTemplates/pebble/compare/3.2.2...3.2.3)

---
updated-dependencies:
- dependency-name: io.pebbletemplates:pebble
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 11:44:52 +01:00
dependabot[bot]
48320a89d8 build(deps): bump com.microsoft.playwright:playwright
Bumps [com.microsoft.playwright:playwright](https://github.com/microsoft/playwright-java) from 1.49.0 to 1.50.0.
- [Release notes](https://github.com/microsoft/playwright-java/releases)
- [Commits](https://github.com/microsoft/playwright-java/compare/v1.49.0...v1.50.0)

---
updated-dependencies:
- dependency-name: com.microsoft.playwright:playwright
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 11:44:16 +01:00
dependabot[bot]
55bdfac7f9 build(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.33.11 to 0.34.0.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.33.11...v0.34.0)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 11:43:25 +01:00
Loïc Mathieu
f599f25755 chore(core): refactor file related Pebble function to share code 2025-02-11 11:39:20 +01:00
Loïc Mathieu
8de839f326 chore(core): rename fileEmpty Pebble function to isFileEmpty 2025-02-11 11:39:20 +01:00
Ludovic DEHON
25370d10bd fix(core): http client was not using deprecated setter 2025-02-11 11:21:26 +01:00
Nicolas K.
b59d36a90e fix(core): flacky trigger with backfile test (#7295)
* fix(core): flacky trigger with backfile test

* fix(core): flacky schedule test

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-11 11:07:38 +01:00
Nicolas K.
a5483a0d4c fix(makefile): build plugin now build main branch too (#7297)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-11 11:02:28 +01:00
ben8t
9863e88230 Add core plugin sanity checks (#6904)
* [feature] add core plugin sanity checks

* feat: namespace files task test

* fix: formatting

* fix: sanity checks to use assert

* fix: core sanity flows

* tests: add runner class to run sanity checks flows

* [refactor] remove request sanity check as not a core task (already in fs plugin)

* [refactor] rename file and namespace for sanity checks

* [refactor] update path

---------

Co-authored-by: Will Russell <wrussell@kestra.io>
Co-authored-by: Will Russell <will@wrussell.co.uk>
Co-authored-by: Mathieu Gabelle <mgabelle@kestra.io>
2025-02-11 10:51:59 +01:00
ByronBlaze
88a5cd69e3 feat(core): Added FileEmpty & FileExists Pebble Functions 2025-02-11 10:49:31 +01:00
yuri
ec73d58649 fix(ui): match chart colors (#7290)
Co-authored-by: Barthélémy Ledoux <ledouxb@me.com>
2025-02-11 09:38:33 +01:00
Bart Ledoux
0becf74339 fix: collapsed menu colors in light mode 2025-02-11 09:33:54 +01:00
Miloš Paunović
bfcfb2ac16 chore(ui): make action columns always visible on executions and flows (#7291) 2025-02-11 08:17:29 +01:00
Anna Geller
27f9a505af fix: force run docs (#7289) 2025-02-10 20:31:24 +01:00
Nicolas K.
99db3f35b7 fix(core): #7227 cron schedule with timezone and backfile not triggering (#7285)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-10 17:56:05 +01:00
YannC
c53239470d fix(ci): inputs instead of secrets 2025-02-10 16:27:55 +01:00
YannC
c3e830c2c7 fix(ci): Workflow test ouptputs + changes for codecov 2025-02-10 16:25:00 +01:00
Ludovic DEHON
9790f02376 fix(cicd): add npm install on vulnerabilities check 2025-02-10 15:56:53 +01:00
Miloš Paunović
899a1f6f17 chore(ui): improve flow description coloring (#7282) 2025-02-10 15:51:59 +01:00
YannC
9455643660 fix(ci): pass correctly secret + cleanup 2025-02-10 15:17:31 +01:00
dependabot[bot]
8a3f413236 build(deps): bump software.amazon.awssdk:bom from 2.30.11 to 2.30.16
Bumps software.amazon.awssdk:bom from 2.30.11 to 2.30.16.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 15:01:51 +01:00
YannC
4986d68f57 fix(ci): removed useless name in action files 2025-02-10 14:37:17 +01:00
YannC
09ff9d4054 fix(ci): missing checkout in release step 2025-02-10 13:13:48 +01:00
aeSouid
e910685d57 Fix search bar: (#7279)
-fix date picker layout
-change the not_in operation traduction

Fix search bar:
-fix search bar when closing date picker
2025-02-10 13:12:06 +01:00
dependabot[bot]
5aa73ec48a build(deps): bump com.google.cloud:libraries-bom from 26.53.0 to 26.54.0
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/java-cloud-bom) from 26.53.0 to 26.54.0.
- [Release notes](https://github.com/googleapis/java-cloud-bom/releases)
- [Changelog](https://github.com/googleapis/java-cloud-bom/blob/main/release-please-config.json)
- [Commits](https://github.com/googleapis/java-cloud-bom/compare/v26.53.0...v26.54.0)

---
updated-dependencies:
- dependency-name: com.google.cloud:libraries-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 12:49:01 +01:00
YannC
5dcd27c064 fix(ci): disabled previous generate translations CI 2025-02-10 12:36:00 +01:00
YannC
9ba27b9bd5 fix(ci): workflow test correct previous job status usage 2025-02-10 12:35:06 +01:00
YannC
549da52afa ci(): simplification (#7202)
* ci():
- split in multiples actions
- simplify translation script
- simplify front build
- run test for back/front only when needed

* fix(): token prop

* ui(translation): new word

* fix(): correct usage of paths-filter action

* fix(): first iteration of new main workflow

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-02-10 12:24:25 +01:00
Miloš Paunović
d486d78200 chore(ui): disable saving flow actions if there are errors (#7278) 2025-02-10 11:59:51 +01:00
aeSouid
a7a134a050 Fix search flow by query: (#7277)
add new condition of the field is query
2025-02-10 11:54:39 +01:00
GitHub Action
e0f4ab735d chore(translations): auto generate values for languages other than english 2025-02-10 10:49:34 +00:00
Barthélémy Ledoux
b052925b04 feat: give blueprint pages a distinct name (#7254)
* feat(translations): add new blueprint labels for flows, apps, and dashboard

* feat(translations): update left menu titles for blueprints

* chore(translations): auto generate values for languages other than english

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-02-10 11:48:24 +01:00
Piyush Bhaskar
c3443ab99a feat(ui): center view when switching between topology modes (#7257) 2025-02-10 11:11:39 +01:00
Bart Ledoux
ec967a57fb fix: use the udpated labelsFromQuery in labels 2025-02-10 10:56:35 +01:00
Piyush Bhaskar
9ba13ae994 chore(ui): tweak the video container ratio in the docs sidebar (#7260) 2025-02-10 10:35:54 +01:00
Loïc Mathieu
be1871430e feat(core, jdbc): directly process WorkerTaskResult from flowable tasks
And other places in the ExecutorService when we create them when processing the execution queue.

Fixes #5521
2025-02-10 10:03:00 +01:00
Dheeraj_R_Gowda
39257bf3bb chore(ui): align chart duration label with switch toggle (#7258) 2025-02-10 09:35:10 +01:00
Aabhas Sao
346100c86c chore(ui): align chart duration label with switch toggle (#7259) 2025-02-10 09:24:36 +01:00
Ludovic DEHON
0c3ed3b751 feat(cicd): restore codeql weekly 2025-02-08 00:48:11 +01:00
Ludovic DEHON
1bbe0e659e feat(cicd): don't mark failed for front end test 2025-02-07 20:28:31 +01:00
Ludovic DEHON
123f748030 feat(cicd): add test analysis on frontend 2025-02-07 18:30:27 +01:00
Ludovic DEHON
d0b53d217d feat(cicd): add unit test for js (#7246) 2025-02-07 18:23:08 +01:00
Bart Ledoux
6f7bb80c6d fix: make dashboard tables the right color 2025-02-07 16:39:29 +01:00
Loïc Mathieu
1eacb447d5 feat(core): simplify Pebble error messages 2025-02-07 14:59:10 +01:00
Ludovic DEHON
3f429ef0a8 feat(cicd): add codecov flags 2025-02-07 14:27:59 +01:00
Florian Hussonnois
dc8576afed fix(ci): fix and remove unecessary setps in set version workflows 2025-02-07 11:51:07 +01:00
Bart Ledoux
c31609a12e chore: update theme colors 2025-02-07 11:44:25 +01:00
Loïc Mathieu
84c07ef011 fix(webserver,core): move the LogStreamService in core so EE can use it for apps 2025-02-07 11:40:21 +01:00
MilosPaunovic
e335b76b3c chore(ui): check for missing property on update metadata 2025-02-07 11:27:14 +01:00
Bart Ledoux
95b94f3961 fix: labels should not be purple if inactive 2025-02-07 10:46:33 +01:00
Bart Ledoux
e0ee26a9c0 fix: add comment on i18n code 2025-02-07 10:07:15 +01:00
Florian Hussonnois
480fc75897 feat(ci): add workflows for release process
* move scripts to folder dev-tools
* add new workflow gradle-release.yml
* add new workflow setversion-tag.yml
* rename existing workflow
2025-02-07 09:57:06 +01:00
Nicolas K.
c8d7e5f357 feat(core): add sanity check to request task (#7230)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-07 09:34:09 +01:00
咬轮猫
792f7b6911 fix(ui): amend the language switching issue (#7235) 2025-02-07 09:15:52 +01:00
Loïc Mathieu
2a95aee968 feat(webserver): use a shared queue consumer from the log follow endpoint 2025-02-07 09:15:42 +01:00
amartknez
129ba6abe4 chore(ui): initial work on filter persistency (#7234)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-07 09:09:06 +01:00
Ludovic DEHON
ab2a0108a9 feat(cicd): add codecov bundle analysis 2025-02-07 09:08:37 +01:00
Ludovic DEHON
03dccd1444 feat(cicd): codecov + tests report 2025-02-07 08:45:26 +01:00
Loïc Mathieu
4c401ce0c0 feat(webserver): improvement to ExecutionStreaminService 2025-02-06 17:30:14 +01:00
malay.worldref@gmail.com
13be8b8125 feat(webserver): optimize queue usage for follow endpoints 2025-02-06 17:30:14 +01:00
GitHub Action
440faa7cd1 chore(translations): auto generate values for languages other than english 2025-02-06 16:10:14 +00:00
aeSouid
5a8a4e99d7 Change the filter params (#7051)
* Feat Filter:
Change the filters to the new search format
2025-02-06 17:09:32 +01:00
aeSouid
296e1a67a5 Feat Search: (#6910)
New search with operation for all /search endpoints :
- define list  of operation and fields.
- Add custom parser for filter[field][operation]=value format
- create new Annotation @QueryFilterFormat to bind to specfic pojo
- Implement new abstract repo search method
2025-02-06 17:08:15 +01:00
Loïc Mathieu
ecd36ec2a4 fix(core): possible NPE on LabelService.containsAll 2025-02-06 16:26:11 +01:00
rajatsingh23
ca9b90a0ec chore(ui): show executions per namespace only if there are 2 or more items for chart (#7216)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-06 15:22:23 +01:00
Piyush Bhaskar
37e337a657 chore(ui): only show warning on bulk execution deletion if nonTerminated is true (#7211)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-06 15:12:16 +01:00
Miloš Paunović
157f78fae0 chore(ui): generate random flow ID using combination of animal names and numbers (#7223)
* chore(ui): creating a flow from the namespace view should use it's ID as the designated value

* chore(ui): generate random flow ID using combination of animal names and numbers
2025-02-06 14:55:50 +01:00
Pravesh-Sudha
7158a0c98f chore(ui): amended global pagination coloring (#7201)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-06 13:11:00 +01:00
Miloš Paunović
753308a341 fix(ui): prevent doubling the executions chart on flow overview (#7219) 2025-02-06 11:58:05 +01:00
Loïc Mathieu
21aebe4e77 feat(core): allow loading secrets from a different namspace
Fixes #5970
2025-02-06 10:42:17 +01:00
Miloš Paunović
959e80efa8 chore(ui): re-order the list of optional columns (#7213) 2025-02-06 09:32:56 +01:00
Miloš Paunović
bba612ef9b feat(ui): add script to help with creation of release notes (#7212) 2025-02-06 09:18:08 +01:00
nKwiatkowski
a0483dc201 fix(core): request option doesn't initialize properly 2025-02-05 19:03:06 +01:00
Miloš Paunović
2f3d7f573b chore(ui): replace the visual for no tabs opened on namespace editor (#7204) 2025-02-05 18:37:13 +01:00
Nicolas K.
2e09777790 fix(core): #7181 log level rendered as string (#7198)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-02-05 15:35:29 +01:00
Miloš Paunović
0b1eda0f03 chore(ui): consolidate markdown files (#7197) 2025-02-05 12:51:31 +01:00
Miloš Paunović
1ee6402fa2 chore(translations): remove extra keys from translation files (#7193) 2025-02-05 12:23:34 +01:00
Miloš Paunović
71933352b6 chore(ui): remove the option to change editor theme separately (#7192)
* chore(ui): remove obsolete log statements from console

* chore(ui): remove the option to change editor theme separately
2025-02-05 12:18:29 +01:00
GitHub Action
cb7ed73bea chore(translations): auto generate values for languages other than english 2025-02-05 09:56:50 +00:00
Miloš Paunović
5f13d5b2aa chore(ui): rename advanced properties to other in no code (#7190) 2025-02-05 10:56:11 +01:00
GitHub Action
e4973c3319 chore(translations): auto generate values for languages other than english 2025-02-05 09:53:47 +00:00
Miloš Paunović
abc3372161 chore(ui): rename advanced properties to other in no code (#7189) 2025-02-05 10:53:14 +01:00
Bart Ledoux
9619dca764 fix(theme): make plugin rendering reactive to theme switch 2025-02-05 10:53:02 +01:00
Barthélémy Ledoux
e80b2011de feat: theme switch to "theme switch" the charts (#7151)
* chore: store the theme in the store

* use the new theme in charts

* use the theme value in more places

* create a useTheme composable

* create the useScheme composable

* restore nodata
2025-02-05 10:43:04 +01:00
GitHub Action
86f3acace3 chore(translations): auto generate values for languages other than english 2025-02-05 09:33:27 +00:00
Piyush Bhaskar
b6c9f50503 feat(ui): add option to choose visible columns in flow and execution listings (#6932)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-05 10:32:37 +01:00
Piyush Bhaskar
2e9938806a feat(ui): Docs markdown alert styled based on alert level in product. (#6818)
* feat(ui): Align the CSS or style configuration so that all documentation components (Docs, plugin docs, blueprints) use the same markdown style.

* Remove alert styling from DocsLayout since it has been handled within Alert.vue using ---ks variables.

* revert Input_Count.

---------

Co-authored-by: Barthélémy Ledoux <ledouxb@me.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-05 10:13:30 +01:00
Piyush Bhaskar
13bc0de9dc chore(ui): improve the states options list inside filter values (#7176)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-05 09:03:25 +01:00
Piyush Bhaskar
da7509ce30 chore(ui): update the visual of no data component (#7179)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-02-05 08:45:52 +01:00
Shruti Mantri
15aeee3d8b chore(ui): improve the example for not condition (#6820) 2025-02-05 08:35:21 +01:00
dependabot[bot]
42920508b7 build(deps-dev): bump @shikijs/markdown-it from 2.3.0 to 2.3.1 in /ui (#7184)
Bumps [@shikijs/markdown-it](https://github.com/shikijs/shiki/tree/HEAD/packages/markdown-it) from 2.3.0 to 2.3.1.
- [Release notes](https://github.com/shikijs/shiki/releases)
- [Commits](https://github.com/shikijs/shiki/commits/v2.3.1/packages/markdown-it)

---
updated-dependencies:
- dependency-name: "@shikijs/markdown-it"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-05 08:32:26 +01:00
dependabot[bot]
f45c703fd9 build(deps): bump shiki from 2.3.0 to 2.3.1 in /ui (#7183)
Bumps [shiki](https://github.com/shikijs/shiki/tree/HEAD/packages/shiki) from 2.3.0 to 2.3.1.
- [Release notes](https://github.com/shikijs/shiki/releases)
- [Commits](https://github.com/shikijs/shiki/commits/v2.3.1/packages/shiki)

---
updated-dependencies:
- dependency-name: shiki
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-05 08:31:04 +01:00
dependabot[bot]
872c70fe37 build(deps): bump posthog-js from 1.215.2 to 1.215.3 in /ui (#7182)
Bumps [posthog-js](https://github.com/PostHog/posthog-js) from 1.215.2 to 1.215.3.
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/v1.215.2...v1.215.3)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-05 08:30:53 +01:00
brian.mulier
bbb03b288b fix(ui): global plugin doc with new redesign + auto-expand properties initially 2025-02-04 21:58:08 +01:00
Florian Hussonnois
8d8b7e7a67 fix(core): make flow/namespace variables available for input expr
related-to: kestra-io/kestra-ee#2826
2025-02-04 16:55:49 +01:00
GitHub Action
a9042fb27b chore(translations): auto generate values for languages other than english 2025-02-04 15:00:55 +00:00
YannC
5ff5667231 feat(ui): now display an error when SSE failed (#7177)
* feat(ui): now display an error when SSE failed

close #1303

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-02-04 16:00:27 +01:00
Florian Hussonnois
42ad09d79f chore: add utility script to check for plugin artifacts 2025-02-04 15:58:12 +01:00
Loïc Mathieu
30db740de8 fix(core): retry flaky test AbstractRunnerTest.restartForEachItem
It is flaky on CI but never fail locally even with 100 repetitions
2025-02-04 14:22:20 +01:00
Loïc Mathieu
20d55122e7 fix(core): retry test HttpClientTest.getText
It is flaky in CI but never fail locally even with 100 repetitions
2025-02-04 14:22:20 +01:00
Miloš Paunović
3294c358fa fix(ui): align dashboard button label to icon (#7175) 2025-02-04 14:14:58 +01:00
Karthik73965
42899d30d1 chore(ui): add skeleton loaders to dashboard cards (#6602)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-04 13:56:22 +01:00
GitHub Action
6ba71712a8 chore(translations): auto generate values for languages other than english 2025-02-04 12:04:11 +00:00
Miloš Paunović
36b8ef866d fix(ui): amend translation string for no results (#7172) 2025-02-04 13:03:45 +01:00
GitHub Action
fff8d630c5 chore(translations): auto generate values for languages other than english 2025-02-04 11:41:26 +00:00
Aabhas Sao
bc630684b1 chore(ui): enable command palette for monaco editor (#6944)
Signed-off-by: Aabhas Sao <aabhassao0@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-04 12:40:59 +01:00
Loïc Mathieu
f8b64cfbdf fix(core): retry flaky test AbstractRunnereTest.concurrencyQueuePause
It is flaky on CI but cannot be fail locally even with 100 repetitions.
2025-02-04 12:34:43 +01:00
Miloš Paunović
4ee8b33aeb chore(deps): regular dependency update (#7171) 2025-02-04 12:27:22 +01:00
Piyush Bhaskar
68074723c4 chore(ui): amend color of the input length counter (#6990) 2025-02-04 12:09:32 +01:00
GitHub Action
52159ee647 chore(translations): auto generate values for languages other than english 2025-02-04 11:02:44 +00:00
Piyush Bhaskar
d697e5dc67 feat(ui): add keyboard shortcuts dialog to editor (#6628)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-04 12:01:04 +01:00
brian.mulier
21733d8497 fix(ui): null-safe search filters 2025-02-04 11:40:44 +01:00
rajatsingh23
0501d29255 chore(ui): show each plugin deprecation warning in new line (#6839)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-02-04 11:22:19 +01:00
Loïc Mathieu
560703fde4 fix(core): retry flaky test AbstractRunnerTest.restartFailedThenFailureWithGlobalErrors
This test is flaky on CI but never locally even with 100 repetitions.
2025-02-04 10:38:42 +01:00
Loïc Mathieu
671eb2b57e feat(jdbc-*): delete subflow_executions table
Fixes #6831
2025-02-04 10:34:39 +01:00
Miloš Paunović
5cc30558c2 fix(ui): amend pagination on namespace flows listing (#7163) 2025-02-04 10:18:04 +01:00
Loïc Mathieu
5a46204394 chore(core): small perf improvements to MapUtils 2025-02-04 10:06:58 +01:00
Ludovic DEHON
c918276103 fix(core): process runner are not serialized correctly on worker
close #7053
2025-02-03 21:27:04 +01:00
YannC
04dd038b0f feat(core): new Publish task for metrics (#7122)
* feat(core): new Publish task for metrics

* fix(): review fixes
2025-02-03 16:37:16 +01:00
Bart Ledoux
1bbe48fe5b fix: bring back hover in main menu 2025-02-03 15:40:12 +01:00
Bart Ledoux
9499ee2c27 fix: setup docId for blueprints 2025-02-03 15:15:34 +01:00
Piyush Bhaskar
05bbaa4f00 fix(ui): Custom Dashboard name overflows. (#7124)
* fix(ui): Custom Dashboard name overflows.

* fix(ui): avoid dashboard button being too long

---------

Co-authored-by: YannC <ycoornaert@kestra.io>
2025-02-03 14:37:02 +01:00
brian.mulier
fa5ef3b4c6 fix(ui): switching from custom Flow blueprints tab to dashboard was not working 2025-02-03 14:00:13 +01:00
Miloš Paunović
e927a1f784 fix(ui): get the string fields in no code to use editor and have auto completion back (#7150) 2025-02-03 12:19:31 +01:00
dependabot[bot]
36306495e4 build(deps): bump org.owasp.dependencycheck from 12.0.1 to 12.0.2
Bumps org.owasp.dependencycheck from 12.0.1 to 12.0.2.

---
updated-dependencies:
- dependency-name: org.owasp.dependencycheck
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 12:18:02 +01:00
MilosPaunovic
594d005168 chore(ui): properly pass a prop related to saved searches 2025-02-03 11:52:40 +01:00
Miloš Paunović
c992496fb0 feat(ui): multiple improvements of no code editor (#7146)
* refactor(ui): prevent multiple warning in console by adding inheritAttrs properly

* chore(ui): make plugin selector field not clearable

* feat(ui): allow re-ordering of array items

* fix(ui): remove concurrency when limit set to 0
2025-02-03 11:35:03 +01:00
Bart Ledoux
e15eb55877 fix: sidemenu bring back the gray hover 2025-02-03 11:33:20 +01:00
Bart Ledoux
85ebf49b68 fix: enterprise edition tag in light mode 2025-02-03 11:30:48 +01:00
dependabot[bot]
3a0beabe4f build(deps): bump com.gradleup.shadow from 8.3.5 to 8.3.6
Bumps [com.gradleup.shadow](https://github.com/GradleUp/shadow) from 8.3.5 to 8.3.6.
- [Release notes](https://github.com/GradleUp/shadow/releases)
- [Commits](https://github.com/GradleUp/shadow/compare/8.3.5...8.3.6)

---
updated-dependencies:
- dependency-name: com.gradleup.shadow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:28:29 +01:00
dependabot[bot]
d769b7aad7 build(deps): bump flyingSaucerVersion from 9.11.2 to 9.11.3
Bumps `flyingSaucerVersion` from 9.11.2 to 9.11.3.

Updates `org.xhtmlrenderer:flying-saucer-core` from 9.11.2 to 9.11.3
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.2...v9.11.3)

Updates `org.xhtmlrenderer:flying-saucer-pdf` from 9.11.2 to 9.11.3
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.2...v9.11.3)

---
updated-dependencies:
- dependency-name: org.xhtmlrenderer:flying-saucer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.xhtmlrenderer:flying-saucer-pdf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:28:22 +01:00
dependabot[bot]
f1f0d31864 build(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.33.9 to 0.33.11.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.33.9...v0.33.11)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:26:57 +01:00
dependabot[bot]
bd0e4a5f48 build(deps): bump com.azure:azure-sdk-bom from 1.2.30 to 1.2.31
Bumps [com.azure:azure-sdk-bom](https://github.com/azure/azure-sdk-for-java) from 1.2.30 to 1.2.31.
- [Release notes](https://github.com/azure/azure-sdk-for-java/releases)
- [Commits](https://github.com/azure/azure-sdk-for-java/compare/azure-sdk-bom_1.2.30...azure-sdk-bom_1.2.31)

---
updated-dependencies:
- dependency-name: com.azure:azure-sdk-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:11:33 +01:00
dependabot[bot]
d50f631fb6 build(deps): bump software.amazon.awssdk:bom from 2.30.6 to 2.30.11
Bumps software.amazon.awssdk:bom from 2.30.6 to 2.30.11.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:09:32 +01:00
yuri
26c15a444d fix(ui): amend log lines in Firefox (#7133) 2025-02-03 10:18:19 +01:00
Bart Ledoux
97d12f9bc3 chore: add a test for firefox weird wrap 2025-02-03 10:15:53 +01:00
yuri1969
ae05de4a1c fix(cli): print help on missing parameters
Missing required positional parameters caused just a stacktrace print.

Now such cases print the error message acompanied by command's help.

Examples:

* `./kestra flow namespace update`
* `./kestra flow dot`
2025-02-03 10:06:48 +01:00
yuri1969
625135959c chore(core): fix various compilation warnings
Fixed clear Java compilation warnings.
2025-02-03 09:36:50 +01:00
Loïc Mathieu
e6827f2736 fix(core): remove the dynamic property patterns 2025-02-03 09:31:32 +01:00
Anna Geller
91bf50e837 Update dashboard_home.md 2025-02-02 14:11:14 +01:00
Piyush Bhaskar
64c8e0295c feat(ui): Add a link to the filtered Executions table. (#7129) 2025-02-01 23:01:02 +01:00
brian-mulier-p
1565f3361a fix(ui): restore namespace filter manual typing & various improvements (#7127) 2025-02-01 10:08:14 +01:00
Florian Hussonnois
e2b67f253a ci: fix release workflows 2025-01-31 19:34:18 +01:00
brian.mulier
db0422b142 chore(deps): bump ui-libs to v0.0.125 2025-01-31 18:13:48 +01:00
Nicolas K.
b1b80acbca feat(build): add script to makefile (#7125)
---------
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
Co-authored-by: Ludovic DEHON <tchiot.ludo@gmail.com>
2025-01-31 16:34:11 +01:00
Barthélémy Ledoux
4f9b7f7417 fix: make table links primary instead of purple (#7106) 2025-01-31 16:23:05 +01:00
Barthélémy Ledoux
83c7b2e663 fix: use the proper variable for select header in table (#7107) 2025-01-31 16:22:43 +01:00
GitHub Action
dee76c038a chore(translations): auto generate values for languages other than english 2025-01-31 12:51:00 +00:00
Miloš Paunović
310210286d feat(ui): add finally block to no code editor (#7123) 2025-01-31 13:49:56 +01:00
Florian Hussonnois
555b769aa2 fix(ci): update scripts/workflows for plugins 2025-01-31 12:05:05 +01:00
YannC
e527f0133a fix(ui): Remove useless double click row action
close #7000
2025-01-31 11:57:18 +01:00
Bart Ledoux
631a016e06 fix: avoid clearing selected value on every error
closes #7115
2025-01-31 11:48:49 +01:00
Bart Ledoux
3a8b24edae fix: remove Labels tag type warning 2025-01-31 11:19:15 +01:00
Bart Ledoux
65dd4f9fd6 fix: remove FE warnings on flow edition 2025-01-31 11:17:34 +01:00
Bart Ledoux
a4dcb8dcd6 fix: protect axios JSON parsing 2025-01-31 11:08:33 +01:00
Miloš Paunović
00aa28fc41 feat(ui): allow task re-ordering from no code editor (#7120) 2025-01-31 10:55:05 +01:00
Bart Ledoux
3c7e26c88b build: prevent corepack crash 2025-01-31 10:02:27 +01:00
Loïc Mathieu
4e753c7b98 fix(core): retry flaky test TimeoutTest.timeout()
As its failure cannot be reproduced locally even with 100 repetitions, there is no other choice than retrying it.
2025-01-31 09:47:00 +01:00
Bart Ledoux
1fc0b21071 fix: make sure normal single line table dont' push the build #7018 2025-01-30 22:23:25 +01:00
Bart Ledoux
f17b5802b5 fix: plugin header icon for ticket #4252 2025-01-30 22:22:04 +01:00
Barthélémy Ledoux
5389ec78a1 fix: use the new charts in the flows page (#6970) 2025-01-30 21:24:23 +01:00
Loïc Mathieu
6190d91134 fix(core): subflow labels must not be overriden by parent flow ones 2025-01-30 17:18:28 +01:00
Loïc Mathieu
96f4466f1d fix(cli): retry flaky test FlowCreateOrUpdateCommandTest.runWithDelete.
Adding a retry because it cannot be reproduce to fail locally even with 100 repetitions.
2025-01-30 17:14:01 +01:00
Ludovic DEHON
6ee0e86ca3 fix(core): http request with head and 404 and sending the wrong exception
close #4658
2025-01-30 17:04:51 +01:00
Loïc Mathieu
db4f186bdc fix(core): retry flaky test AbstractRunnerTest.multipleConditionTriggerFailed()
As the failure cannot be reproduce locally even with 100 repetitions of the test.
2025-01-30 16:43:50 +01:00
Loïc Mathieu
9b2c4c9a13 fix(core): subflow validation didn't work anymore 2025-01-30 16:17:30 +01:00
Bart Ledoux
7a37a950bf chore: update palette 2025-01-30 15:58:01 +01:00
Barthélémy Ledoux
a7df59c8bf feat: show a lock on EE only pages (#7093) 2025-01-30 15:54:23 +01:00
Miloš Paunović
5b6fbe9609 feat(ui): improve the task array component (#7095)
* feat(ui): improve the task array component

* chore(ui): replace existing task on editing during creation instead of re-adding them
2025-01-30 14:25:30 +01:00
Florian Hussonnois
d80de4410d fix(ui): fix missing param kind for blueprint in flow editor (#7087)
fix: #7087
2025-01-30 14:16:19 +01:00
Bart Ledoux
0e09f6821c fix: transfer utm parameters correctly 2025-01-30 12:48:53 +01:00
Bart Ledoux
157566300d fix: unlock audit logs in execution 2025-01-30 12:43:54 +01:00
AJ Emerich
e1a4f2e2fc fix(docs): remove custom dashboard website component
https://github.com/kestra-io/kestra/issues/7085
2025-01-30 12:13:55 +01:00
Miloš Paunović
cd822bd349 chore(ui): properly check the existence of fields inside schema
* chore(ui): remove unnecessary binding of listeners

* chore(ui): check the existence of fields
2025-01-30 11:41:15 +01:00
Ludovic DEHON
84447fd428 feat(ui): display attempts status on taskrun on left
close #7030
2025-01-30 11:39:22 +01:00
Miloš Paunović
78060ec2f8 chore(ui): move apps link in left menu just below the flows (#7063) 2025-01-30 11:34:10 +01:00
Miloš Paunović
646c8fa773 fix(ui): amend no code editor breadcrumbs issue (#7054)
* chore(ui): task array component to have margins between lines

* fix(ui): amend no code editor breadcrumbs issue
2025-01-30 11:33:57 +01:00
Bart Ledoux
7a299e51f8 fix: remove some warnings 2025-01-30 11:10:44 +01:00
Bart Ledoux
accbafe132 fix: remove the topbar from namepasce/flows 2025-01-30 11:10:32 +01:00
Bart Ledoux
4915465573 fix(demo): make button clickable with utm link 2025-01-30 11:09:39 +01:00
Bart Ledoux
4234c76b03 build: try and fix FE CI 2025-01-30 10:56:32 +01:00
Loïc Mathieu
03caf38251 fix(cli): repeate flaky tests FileChangedEventListenerTest
This is inherently racy as it's async and watch the filesystem which cannot be done reliabily.
2025-01-30 10:55:17 +01:00
Loïc Mathieu
1931300e98 chore(deps): downgrade Protobuf to 3.25.5
3.25.6 is not compatible with 3.25.5 and Orc still uses 3.25.5
2025-01-30 10:40:43 +01:00
Miloš Paunović
450310b6a5 feat(ui): multiple improvements of no code editor (#7076)
* fix(ui): allow creation of multiple tasks from the no code editor

* chore(ui): make input text be of textarea type for resizability

* chore(ui): allow to add task from topology either before or after the target one
2025-01-30 10:31:09 +01:00
Loïc Mathieu
2777b34385 fix(script): AbstractExecScript.injectDefaults should throw IllegalVariableEvaluationException 2025-01-30 09:57:51 +01:00
Florian Hussonnois
d4d8e326e4 ci: fix workflow docker for all plugins 2025-01-29 17:45:50 +01:00
Florian Hussonnois
fde739a3be ci: fix workflow docker 2025-01-29 17:35:24 +01:00
Florian Hussonnois
f96cbf1ad3 ci: update workflow docker 2025-01-29 17:28:31 +01:00
Florian Hussonnois
84a30d4002 ci: update workflow docker 2025-01-29 17:25:42 +01:00
Loïc Mathieu
6afdbb01fa fix(core): restartForEachItem() is flaky
With this test change, running 100 tests with MySQL pass!
2025-01-29 17:10:50 +01:00
Barthélémy Ledoux
b91336f446 fix: color of tags in executions list (#7035) 2025-01-29 16:57:47 +01:00
Bart Ledoux
f1b2940652 fix: remove default variables for box-shadow 2025-01-29 16:56:22 +01:00
Barthélémy Ledoux
75b8b4a483 fix: use proper css variables for table colors (#7049)
* fix: use proper css variables for table colors

* update ui-libs
2025-01-29 16:54:29 +01:00
Barthélémy Ledoux
c9cb2593bc chore: update "cluster" into "instance" in side menu (#6996)
* chore: update "cluster" into "instance" in side menu

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-01-29 16:51:52 +01:00
Barthélémy Ledoux
e23f34e53f fix(styles): remove background color from edit buttons (#7037) 2025-01-29 16:51:28 +01:00
Barthélémy Ledoux
2461e8cda9 feat: add a shadow to cards (#7038) 2025-01-29 16:50:08 +01:00
Bart Ledoux
b8fac95e1e fix: namespaces should have the card background
closes #6828
2025-01-29 16:48:48 +01:00
YannC
d17fe2548a fix(ui): dynamic format date
close #7015
2025-01-29 15:55:57 +01:00
YannC
b86b4bb160 feat(webserver): if no date provided for dashboard, then use default timewindow 2025-01-29 15:55:57 +01:00
Loïc Mathieu
64108ae24d chore(deps): downgrade protobug
Orc uses an older version.
And probably also other libs that we're using are still in 3.x
2025-01-29 15:51:48 +01:00
brian.mulier
8d00c8a557 feat(ui): don't show deprecated tasks in the plugins list
closes #4526
2025-01-29 15:42:22 +01:00
Loïc Mathieu
07dfaada9c fix(cli): flow watcher should compute plugin defaults
fixes #6908
2025-01-29 15:42:12 +01:00
Florian Hussonnois
0b82b25a48 chore(ci): update release workflows 2025-01-29 15:10:45 +01:00
Florian Hussonnois
5c8c2a5c42 chore(version): update snapshot version 'v0.22.0-SNAPSHOT'. 2025-01-29 14:27:00 +01:00
Florian Hussonnois
f4fdfc2509 chore(version): update to version 'v0.21.0-rc0-SNAPSHOT'. 2025-01-29 14:26:54 +01:00
Bart Ledoux
6dfa08af80 fix: label colors in executions list 2025-01-29 14:09:23 +01:00
Florian Hussonnois
dd8a45f429 chore: remove plugin-langchain 2025-01-29 13:59:57 +01:00
YannC
95ea6536c0 fix(ui): better inputs validation for backfill
close #7008
2025-01-29 13:51:57 +01:00
YannC
f1e2eea13d fix(): Handle correctly group by date field type (#7033)
close #6977
2025-01-29 13:07:12 +01:00
YannC
0661899e46 feat(ui): added Dashboards icons
close #7032
2025-01-29 11:51:02 +01:00
Bart Ledoux
a8ef04b03c fix: realign vue tour ui element for onboarding
closes #7010
2025-01-29 11:29:35 +01:00
Loïc Mathieu
3e8d32cfca fix(script): targetOS must be rendered 2025-01-29 11:03:32 +01:00
Loïc Mathieu
c5e7b42819 fix(script): injectDefault need the runContext
Otherwise you cannot render dynamic properties inside it
2025-01-29 11:03:32 +01:00
Loïc Mathieu
afabdf883e feat(core): remove deprecated properties and reduce duplication 2025-01-29 11:03:32 +01:00
brian.mulier
b846f11b3d fix(core): properties as map is now working properly with expression within base maps 2025-01-29 11:03:32 +01:00
Bart Ledoux
061e4f5ec2 fix: wrong title for apps page 2025-01-29 11:01:31 +01:00
Bart Ledoux
a10f65c1d5 fix: various fixes for the empty pages 2025-01-29 11:00:44 +01:00
Miloš Paunović
815467ec61 feat(ui): multiple improvements of no code editor (#7028)
* chore(ui): properly handle metadata inputs adding and removal

* feat(ui): make sure plugin documentation is properly updated on task selection
2025-01-29 10:56:08 +01:00
brian.mulier
1a23df3a75 fix(cli): doc generation failure handling to avoid infinite wait 2025-01-29 10:37:24 +01:00
Nicolas K.
8f02c39cd1 fix(core): catch linkageError when a class in already in classpath (#7029)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-29 10:36:35 +01:00
Bart Ledoux
966b8fb3a3 feat: add gradient animation on enterprise edition 2025-01-29 10:31:11 +01:00
Bart Ledoux
4375dc3871 feat: add enterprise edition empty to flow edition audit logs 2025-01-29 10:24:36 +01:00
Bart Ledoux
80d1f2d6ca fix: align the flare regardless of language 2025-01-29 10:24:36 +01:00
Florian Hussonnois
1de2a3bdbc fix(core): add de app block to plugin controller (kestra-io/kestra-ee#2773) 2025-01-29 10:17:18 +01:00
Ludovic DEHON
3194a89264 feat(ui): add quick theme switcher 2025-01-29 00:00:30 +01:00
Bart Ledoux
48427f1855 fix: set docId for namespace demo 2025-01-28 21:46:44 +01:00
brian.mulier
a9f36dd47d chore(deps): bump ui-libs to 0.0.119 2025-01-28 21:42:29 +01:00
Bart Ledoux
b8bc50f96f fix flare effect 2025-01-28 21:07:50 +01:00
Rajat Singh
e4016ebb76 fix(ui): easier gantt painting handling
closes #6913
2025-01-28 21:05:37 +01:00
Bart Ledoux
3a01a44b2a fix: debouncing of input validation 2025-01-28 20:59:03 +01:00
Bart Ledoux
34247a9717 fix: ee empty pages background and add flare
closes #2775
2025-01-28 20:52:50 +01:00
GitHub Action
9c56ffa912 chore(translations): auto generate values for languages other than english 2025-01-28 17:46:50 +00:00
Barthélémy Ledoux
64a497490c feat: add demo page for EE only features (#7003)
* update errors file

* feat: add IAM page

* add layout page and empty template

* feat: tenants demo page

* refactor: store context state in vuex

* feat: make docs open automagically

* feat: add missing admin empty pages

* chore: update "cluster" into "instance" in side menu

* feat: add namespace empty pages + some placeholder text

* add custom blueprints empty page

* chore(translations): auto generate values for languages other than english

* fix a bunch of warnings

* fix blueprints title

* feat: add missing link to kestra apps

* chore(translations): auto generate values for languages other than english

* feat: marketing text

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
Co-authored-by: Anna Geller <anna.m.geller@gmail.com>
2025-01-28 18:39:33 +01:00
AJ Emerich
3a8007fba9 docs(custom-dashboard): update example to use metrics and logs (#7007) 2025-01-28 18:20:17 +01:00
brian.mulier
10d6ff8020 chore(deps): bump ui-libs 2025-01-28 17:16:53 +01:00
Loïc Mathieu
82150e6064 fix(core): Dashboard end date should apply to the execution start date
Otherwise you would not be able to have running executions.
It is aligned with what we do for the other dashboard / filter
2025-01-28 17:03:23 +01:00
YannC
035f6b3b69 fix(ui): remove console.log() 2025-01-28 16:38:55 +01:00
brian.mulier
7ec9f6c81d fix(ui): better handling of plugin type to display in doc from editor 2025-01-28 16:22:35 +01:00
YannC
49d64b7f84 fix(ui): better css with in editor doc for dashboard
close #6999
2025-01-28 16:04:38 +01:00
brian.mulier
dc13e9117d fix(ui): handle light theme properly in plugin doc
closes #6973
2025-01-28 15:39:52 +01:00
Florian Hussonnois
9d974ad845 fix(ui): fix blueprints 2025-01-28 15:27:12 +01:00
Loïc Mathieu
151d4d9da7 fix(core): use the MDC from the loggin context 2025-01-28 14:51:37 +01:00
Loïc Mathieu
3640b08634 fix(core): use DCL when creating the logger
Use Double Checked Locking (DCL) to construct the logger to avoid potential half backed logger creation.
2025-01-28 14:51:37 +01:00
Loïc Mathieu
c9095bd871 fix(core): reset the MDC when we clean the run context 2025-01-28 14:51:37 +01:00
YannC
fd4a51259c fix(ui): avoid monaco to show every words used as autocompletion when there is no suggestion 2025-01-28 14:20:04 +01:00
Miloš Paunović
3c478c73eb feat(ui): multiple improvements of no code editor (#6991)
* chore(ui): limit the width of no code editor to a third of the full width

* feat(ui): show only required task properties on top level, else under collapse
2025-01-28 14:19:30 +01:00
YannC
41e4abba77 fix(ui): rename cluster to instance
close #6992
2025-01-28 14:07:34 +01:00
Loïc Mathieu
32112d2ff2 feat(deps): add support for OpenTelemetry metrics 2025-01-28 13:31:46 +01:00
AJ Emerich
db84595bbd (docs): add custom dashboard in app documentation
close #6982
2025-01-28 11:01:09 +01:00
YannC
325c680947 fix(ui): missing image 2025-01-28 10:55:45 +01:00
brian.mulier
cf316eb837 fix(ui): better filtering for yamlUtils.extractFieldFromMaps 2025-01-28 10:36:06 +01:00
brian.mulier
0438fbff64 fix(ui): add log exporters to plugins
closes kestra-io/kestra-ee#2754
2025-01-28 10:36:06 +01:00
brian.mulier
16be38aaf8 fix(core): add log exporters to plugins
part of kestra-io/kestra-ee#2754
2025-01-28 10:36:06 +01:00
brian.mulier
94e42a9dcd fix(core): generate properly taskrunners and log exporters implementations in json schema after adding generic types
closes kestra-io/kestra-ee#2755
2025-01-28 10:36:06 +01:00
GitHub Action
32da58eeef chore(translations): auto generate values for languages other than english 2025-01-28 08:38:08 +00:00
YannC
5f8a453056 feat(ui): Better empty chart view + default view to documentation
relates to #6982
2025-01-28 09:37:37 +01:00
rajatsingh23
60f96dacff chore(ui): amend plus button action on flow editor topology (#6983)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-01-28 08:38:03 +01:00
GitHub Action
2bca260a38 chore(translations): auto generate values for languages other than english 2025-01-27 23:08:18 +00:00
YannC
82de9cbb96 feat(ui): Design change on dashboard creation (#6984)
* feat(ui): Design change on dashboard creation

close #6943

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-01-28 00:07:47 +01:00
brian.mulier
69b5093d66 feat(ui): don't load all revisions, optimize unnecessary calls and add back query params upon changing revisions
closes #6806
2025-01-27 19:28:29 +01:00
YannC
a6ffcf5be6 feat(core): Rename WaitFor task to LoopUntil (#6978) 2025-01-27 19:22:18 +01:00
Ludovic DEHON
a54a3f1f54 chore(deps): update all js deps 2025-01-27 19:16:44 +01:00
Ludovic DEHON
5268c793e1 fix(ui): use color for log on custom charts 2025-01-27 19:12:37 +01:00
GitHub Action
4aa0a57e0b chore(translations): auto generate values for languages other than english 2025-01-27 18:02:51 +00:00
Miloš Paunović
cdc1cceb34 feat(ui): multiple improvements of no code editor (#6981)
* feat(ui): introduced re-worked metadata inputs

* chore(ui): reset panel on each breadcrumb click

* chore(ui): improve styling of metadata inputs section

* chore(ui): improve the metadata inputs section
2025-01-27 19:02:11 +01:00
Ludovic DEHON
125a277aa5 fix(ui): better layout filters comparator 2025-01-27 18:49:28 +01:00
Ludovic DEHON
bcaa613f76 fix(ui): don't display max displayable since not relevant
close kestra-io/kestra-ee#1889
2025-01-27 18:14:28 +01:00
Ludovic DEHON
f1c5555f6e fix(ui): taskrun filters and new charts
close kestra-io/kestra-ee#2760
2025-01-27 18:08:28 +01:00
Ludovic DEHON
a69f8b94ff chore(ui): refactor the namespace flows 2025-01-27 17:43:12 +01:00
Florian Hussonnois
64dcc96497 build: add script and github workflow to tag all plugins 2025-01-27 17:00:03 +01:00
Bart Ledoux
1c08176c99 fix: use new color scheme for execution stats on flows list
related to #6175

better refactor to come later during cooldown
2025-01-27 16:21:10 +01:00
Loïc Mathieu
bd82f5e3b6 fix(core): ThresholdFilter is now stricly lower 2025-01-27 15:53:15 +01:00
Anna Geller
8ecba1b341 fix: Dashboards in plural (#6971)
* Update en.json

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-01-27 15:31:24 +01:00
dependabot[bot]
e94f795d17 chore(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.33.7 to 0.33.9.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.33.7...v0.33.9)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 15:19:02 +01:00
YannC
e0e7bd1323 fix(ui): remove dot from template 2025-01-27 15:17:58 +01:00
dependabot[bot]
4bf46464d5 chore(deps): bump org.jooq:jooq from 3.19.16 to 3.19.18
Bumps org.jooq:jooq from 3.19.16 to 3.19.18.

---
updated-dependencies:
- dependency-name: org.jooq:jooq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:55:25 +01:00
dependabot[bot]
3f94022ee9 chore(deps): bump software.amazon.awssdk:bom from 2.29.37 to 2.30.6
Bumps software.amazon.awssdk:bom from 2.29.37 to 2.30.6.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:53:08 +01:00
dependabot[bot]
8b2f2ce7af chore(deps): bump com.github.ben-manes.versions from 0.51.0 to 0.52.0
Bumps com.github.ben-manes.versions from 0.51.0 to 0.52.0.

---
updated-dependencies:
- dependency-name: com.github.ben-manes.versions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:37:22 +01:00
dependabot[bot]
6bd0960356 chore(deps): bump com.google.guava:guava from 33.3.1-jre to 33.4.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.3.1-jre to 33.4.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:36:46 +01:00
YannC
67920c6e5c feat(ui): make DashboardEdit.vue overrided components (#6954) 2025-01-27 14:36:22 +01:00
dependabot[bot]
3ce8903e10 chore(deps): bump nl.basjes.gitignore:gitignore-reader
Bumps [nl.basjes.gitignore:gitignore-reader](https://github.com/nielsbasjes/codeowners) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/nielsbasjes/codeowners/releases)
- [Changelog](https://github.com/nielsbasjes/codeowners/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nielsbasjes/codeowners/compare/v1.9.0...v1.10.0)

---
updated-dependencies:
- dependency-name: nl.basjes.gitignore:gitignore-reader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:36:15 +01:00
dependabot[bot]
55b21d2697 chore(deps): bump org.assertj:assertj-core from 3.27.0 to 3.27.3
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.3.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.3)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:35:38 +01:00
dependabot[bot]
efa533daa1 chore(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.7.3 to 4.7.4.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.7.3...v4.7.4)

---
updated-dependencies:
- dependency-name: io.micronaut.platform:micronaut-platform
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:35:13 +01:00
dependabot[bot]
ee687ffde3 chore(deps): bump com.github.oshi:oshi-core from 6.6.5 to 6.6.6
Bumps [com.github.oshi:oshi-core](https://github.com/oshi/oshi) from 6.6.5 to 6.6.6.
- [Release notes](https://github.com/oshi/oshi/releases)
- [Changelog](https://github.com/oshi/oshi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oshi/oshi/compare/oshi-parent-6.6.5...oshi-parent-6.6.6)

---
updated-dependencies:
- dependency-name: com.github.oshi:oshi-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:34:34 +01:00
dependabot[bot]
efee504468 chore(deps): bump protobufVersion from 3.25.5 to 4.29.3
Bumps `protobufVersion` from 3.25.5 to 4.29.3.

Updates `com.google.protobuf:protobuf-java` from 3.25.5 to 4.29.3
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

Updates `com.google.protobuf:protobuf-java-util` from 3.25.5 to 4.29.3

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: com.google.protobuf:protobuf-java-util
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:34:08 +01:00
dependabot[bot]
8e07b5b354 chore(deps): bump org.postgresql:postgresql from 42.7.4 to 42.7.5
Bumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.4 to 42.7.5.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.7.4...REL42.7.5)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:33:48 +01:00
dependabot[bot]
bf88ddb21b chore(deps): bump org.owasp.dependencycheck from 11.1.1 to 12.0.1
Bumps org.owasp.dependencycheck from 11.1.1 to 12.0.1.

---
updated-dependencies:
- dependency-name: org.owasp.dependencycheck
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:33:25 +01:00
dependabot[bot]
f494edb889 chore(deps): bump com.google.cloud:libraries-bom from 26.52.0 to 26.53.0
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/java-cloud-bom) from 26.52.0 to 26.53.0.
- [Release notes](https://github.com/googleapis/java-cloud-bom/releases)
- [Changelog](https://github.com/googleapis/java-cloud-bom/blob/main/release-please-config.json)
- [Commits](https://github.com/googleapis/java-cloud-bom/compare/v26.52.0...v26.53.0)

---
updated-dependencies:
- dependency-name: com.google.cloud:libraries-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:33:01 +01:00
dependabot[bot]
14f35021c2 chore(deps): bump com.github.ben-manes.caffeine:caffeine
Bumps [com.github.ben-manes.caffeine:caffeine](https://github.com/ben-manes/caffeine) from 3.1.8 to 3.2.0.
- [Release notes](https://github.com/ben-manes/caffeine/releases)
- [Commits](https://github.com/ben-manes/caffeine/compare/v3.1.8...v3.2.0)

---
updated-dependencies:
- dependency-name: com.github.ben-manes.caffeine:caffeine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:32:22 +01:00
YannC
a1a1fbc31a fix(ui): missing translations 2025-01-27 14:27:21 +01:00
Loïc Mathieu
2359c4f744 fix(core, jdbc): Count task 2025-01-27 13:21:58 +01:00
Miloš Paunović
1bcc22a861 feat(ui): multiple improvements of no code editor (#6951)
* chore(ui): persist change of editor type on each toggle

* chore(ui): remove topology-only view from editor
2025-01-27 12:07:55 +01:00
Ludovic DEHON
adb8d9a9d3 fix(ui): let filter dropdown fit width of the content 2025-01-27 12:01:40 +01:00
Ludovic DEHON
0a93b10a72 feat(ui): pretty layout for status on filters
relate to #5127
2025-01-27 12:01:40 +01:00
yuri
8361a206fa chore(cli): improve CLI help messages (#6920)
* chore(cli): improve CLI help messages

* Improved styling to make the help easily readable.
* Fixed various copy&paste issues.
* Improved wording a bit.

* Fix copy&paste
2025-01-27 11:55:54 +01:00
Loïc Mathieu
7cf4955814 feat(core, jdbc): change the state of a subflow restart parent execution 2025-01-27 11:29:17 +01:00
Loïc Mathieu
4e3ed33a48 feat(ui, webserver): rename "Change status" to "Change state" and enhance the infos 2025-01-27 11:29:17 +01:00
Loïc Mathieu
4f2d35fc4a feat(core): add system.restarted: true label when changing the status of a task 2025-01-27 11:29:17 +01:00
Florian Hussonnois
c52fdd064c fix(webserver): ensure queues are not closed in nioEventLoop 2025-01-27 11:21:53 +01:00
Ludovic DEHON
f8ff2e0204 fix(core): fix unit test on DocumentationGeneratorTest 2025-01-27 10:47:59 +01:00
Anna Geller
34751cfdd4 docs: add nested loop example (#6948) 2025-01-26 21:56:44 +01:00
Ludovic DEHON
4f96f81241 fix(ui): namepsace > blueprint display 404 page
close kestra-io/kestra#6917
2025-01-25 23:33:34 +01:00
Anna Geller
fedb388e53 fix: Return task docs 2025-01-25 12:31:25 +01:00
Bart Ledoux
c805dc490f fix: see all is-text button color
closes #6898
2025-01-25 11:47:46 +01:00
Bart Ledoux
2e23269a90 fix: update ui-libs for docs 2025-01-25 11:35:35 +01:00
GitHub Action
cb7ee6a0b2 chore(translations): auto generate values for languages other than english 2025-01-25 07:20:32 +00:00
Piyush Bhaskar
69dda0ea65 chore(ui): improvements of welcome page (#6938) 2025-01-25 08:19:47 +01:00
Ludovic DEHON
715226dee4 chore(deps): update all js deps 2025-01-24 23:38:13 +01:00
Ludovic DEHON
36675d90f4 feat(ui): new 404 page layout 2025-01-24 23:29:23 +01:00
YannC
5151f23cf5 feat(ui): improve custom dashboard access (#6940)
relates to kestra-io/kestra-ee#2372
2025-01-24 22:34:13 +01:00
Ludovic DEHON
17e0340ab4 fix(ui): invalid hover on left menu for white theme 2025-01-24 21:53:54 +01:00
Florian Hussonnois
3073d9e925 fix(script): update release-plugins 2025-01-24 21:46:53 +01:00
Florian Hussonnois
4d7d8e008a chore(script): update release-plugins to support pushReleaseVersionBranch 2025-01-24 21:44:12 +01:00
Florian Hussonnois
83e99edcff chore(build): fix release-plugins script 2025-01-24 21:04:49 +01:00
Florian Hussonnois
01e565f3cd chore(build): fix .plugins file 2025-01-24 21:04:49 +01:00
Miloš Paunović
87eb855ace chore(ui): start product tour by clicking on first card on welcome page (#6935) 2025-01-24 18:42:29 +01:00
Miloš Paunović
effb5a279b chore(ui): start product tour by clicking on first car on welcome page (#6934) 2025-01-24 18:13:34 +01:00
Miloš Paunović
460e037674 fix(ui): save content to proper file using the namespace file editor (#6931) 2025-01-24 17:27:36 +01:00
brian.mulier
275951011f fix(core): Flow equalsWithoutRevision don't use serialization to compare flows so that map orders don't matter
closes #6928
2025-01-24 17:00:47 +01:00
Florian Hussonnois
d79e40dd98 build: add new project properties for release 2025-01-24 16:55:28 +01:00
Miloš Paunović
aa22f5041c feat(ui): multiple improvements of no code editor (#6923)
* chore(ui): make sure to check if property exists

* chore(ui): prevent auto-focus of editor fields

* chore(ui): re-order the list of visible fields in the no code editor

* chore(ui): make concurrency field work in the main form

* chore(ui): initial work on passing component panel to store
2025-01-24 16:48:45 +01:00
brian.mulier
09ef115074 fix(ui): cleanup imports and get rid of some warnings 2025-01-24 12:38:25 +01:00
brian.mulier
ae408209fe fix(ui): more explicit else-if branches for switch view 2025-01-24 12:36:32 +01:00
brian.mulier
fccaef4622 fix(ui): remove some warnings about missing props for blueprints 2025-01-24 12:33:19 +01:00
Ludovic DEHON
6bc66d66ea fix(ui): left menu is blinking on blueprint page 2025-01-24 08:05:29 +01:00
Ludovic DEHON
ae2d55570f fix(ui): rollouver on side menu was blinking 2025-01-24 08:01:11 +01:00
Ludovic DEHON
c795f3756c fix(ui): add confirmation message for crud on custom dashboard
close kestra-io/kestra-ee#2468
2025-01-24 07:50:38 +01:00
Ludovic DEHON
a97448f19d fix(ui): proper log display without multiple line 2025-01-23 22:46:52 +01:00
Ludovic DEHON
fc84ee3e59 fix(ui): make disabled select less visible 2025-01-23 22:46:52 +01:00
Miloš Paunović
9501880044 feat(ui): improvements of no code editor (#6916)
* feat(ui): improve the one of task section

* chore(ui): change expected prop type to match what is sent

* chore(ui): allow number input fields to span full width

* chore(ui): remove disabled parameter from buttons which don't need it
2025-01-23 19:43:27 +01:00
Florian Hussonnois
9781ff1563 fix(ui): add missing use button into blueprin details 2025-01-23 19:08:22 +01:00
Ludovic DEHON
61e0668ad8 chore(cli): invalid description on worker thread 2025-01-23 18:37:08 +01:00
Ludovic DEHON
f08bd94d57 feat(ui): new gantt layout to display taskrun state & duration with also attempts one
close #6103
2025-01-23 18:37:08 +01:00
Florian Hussonnois
699e232dd6 fix(ui): fix use button for dashboard blueprint 2025-01-23 17:30:09 +01:00
Ludovic DEHON
c994762762 fix(ui): prevent responsive on monaco editor for diff
close #4777
2025-01-23 16:14:45 +01:00
YannC
0eb13ba433 fix(webserver): continue to warn, but do not return trigger with missing flow (#6905)
close #5998
2025-01-23 15:53:47 +01:00
Mathieu Gabelle
22157fd717 refactor: migrate plugin.core.log to dynamic properties (#6732) 2025-01-23 15:52:01 +01:00
yuri
0a047a7b75 fix(ui): amend flow concurrency overview
closes #6811
2025-01-23 15:48:48 +01:00
Florian Hussonnois
8e5ffe8355 fix(ui): fix blueprints use button 2025-01-23 15:39:55 +01:00
Miloš Paunović
204563530e feat(ui): improve the one of task section (#6903) 2025-01-23 15:07:05 +01:00
Miloš Paunović
132d70dadd feat(ui): add the ability to remove tasks and other items (#6902) 2025-01-23 13:54:10 +01:00
Florian Hussonnois
2e18c295ed fix(ui): fix multiple issues on blueprints 2025-01-23 13:36:34 +01:00
Miloš Paunović
4bb2fd50eb feat(ui): make the one of component work properly (#6900) 2025-01-23 13:14:48 +01:00
GitHub Action
c6d69762c4 chore(translations): auto generate values for languages other than english 2025-01-23 11:52:03 +01:00
Florian Hussonnois
ad719a97f9 feat: add support for multiple blueprint kinds
related-to: kestra-io/kestra-ee#2479
2025-01-23 11:52:03 +01:00
Miloš Paunović
6b4e1cac94 fix(ui): properly handle file explorer visibility in namespace files section (#6895) 2025-01-23 11:06:01 +01:00
brian.mulier
0ddf9d6001 chore(deps): bump @kestra-io/ui-libs to 0.0.114 2025-01-23 10:06:50 +01:00
Shruti Mantri
e9e853cdfc fix: add title to TemplatedTask (#6891)
* fix: add title to TemplatedTask

* Update TemplatedTask.java

* Update core/src/main/java/io/kestra/plugin/core/templating/TemplatedTask.java

---------

Co-authored-by: Will Russell <will@wrussell.co.uk>
Co-authored-by: Anna Geller <anna.m.geller@gmail.com>
2025-01-23 10:03:18 +01:00
Miloš Paunović
bca1797321 chore(ui): make sure input pair component updates only what's needed (#6892) 2025-01-23 09:36:49 +01:00
brian.mulier
1b0ce4d6a3 feat(ui): new plugin doc redesign 2025-01-23 00:04:57 +01:00
Mathieu Gabelle
10bc70c858 chore(deps): upgrade bouncycastle to 1.80 (#6881) 2025-01-22 17:24:13 +01:00
YannC
2192ef3365 fix(): JsonSchema dashboard doc 2025-01-22 16:26:52 +01:00
Loïc Mathieu
116f59dc89 chore(deps): upgrade Micrometer to 0.14.3 2025-01-22 16:03:28 +01:00
Miloš Paunović
24f8afae82 feat(ui): re-work the task array field for the no code editor (#6885)
* chore(ui): make the task save button span fully

* chore(ui): make the task save button have the proper top margin

* feat(ui): re-work the task array field for the no code editor
2025-01-22 14:54:11 +01:00
Miloš Paunović
ad304e9d90 chore(ui): handle task dict type fields (#6884)
* chore(ui): rename the single namespace editor tab to files

* chore(ui): handle task dict type fields
2025-01-22 13:42:46 +01:00
Miloš Paunović
027cde4a21 fix(ui): amend namespace editor problem (#6883)
* chore(ui): make input number be full width

* chore(ui): wrap task object inside a form element

* fix(ui): amend namespace editor problem
2025-01-22 12:03:34 +01:00
Ludovic DEHON
1926ad5e0c fix(core): fromIon is reading only the first rows by default, adding a parameter to read all rows 2025-01-22 10:09:20 +01:00
Loïc Mathieu
e87b97a2e1 feat(*): OpenTelemetry traces
Fixes #6149
2025-01-22 09:51:12 +01:00
Miloš Paunović
33308c49c8 chore(deps): regular dependency update (#6877) 2025-01-22 09:03:35 +01:00
GitHub Action
a011705728 chore(translations): auto generate values for languages other than english 2025-01-22 07:28:30 +00:00
Miloš Paunović
b823d9c28b feat(ui): improvements of no code editor (#6876) 2025-01-22 08:25:58 +01:00
Bart Ledoux
40c43256a6 fix: logs page redirect 2025-01-21 16:22:36 +01:00
Bart Ledoux
306d4ecd78 feat: simplify logs chunks by packaging markdown 2025-01-21 16:22:36 +01:00
YannC
db496a8faf fix(Count): fix Count task 2025-01-21 15:27:13 +01:00
Bart Ledoux
b542dda8e8 feat: export oss chunks of vite config 2025-01-21 14:27:30 +01:00
YannC
c337d55273 feat(core): Schema title annotation for Custom Dashboard Filter 2025-01-21 14:22:35 +01:00
Barthélémy Ledoux
f8b2056b3f fix: update the vite config to use the rollup dependencies properly (#6853)
* fix: update the vite config to use the rollup dependencies properly

* add comments
2025-01-21 14:33:52 +02:00
Ludovic DEHON
4d4963abd6 feat(tasks): introduce an Assert tasks 2025-01-21 10:25:36 +01:00
Ludovic DEHON
4d074cb052 feat(core): add a randomPort pebble function 2025-01-21 10:25:28 +01:00
Loïc Mathieu
01a77aff04 fix(core): randomInt receive a Long not an Integer 2025-01-21 10:00:16 +01:00
Shruti Mantri
f5bc5869e4 fix: correct the condition name (#6843) 2025-01-20 17:35:26 +00:00
Loïc Mathieu
1a130daa21 fix(core): Avoid double STRING schema type for types that resolves to a String
Fixes #6821
2025-01-20 17:11:33 +01:00
Piyush Bhaskar
b48c6c3dd4 chore(ui): amend flow export method (#6835) 2025-01-20 14:59:06 +01:00
Bart Ledoux
7e926fc8ec fix(sidebar): implement the _hover class in addition to hover pseudo class 2025-01-20 14:50:41 +01:00
Mathieu Gabelle
914bd94498 refactor: migrate plugin.core.namespace to dynamic properties (#6832) 2025-01-20 14:02:25 +01:00
Loïc Mathieu
02831295bf fix(core): deprecated allowFailed should not have any default
Fixes #6791
2025-01-20 13:56:11 +01:00
Shruti Mantri
4dee038374 fix: correct the description for DayWeek condition (#6834) 2025-01-20 12:43:27 +00:00
Mathieu Gabelle
25ca9f74e5 refactor: migrate plugin.core.log to dynamic properties (#6823) 2025-01-20 13:30:04 +01:00
Aabhas Sao
4b2c10d6e2 feat(core): validate in editor if subflow with namespace present (#6717)
* feat(core): validate in editor if subflow with namespace present

* fix(): added test + return all violations instead of only one

---------

Signed-off-by: Aabhas Sao <aabhassao0@gmail.com>
Co-authored-by: YannC <ycoornaert@kestra.io>
2025-01-20 11:39:34 +01:00
Bart Ledoux
05e5af73ab fix: color of active item in sidebar 2025-01-20 11:22:12 +01:00
Mathieu Gabelle
a6d746ae5a refactor: migrate package plugin.core.execution to dynamic properties (#6708)
migrate Count
migrate Fail
migrate PurgeExecutions
migrate Resume
2025-01-20 11:05:11 +01:00
Miloš Paunović
96780a9760 chore(ui): show status label on dialog 2025-01-20 10:49:25 +01:00
Barthélémy Ledoux
c5eef81a6e feat: various design fixes asked by nico (#6798) 2025-01-20 09:34:39 +01:00
dependabot[bot]
e36ee1d6ba chore(deps): bump katex from 0.16.20 to 0.16.21 in /ui (#6816)
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.20 to 0.16.21.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.20...v0.16.21)

---
updated-dependencies:
- dependency-name: katex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-18 08:36:56 +01:00
Anna Geller
aa869eba1d closes https://github.com/kestra-io/kestra/issues/6814 2025-01-17 21:06:51 +01:00
aeSouid
1ddb544c36 Plugin: Define the langchain4j ollama, openai & gemini plugins in the .plugin file list (#6813) 2025-01-17 18:30:14 +01:00
Florian Hussonnois
207e8c3a70 fix(core): fix some labels are lost when having same prefix key
This commit fix an issue where only a single system label was injected in the run context

fix: kestra-io/kestra-ee#2697
2025-01-17 17:12:03 +01:00
GitHub Action
e037e548b2 chore(translations): auto generate values for languages other than english 2025-01-17 14:12:29 +00:00
Miloš Paunović
d77cfe8ced fix(ui): improve the editing of labels and variables (#6810) 2025-01-17 15:11:53 +01:00
Miloš Paunović
9cd1e0c7b1 fix(ui): amend the ability to create tasks (#6808) 2025-01-17 13:28:39 +01:00
Miloš Paunović
969faba1f0 feat(ui): improvements of no code editor (#6804)
* chore(ui): enhance toggle button for switching between `YAML` and `No Code` editors

* chore(ui): remove the export flow button from main section

* chore(ui): remove the unused context menu options

* chore(ui): add margin after the last entry for variables and inputs

* chore(ui): only show save button on task creation if one is selected

* chore(ui): replace plugin default component from input to editor type

* chore(ui): replace retry and outputs component from input to editor type

* chore(ui): move all general properties to the top level
2025-01-17 13:17:37 +01:00
Bart Ledoux
7f048afca5 add full logline stories 2025-01-17 10:57:34 +01:00
Bart Ledoux
51088c819a fix logline css variables 2025-01-17 10:57:34 +01:00
Miloš Paunović
a9c43608ff fix(ui): properly encode text filter parameter to url string (#6803) 2025-01-17 08:54:07 +01:00
Bart Ledoux
960a1bba49 fix: reduce log borders on gantt chart logs 2025-01-16 15:57:36 +01:00
Ludovic DEHON
246602f9fd fix(core): ForEach failed with errors, finally and concurrency = 0 2025-01-16 15:48:02 +01:00
Bart Ledoux
979c131b99 fix: el-empty needed a backdrop 2025-01-16 15:23:49 +01:00
Miloš Paunović
52aa0d6487 chore(test): add required attributes for e2e test (#6797) 2025-01-16 15:22:05 +01:00
Bart Ledoux
f5dc67f0ef fix: update custom upload button 2025-01-16 15:10:11 +01:00
Ludovic DEHON
9a19c01087 fix(jdbc): summary count should be a prefix on the namespace 2025-01-16 15:09:49 +01:00
Ludovic DEHON
d3efcdd032 chore(deps): update testcontainers to 1.20.4 2025-01-16 14:39:49 +01:00
Ludovic DEHON
554ea5850e fix(ui): flows overview are not scoped to current flow
close #6778
2025-01-16 14:39:49 +01:00
rajatsingh23
b573f1679d chore(ui): change filter value by clicking on already selected one (#6705) 2025-01-16 12:40:03 +01:00
CoderKill
018afab378 fix(webserver): add check in file creation path for _flows* (#6228) 2025-01-16 12:06:45 +01:00
Saumya Gaur
a4cf1cd74f chore(ui): mark places where we need to replace old charts with the new ones (#6623) 2025-01-16 11:49:07 +01:00
GitHub Action
3435e345ed chore(translations): auto generate values for languages other than english 2025-01-16 10:19:01 +00:00
Piyush Bhaskar
595b94e2aa feat(ui): allow exporting the flow to yaml file (#6610)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2025-01-16 11:18:40 +01:00
Loïc Mathieu
b2c411956e fix(core): Property with default
Fixes #6744
2025-01-16 11:16:06 +01:00
Bart Ledoux
4c6f8bd906 fix: topology css issues 2025-01-16 11:13:45 +01:00
GitHub Action
46c3e3ff74 chore(translations): auto generate values for languages other than english 2025-01-16 10:03:06 +00:00
Hashim Khalifa
fb66d42376 chore(ui): add empty view on flow concurrency page (#6640)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-01-16 11:02:21 +01:00
Barthélémy Ledoux
4227e1d682 refactor: avoid usage of runtime template to smaller bundle (#6779) 2025-01-16 10:50:18 +01:00
Barthélémy Ledoux
106816bf37 feat: add a story for executions list (#6784) 2025-01-16 10:49:57 +01:00
Barthélémy Ledoux
f8279c6b01 fix: add ellipsis for Namespace charts (#6730) 2025-01-16 10:43:21 +01:00
MilosPaunovic
fdbe16387d chore(ui): amend dialog close button styling 2025-01-16 10:42:19 +01:00
Piyush Bhaskar
aa450d6e4b chore(ui): mark taskruns with multiple attemps in gantt view (#6721) 2025-01-16 10:40:50 +01:00
rajatsingh23
8b714f707b chore(ui): amend width of execute flow inputs section (#6720)
Co-authored-by: Piyush Bhaskar <102078527+Piyush-r-bhaskar@users.noreply.github.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2025-01-16 10:00:24 +01:00
Miloš Paunović
8a3bb078b8 chore(deps): regular dependency update (#6790) 2025-01-16 09:08:49 +01:00
GitHub Action
3c6aa69808 chore(translations): auto generate values for languages other than english 2025-01-16 07:53:45 +00:00
Miloš Paunović
e5fc7d32b4 chore(translations): amend translation key/value pairs (#6788) 2025-01-16 08:53:20 +01:00
Ludovic DEHON
9f12f9a63b fix(core): flow should not continue tasks when having a finally 2025-01-15 21:51:47 +01:00
Ludovic DEHON
f1c147cc4b fix(core): parallel task should not resolved error and finally in parallel 2025-01-15 21:51:38 +01:00
Ludovic DEHON
45bd08c26e chore(deps): update common dependency 2025-01-15 18:37:17 +01:00
MilosPaunovic
33c5cb507a chore(ui): amend passing of disabled property to no code editor 2025-01-15 18:37:11 +01:00
Florian Hussonnois
7b0f2e9160 fix(jdbc): update test config for flaky test on liveness (#6656) 2025-01-15 18:29:53 +01:00
Miloš Paunović
821fd1219c feat(ui): introduce the revamped no code editor (#6787) 2025-01-15 18:28:20 +01:00
Florian Hussonnois
81a4e86452 fix(core): remove 64 characters limitation for displayName (#6470) 2025-01-15 18:28:01 +01:00
Florian Hussonnois
94545fe2f6 fix(jdbc): ensure JdbcIndexer is only closed once 2025-01-15 18:06:05 +01:00
Mathieu Gabelle
662ac61e34 refactor: migrate package plugin.core.templating to dynamic properties (#6775) 2025-01-15 15:18:31 +01:00
Mathieu Gabelle
c4ec56f1e7 refactor: migrate package plugin.core.storage to dynamic properties (#6770) 2025-01-15 10:34:16 +01:00
Mathieu Gabelle
ca8837f310 refactor: migrate package plugin.core.state to dynamic properties (#6755) 2025-01-15 09:44:17 +01:00
Barthélémy Ledoux
b3b3a5b85a fix: allow custom translations to be passed (#6752)
* feat: allow extra translation sources in i18n

* refactor(i18n): properly laod i18n translations (no more merge)

* update comments

* fix eslint
2025-01-15 09:32:09 +01:00
Loïc Mathieu
717d5560ad feat(webserver, ui): avoid cancelled SSE connection from following exec
Send a fake "start" event from the Execution following endpoint so that the UI didn't cancell it.

I'm not sure when the UI would cancel the SSE connection but it can ocurs if any of the view that opens an SSE connection are left but no event are received yet.
Sending a fake event immediatly lower the risk of occuring.
2025-01-15 09:25:15 +01:00
Ludovic DEHON
708c1127c9 chore(core): reduce log level of property validation 2025-01-15 08:43:34 +01:00
Ludovic DEHON
52aba32c14 fix(ui): missing icons for finally
relate to #5643
2025-01-14 17:00:31 +01:00
Bart Ledoux
fbfab90739 fix(#6745) vue flow needs a height on the container 🥸 2025-01-14 16:05:32 +01:00
Ludovic DEHON
e98543822c fix(core): graph on dag are not attaching finally at the end of the dag task 2025-01-14 14:00:53 +01:00
Mathieu Gabelle
daddcd4d50 refactor: migrate package plugin.core.debug to dynamic properties (#6697)
migrate Return task
migrate Echo task
migrate associated test using these tasks
2025-01-14 13:32:37 +01:00
Loïc Mathieu
f217d33768 fix(core): always close the queue after receive
May improve test flakyness
2025-01-14 11:54:04 +01:00
Loïc Mathieu
0c0ff37c69 fix(core, ui): send a "start" event to be sure the UI receive the SSE
The UI only store a reference to the logs SSE when receive the first event.
In case a flow didn't emit any log, or the logs tab is closed before any logs is emitted, the UI will not have any reference to the SSE so the SSE connection would stay alive forever.
Each SSE connection starts a thread via the logs queue, creating a thread leak.

Sending a first "start" event makes sure the UI has a reference to the SSE.
2025-01-14 09:39:58 +01:00
Ludovic DEHON
c73305921e fix(jdbc): batch query expand query and lead to overflow of metrics 2025-01-13 21:54:10 +01:00
Mathieu Gabelle
4de65e7a3d refactor: migrate plugin.core.output to dynamic properties
migrate OutputValues task
2025-01-13 18:07:57 +01:00
AJ Emerich
ac8a05cb35 chore(docs): split pause title and description (#6733)
close kestra-io/docs#2072
2025-01-13 17:13:05 +01:00
Ludovic DEHON
0d1710d0e6 feat(core): introduce an finally block on flow & flowable (#6686)
close #6649
2025-01-13 17:11:57 +01:00
Bart Ledoux
55b672033d fix: storybook - only i18nize once in preview 2025-01-13 14:32:07 +01:00
Mathieu Gabelle
f2e4a35313 refactor: address sonar issues 2025-01-13 13:08:27 +01:00
Mathieu Gabelle
d052a87c0b refactor: migrate package plugin.core.kv to dynamic properties
migrate Delete, Get, Set, GetKeys from KV to dynamic properties
2025-01-13 13:08:27 +01:00
Mathieu Gabelle
589638cc3d refactor: add @deprecated javadoc message : sonar 2025-01-13 12:56:06 +01:00
Mathieu Gabelle
a934414db4 refactor: migrate package plugin.core.http to dynamic properties
migrate Download task
migrate Request task
migrate Trigger task
migrate HttpConfiguration class
2025-01-13 12:56:06 +01:00
Bart Ledoux
e4698b0f10 fix: async docs were failing beause of issue in ui-libs MDC 2025-01-13 12:09:27 +01:00
Bart Ledoux
6691575fa0 fix: improve storybook styles 2025-01-13 12:06:29 +01:00
Bart Ledoux
2a56ba88c4 chore: remove an unwanted comment 2025-01-13 11:39:25 +01:00
AJ Emerich
828d9a789f add taskrun.iteration (#6723)
Add mention of taskrun.iteration like in ForEachItem
2025-01-13 11:15:44 +01:00
Bart Ledoux
987f4914a6 keep active state on hover 2025-01-13 10:00:22 +01:00
Bart Ledoux
6a5ec8dcfc style(ui): update SideBar link styles to match design 2025-01-10 17:39:00 +01:00
Barthélémy Ledoux
8d57f8f0b2 refactor: add async loading for better performance (#6643)
Co-authored-by: YannC <37600690+Skraye@users.noreply.github.com>
2025-01-10 17:26:29 +01:00
AJ Emerich
f8a7299daf Add description to Write.java (#6710)
* Add description to Write.java

* fix java compile error

Add comma
2025-01-10 17:23:44 +01:00
Nicolas K.
c32d158ab6 feat(core-ee): change log shipper properties names and use KV instead of state store (#6709)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-10 17:05:24 +01:00
Florian Hussonnois
159927d39e fix(ui): fix reset of flow import input 2025-01-10 16:46:51 +01:00
Florian Hussonnois
17120cff8e refactor(webserver): move method to read source file/archive to HasSource interface 2025-01-10 16:46:51 +01:00
Florian Hussonnois
16a7e06c56 chore(ui): add utility method extratFileNameFromContentDisposition
Changes:
* add a new utility method to extracts a filename from an HTTP 'Content-Disposition` header.

part-of: kestra-io/kestra-ee#2412
2025-01-10 16:46:51 +01:00
Florian Hussonnois
d96742d7dd refactor(core): add new interface HasSource
Changes:
* add new interface HasSource
* move method for zipping flows to HasSource

part-of: kestra-io/kestra-ee#2412
2025-01-10 16:46:51 +01:00
Loïc Mathieu
1c705e2d7b fix(core): If with only disabled tasks
Fixes #6658
2025-01-10 15:26:49 +01:00
Bart Ledoux
bab508a51e update color palette 2025-01-10 15:21:06 +01:00
Loïc Mathieu
b9a74b8759 fix(jdbc): resubmitting a worker job running should create a new attempt 2025-01-10 09:54:11 +01:00
YannC
3c19c910aa fix(*): create real chart preview endpoint 2025-01-10 08:39:28 +01:00
Nicolas K.
4ab8748f4c feat(core-ee); change log record model and don't use opentelemetry an… (#6700)
* feat(core-ee); change log record model and don't use opentelemetry anymore

* fix(core): unit test

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-09 18:08:01 +01:00
Barthélémy Ledoux
cbff628f23 Implement stylelint and refactor CSS variables for consistency (#6645) 2025-01-09 17:28:19 +01:00
Nicolas K.
6e7df7f25c fix(core): NPE in ExecutableUtils (#6699)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-09 17:09:47 +01:00
Nicolas K.
2f4bb05561 feat(core-ee): remove pagination from fetchAsync and use logRecord attributes (#6698)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-09 16:44:03 +01:00
brian.mulier
063ac10099 chore(deps): bump micronaut-platform to 4.7.3 2025-01-09 13:25:48 +01:00
Ludovic DEHON
841f32a9f6 fix(core): plugin default was not validating correctly boolean methods 2025-01-09 12:56:55 +01:00
AJ Emerich
7afba75ed8 update Exit.java task description (#6695) 2025-01-09 12:18:46 +01:00
YannC
501a5d3ff4 fix(core): handle runIf inside workingDirectory (#6690)
close #6689
2025-01-09 11:40:49 +01:00
YannC
1b615c97b1 fix(core): Continue WaitFor loop if tasks are not failed (#6572)
close #6031
2025-01-09 11:40:34 +01:00
Bart Ledoux
9b59c75d2a refactor: remove bootstrap color from sidebar 2025-01-09 11:11:06 +01:00
Bart Ledoux
035a27c915 refactor: remove spacer form sidebar 2025-01-09 11:02:15 +01:00
Bart Ledoux
86cb11fb81 fix: logline when there is a {{ 2025-01-09 10:58:39 +01:00
Bart Ledoux
20276a9e7a refactor: removed unused css in sidebar 2025-01-09 10:39:51 +01:00
Loïc Mathieu
a994120d36 feat(core): add outputs and ID to log shippers 2025-01-09 09:39:52 +01:00
Bart Ledoux
e09e21633a fix(ui): update CSS variable for log icon color in LogLine component 2025-01-08 23:19:28 +01:00
Bart Ledoux
a8be084e79 feat(ui): add status remapping to status component to match the real name of the CSS vars 2025-01-08 23:05:05 +01:00
Malay Dewangan
1476064b0a feat: add support for deleting empty namespace parent folders (#5699)
* feat(namespace): add support for deleting empty parent folders

* fix: add builder default for deleteparentfolder key

* Update DeleteFiles.java

* chore(test): missing tests

* chore(test): missing tests

---------

Co-authored-by: YannC <ycoornaert@kestra.io>
2025-01-08 17:20:09 +01:00
GitHub Action
4e543a29ca chore(translations): auto generate values for languages other than english 2025-01-08 16:42:05 +01:00
Loïc Mathieu
b3ed3d8dfb feat(core, ui, webserver): add replay system labels
- Add system.replay to executions that are a replay
- Add system.replayed to executions that have been replayed

Fixes #6682
2025-01-08 16:42:05 +01:00
Nicolas K.
132d4541c2 feat(core): add log record serialization (#6683)
* feat(core): add log record serialization

* feat(core): add serialization to log record

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-08 15:43:45 +01:00
brian.mulier
6f43ab1443 chore(deps): bump ui-libs 2025-01-08 15:05:41 +01:00
Bart Ledoux
155f9b9d76 fix: fix no execution layout 2025-01-08 15:01:32 +01:00
Loïc Mathieu
c5e23d43df feat(core): validate tasks and triggers with dynamic properties 2025-01-08 14:24:11 +01:00
nKwiatkowski
81f08f00c6 feat(core): add partial fix to micronaut hibernate validator and ValueExtractor 2025-01-08 14:24:11 +01:00
YannC
35ffe7e635 fix(webserver): reset correctly nextExecutionDate when enabling schedule
close #6681
2025-01-08 13:54:14 +01:00
GitHub Action
a1238a9473 chore(translations): auto generate values for languages other than english 2025-01-08 12:10:20 +00:00
YannC
6c205ee1b6 feat(*): fixes and improvements for custom dashboard (#6684)
* feat(*): fixes and improvements for custom dashboard

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: GitHub Action <actions@github.com>
2025-01-08 13:09:36 +01:00
Ludovic DEHON
47d2b09382 chore(test): minor pebble error 2025-01-08 09:41:57 +01:00
Ludovic DEHON
f2a3ad557a fix(core): worker log are displaying the wrong state on terminated tasks 2025-01-08 08:55:09 +01:00
Ludovic DEHON
317284dfee test(core): add configurable timeout on ExecuteFlow 2025-01-07 19:56:59 +01:00
Ludovic DEHON
c265b49a8e feat(core): add taskRunner output on ScriptOutput to get detailled information on underlying taskrunner 2025-01-07 17:57:18 +01:00
Aabhas Sao
111493c5c8 fix(core): correctly displayed errors icons (#6654)
close #5643
2025-01-07 15:41:35 +01:00
Ludovic DEHON
4fa6adc9c9 chore(core): move builder default on TableColumnDescriptor 2025-01-07 15:32:07 +01:00
Ludovic DEHON
bccd95345f test(core): request test use an internal https server to be stable
self-signed.badssl.com is not working anymore
2025-01-07 14:39:30 +01:00
GitHub Action
4dbf938de3 chore(translations): auto generate values for languages other than english 2025-01-07 11:47:35 +01:00
Loïc Mathieu
576e023d90 feat(ui): add an alert block for restarted execution 2025-01-07 11:47:35 +01:00
Loïc Mathieu
1e36d1eb2a feat(core): restarting Subflow
Fixes https://github.com/kestra-io/kestra-ee/issues/1399
2025-01-07 11:45:10 +01:00
Nicolas K.
a5469c3b4e feat(core): add run context to log shipper (#6651)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-07 11:31:02 +01:00
Bart Ledoux
869c6877b7 fix: set the flowEditor docId on new 2025-01-06 22:19:06 +01:00
Ludovic DEHON
d67d44b93a fix(core): http proxy was not used 2025-01-06 21:55:21 +01:00
Nicolas K.
75f55c23ee feat(core-ee): add log shipper first implementation (#6596)
* feat(core-ee): add log shipper first implementation

* fix(core): change state condition on asynchronous test

* fix(core): exit test shouldExitAndKillTheExecution has 3 execution killed

* fix(core): flaky runner test

* clean(core-ee): add documentation and use a list of log shippers in log synch

* fix(core-ee): do log synch tests for each bdd

* clean(test): move the runner test abstraction to core to use it for jdbc and kafka

* fix(test): fix broken tests, and correct an ELS log search bug

* fix(test): flacky tests on kafka runner

* feat(core): add log repository method to have a flux of log entry

* fix(mySql): change log repository fetch asynch

* feat(core): change logShipper to return void

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2025-01-06 17:47:11 +01:00
Loïc Mathieu
9901470b74 feat(*): maintenance mode
Closes #2992
2025-01-06 17:45:10 +01:00
Bart Ledoux
73c100ce1b fix: add proper typing for vuex 2025-01-06 14:37:35 +01:00
YannC
54b7a29a55 feat(): jdbc custom dashboard implementation (#6607)
* WIP: commit to be edited

* feat(*): finished implementation for custom dashboard in JDBC

* chore: disable metricRepository all() test because of leap year

* chore(): PR review
2025-01-06 14:02:53 +01:00
Ludovic DEHON
622f158bd0 feat(webserver): add a configuration to change app html title
close kestra-io/kestra-ee#621
2025-01-06 11:33:15 +01:00
YannC
2740137a80 fix(): ensure object sent is formData (#6639) 2025-01-06 11:20:59 +01:00
yuri1969
2307b2452b chore(build): increase Gradle memory limits
By default the daemon is limited to 512MiB heap. Increasing that to 2GiB
shaved around 10sec off the full build.
2025-01-06 09:12:35 +01:00
Loïc Mathieu
92ff557514 chore(core): tiny perf improvement in MapUtils.merge()
MapUtils.merge() un-necessary clone the map when there is only one map that is not-null and not-empty which is not needed as the map is not modified but returned immediatly.
2025-01-03 19:33:06 +01:00
Loïc Mathieu
aa9af94c14 feat(core): add taskrun.iteration inside Pebble variables
Add iteration index for ForEach and other looping tasks
2025-01-03 18:55:29 +01:00
Bart Ledoux
0cdc6f062d fix: finish the overload of buttons 2025-01-03 17:53:13 +01:00
Ludovic DEHON
e8ee97e26d feat(script): add privileged flags to docker 2025-01-03 16:51:37 +01:00
Bart Ledoux
e1c202a3cb fix: more fixes on css variables 2025-01-03 16:14:03 +01:00
Loïc Mathieu
eaa72dde4e fix(core): multiple conditon tests are flaky
They often use 1s as the deadline /window which can be an issue if the second number increments during testing.

Fixes #6632
2025-01-03 15:16:54 +01:00
Loïc Mathieu
f12a0a0547 fix(core): path traversal guard 2025-01-03 12:24:40 +01:00
Bart Ledoux
e1987ed2e3 fix: element alert background 2025-01-03 12:01:29 +01:00
Bart Ledoux
50a9f6132d fix: select multiple choices icon color an shape 2025-01-03 11:49:59 +01:00
Bart Ledoux
5bec2fc069 fix: alert colors and place of figma theme 2025-01-03 11:35:43 +01:00
Bart Ledoux
68646b07a8 fix: fixes on select boxes 2025-01-03 11:15:34 +01:00
Loïc Mathieu
e5b0ff459a feat(core): add an audit log for executions created by a trigger
Fixes https://github.com/kestra-io/kestra-ee/issues/2427
2025-01-03 10:22:21 +01:00
Loïc Mathieu
409d78615b fix(core): ExitTest is flaky 2025-01-03 10:21:57 +01:00
Loïc Mathieu
b7f9a32015 fix(storage-local): path traversal guard should include File.separator
Today, we check that a file didn't contains '..' which is too aggressive, we should check that it didn't contains '../' or '..\' only.
2025-01-03 10:06:52 +01:00
Ludovic DEHON
6f00cf1838 chore(deps): expose http5 as transitive deps 2025-01-03 09:33:28 +01:00
Loïc Mathieu
44f3639111 fix(jdbc): avoid duplicating the source when deleting the flow
Fixes #5770
2025-01-03 09:30:53 +01:00
Ludovic DEHON
9ebf2ac750 fix(cicd): don't build docker image & maven if failed test 2025-01-03 00:26:20 +01:00
Ludovic DEHON
88709a2dba fix(deps): include httpcore5 in platform deps 2025-01-03 00:18:18 +01:00
Ludovic DEHON
62badb1e53 test(core): add coverage on http logger 2025-01-02 18:11:50 +01:00
Ludovic DEHON
4a5f46132e fix(core): make http client creation explicit 2025-01-02 18:11:50 +01:00
Ludovic DEHON
73b68294ca fix(core): restore deprecated on the ui for http task 2025-01-02 18:11:50 +01:00
Ludovic DEHON
153d4ced9c fix(core): fix download http tasks 2025-01-02 18:11:50 +01:00
Ludovic DEHON
a33f85bf1e fix(core): handle http auth 2025-01-02 18:11:50 +01:00
Ludovic DEHON
5fee07e76f fix(core): configuration of log on the http client 2025-01-02 18:11:50 +01:00
Ludovic DEHON
6dfe29adf6 feat(core): use http abstraction on http tasks 2025-01-02 18:11:50 +01:00
Ludovic DEHON
1772ed45f6 feat(core): add a http client abstraction on top of apache http client 2025-01-02 18:11:50 +01:00
Ludovic DEHON
93dc508882 feat(tasks): move http task to apache http client 2025-01-02 18:11:50 +01:00
Ludovic DEHON
9e643dcc4e chore(tasks): improve unit test of http tasks 2025-01-02 18:11:50 +01:00
Barthélémy Ledoux
b03576c7d8 refactor: major css variable overhaul (#6497)
### In CSS code

#### Bootstrap

- When we find `var(--bs-white)`:
  - if the prop is `background-color` replace it with `--ks-background-card`
  - if the prop is `background` replace it with `--ks-background-card`
- When we find `var(--bs-primary)`:
  - if the prop is `color` replace it with `--ks-content-link`
  - if the prop is `background-color` replace it with `--ks-background-button-primary`
  - if the prop is `background` replace it with `--ks-background-button-primary`
- When we find `var(--bs-purple)`:
  - if the prop is `color` replace it with `--ks-content-link`
  - if the prop is `background-color` replace it with `--ks-background-button-primary`
  - if the prop is `background` replace it with `--ks-background-button-primary`
- When we find `var(--bs-body-color)`:
  - if the prop is `color` replace it with `--ks-content-primary`
- When we find `var(--bs-code-color)`:
  - if the prop is `color` replace it with `--ks-content-id`
- When we find `var(--bs-body-bg)`:
  - if the prop is `background-color` replace it with `--ks-background-body`
  - if the prop is `background` replace it with `--ks-background-body`
- When we find `var(--bs-card-bg)`:
  - if the prop is `background-color` replace it with `--ks-background-card`
  - if the prop is `background` replace it with `--ks-background-card`
- When we find `var(--bs-secondary)`:
  - if the prop is `color` replace it with `--ks-content-secondary`
  - if the prop is `background-color` replace it with `--ks-border-active`
- When we find `var(--bs-tertiary-color)`:
  - if the prop is `color` replace it with `--ks-content-tertiary`
- When we find `var(--bs-border-color)`:
  - if the prop is `border` replace it with `--ks-border-primary`
  - if the prop is `border-color` replace it with `--ks-border-primary`
  - if the prop is `border-bottom` replace it with `--ks-border-primary`
  - if the prop is `border-right` replace it with `--ks-border-primary`
- When we find `var(--bs-card-color)`:
  - if the prop is `color` replace it with `--ks-content-primary`
- When we find `var(--bs-border-secondary-color)`:
  - if the prop is `border` replace it with `--ks-border-secondary`
  - if the prop is `border-color` replace it with `--ks-border-secondary`
  - if the prop is `border-bottom` replace it with `--ks-border-secondary`
- When we find `var(--bs-warning)`:
  - if the prop is `color` replace it with `--ks-content-warning`


#### Element Plus

- When we find `var(--el-bg-color)`:
  - if the prop is `background-color` replace it with `--ks-background-button-secondary-hover`
  - if the prop is `background` replace it with `--ks-background-button-secondary-hover`
- When we find `var(--el-text-primary)`:
  - if the prop is `color` replace it with `--ks-content-primary`
- When we find `var(--el-text-color-regular)`:
  - if the prop is `color` replace it with `--ks-content-primary`
- When we find `var(--el-color-primary)`:
  - if the prop is `border-color` replace it with `--ks-border-active`
  - if the prop is `border` replace it with `--ks-border-active`
  - if the prop is `box-shadow` replace it with `--ks-border-active`
  - if the prop is `color` replace it with `--ks-content-link`
- When we find `var(--el-border-color)`:
  - if the prop is `border` replace it with `--ks-border-primary`
  - if the prop is `border-color` replace it with `--ks-border-primary`
  - if the prop is `border-right` replace it with `--ks-border-primary`
  - if the prop is `border-left` replace it with `--ks-border-primary`
  - if the prop is `border-bottom` replace it with `--ks-border-primary`
  - if the prop is `box-shadow` replace it with `--ks-border-primary`
- When we find `var(--el-border)`:
  - if the prop is `border` replace it with `--ks-border-primary`
  - if the prop is `border-color` replace it with `--ks-border-primary`
  - if the prop is `border-right` replace it with `--ks-border-primary`
  - if the prop is `border-left` replace it with `--ks-border-primary`
- When we find `var(--el-color-text-primary)`:
  - if the prop is `color` replace it with `--ks-content-link`
- When we find `var(--el-text-color-primary)`:
  - if the prop is `color` replace it with `--ks-content-link`
  - if the prop is `background` replace it with `--ks-background-body`
- When we find `var(--el-text-color-secondary)`:
  - if the prop is `color` replace it with `--ks-content-link`
- When we find `var(--el-color-alert-info)`:
  - if the prop is `color` replace it with `--ks-content-information`
- When we find `var(--el-button-bg-color)`:
  - if the prop is `background` replace it with `--ks-background-button-secondary`
  - if the prop is `background-color` replace it with `--ks-background-button-secondary`
  - if the prop is `border` replace it with `--ks-background-button-secondary`
- When we find `var(--el-text-color-disabled)`:
  - if the prop is `color` replace it with `--ks-content-inactive`
- When we find `var(--el-color-warning)`:
  - if the prop is `color` replace it with `--ks-content-warning`


#### Kestra

- When we find `var(--content-alert)`:
  - if the prop is `color` replace it with `--ks-content-alert`
- When we find `var(--card-bg)`:
  - if the prop is `background-color` replace it with `--ks-background-card`
  - if the prop is `background` replace it with `--ks-background-card`
- When we find `var(--input-bg)`:
  - if the prop is `background-color` replace it with `--ks-background-input`
  - if the prop is `background` replace it with `--ks-background-input`
- When we find `var(--log-content-error)`:
  - if the prop is `color` replace it with `--ks-log-content-error`
- When we find `var(--log-background-error)`:
  - if the prop is `background-color` replace it with `--ks-log-background-error`
  - if the prop is `border-top` replace it with `--ks-log-background-error`
- When we find `var(--log-border-error)`:
  - if the prop is `border` replace it with `--ks-log-border-error`
  - if the prop is `border-color` replace it with `--ks-log-border-error`

### In JS code
- When we find `var(--content-color-` in a string interpolation, we replace it with `var(--ks-content-`.
- When we find `var(--border-color-` in a string interpolation, we replace it with `var(--ks-border-`.
- When we find `var(--background-color-` in a string interpolation, we replace it with `var(--ks-background-`.
- When we find `var(--log-content-` in a string interpolation, we replace it with `var(--ks-log-content-`.
2025-01-02 16:35:58 +01:00
Loïc Mathieu
a9ff469f78 fix(core): killing paused without subtask should transition to KILLED
Fixes #6243

When we kill an execution that is running a Pause task that didn't have any subtask, we must transition the task run to KILLED immediatly or the executor will process the Pause task and transition it to SUCCESS.
2025-01-02 14:27:27 +01:00
Loïc Mathieu
6db49aebf0 feat(webserver): OpenAPI spec improvement
Previously, PagedResult contains ArrayListTotal which is a list with a total in it. But due to that, ArrayListTotal is not recognized as an array for the OpenAPI spec so all the endpoints that use it generates incorrect specification.
Switching to a list fixes the issue.
The serialized form is not impacted.
2024-12-31 18:20:30 +01:00
Mathieu Gabelle
c6a09cd9de refactor: migrate AbstractExecScript, CommandsWrapper, NamespaceFiles, OutputFilesInterface to dynamic properties 2024-12-31 16:01:28 +01:00
Piyush Bhaskar
316d514fa3 chore(ui): add header title for column on triggers page (#6608) 2024-12-31 14:00:20 +01:00
Bart Ledoux
5f7695e3e8 build: fix storybook tests 2024-12-30 14:34:08 +01:00
Bart Ledoux
7b4b905819 fix: update package json again to fix storybook tests 2024-12-30 14:21:44 +01:00
Bart Ledoux
0cc5fb964c build: attempt to fix storybook tests swc issue 2024-12-30 12:22:48 +01:00
GitHub Action
27f1430ff6 chore(translations): auto generate values for languages other than english 2024-12-30 09:41:02 +00:00
rajatsingh23
b312ea0f91 feat(ui): introduce log font size property in settings (#6600)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-30 10:40:38 +01:00
Piyush Bhaskar
4bd7585915 chore(ui): add a horizontal scroll bar to editor file tree (#6598) 2024-12-30 10:10:32 +01:00
Piyush Bhaskar
4ccd2fff63 chore(ui): add limit to environment name length (#6597)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-30 09:46:09 +01:00
Miloš Paunović
96d8239b59 chore(ui): introduce horizontal scroll to cascader items 2024-12-27 08:57:17 +01:00
Miloš Paunović
807a44d187 chore(ui): always show flow revision column on executions listing 2024-12-26 08:45:44 +01:00
rajatsingh23
42d752e82e chore(ui): prevent ability to add multiple filters on second try (#6573)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-25 09:33:31 +01:00
Miloš Paunović
ed469d0094 chore(deps): regular dependency update (#6591) 2024-12-25 08:34:26 +01:00
MilosPaunovic
5da044c801 fix(ui): add check for property existence 2024-12-25 08:20:04 +01:00
Loïc Mathieu
ff83e25c0b feat(core): add an Exit task
Fixes #5599
2024-12-24 10:29:31 +01:00
Rajarajan
e9929fd4b2 feat(core): Added a Pebble function [uniq] to deduplice array #6417 2024-12-24 10:02:34 +01:00
Miloš Paunović
354b6b932b chore(ui): introduce new filter bar on namespace kv page (#6570) 2024-12-24 09:38:17 +01:00
MilosPaunovic
8357e0e23f chore(ui): tweak font size for tag component 2024-12-24 09:10:17 +01:00
YannC
8e42c12764 fix(core): better method when looking for 'value' prop in a JsonNode for auditLog patch application (#6569) 2024-12-24 08:20:52 +01:00
Ruturaj Dhakane
93e7ff2ede chore(ui): prevent display of file helpers if there is no file (#6568) 2024-12-23 15:41:43 +01:00
yuri1969
462c505623 fix(core): enable runIf property on flowable tasks 2024-12-23 14:43:59 +01:00
Miloš Paunović
9707b68434 chore(ui): replace language right after saving changes (#6566) 2024-12-23 12:56:13 +01:00
Miloš Paunović
41a90f5c6f fix(ui): improve namespaces filtering (#6564) 2024-12-23 12:30:24 +01:00
Loïc Mathieu
a27ef2ace1 feat(core): add a Write task
Fixes #6524
2024-12-23 12:09:00 +01:00
Miloš Paunović
95af3ea4f5 chore(ui): prevent adding filter parameters if decode prop is passed as false (#6563) 2024-12-23 12:04:30 +01:00
Aabhas Sao
e938e0dc54 chore(ui): handle creation of nested folders properly (#6554)
Signed-off-by: Aabhas Sao <aabhassao0@gmail.com>
2024-12-23 12:01:16 +01:00
GitHub Action
f0a15cdae1 chore(translations): auto generate values for languages other than english 2024-12-23 10:32:06 +00:00
Piyush Bhaskar
bf55ee962c chore(ui): show artwork on flow triggers page instead of locking it (#6555) 2024-12-23 11:31:16 +01:00
Sayed Qassim
8b541aae23 chore(ui): executions in progress link is taking proper filters into account (#6556)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-23 11:03:36 +01:00
Kumar Nirupam
0173470ae8 chore(ui) initial work on clicking filter to change it's value (#6560)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-23 10:53:50 +01:00
Piyush Bhaskar
926b417675 chore(ui): improvement to blueprints inside flow editor tab (#6548) 2024-12-23 09:19:23 +01:00
Piyush Bhaskar
51752b2acc chore(ui): limit accepted file types for flow import (#6550)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-23 09:12:10 +01:00
Maheshwara Sampath
9162e3a2ee chore(ui): rename flow editor tab to edit (#6552) 2024-12-23 08:53:53 +01:00
dependabot[bot]
53c9f395b0 chore(deps): bump org.siouan.frontend-jdk21 from 9.1.0 to 10.0.0
Bumps org.siouan.frontend-jdk21 from 9.1.0 to 10.0.0.

---
updated-dependencies:
- dependency-name: org.siouan.frontend-jdk21
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-21 23:09:06 +01:00
dependabot[bot]
030aff3acb chore(deps): bump org.jsoup:jsoup from 1.18.1 to 1.18.3
Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.18.1 to 1.18.3.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.18.1...jsoup-1.18.3)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-21 23:08:56 +01:00
dependabot[bot]
bc423743e8 chore(deps): bump flyingSaucerVersion from 9.11.1 to 9.11.2
Bumps `flyingSaucerVersion` from 9.11.1 to 9.11.2.

Updates `org.xhtmlrenderer:flying-saucer-core` from 9.11.1 to 9.11.2
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.1...v9.11.2)

Updates `org.xhtmlrenderer:flying-saucer-pdf` from 9.11.1 to 9.11.2
- [Release notes](https://github.com/flyingsaucerproject/flyingsaucer/releases)
- [Changelog](https://github.com/flyingsaucerproject/flyingsaucer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyingsaucerproject/flyingsaucer/compare/v9.11.1...v9.11.2)

---
updated-dependencies:
- dependency-name: org.xhtmlrenderer:flying-saucer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.xhtmlrenderer:flying-saucer-pdf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-21 23:08:46 +01:00
Barthélémy Ledoux
edb7f54431 fix(ui): only silence the necessary sass warnings
closes #6390
2024-12-21 23:08:33 +01:00
dependabot[bot]
58c1ca2d05 chore(deps): bump org.owasp.dependencycheck from 11.1.0 to 11.1.1
Bumps org.owasp.dependencycheck from 11.1.0 to 11.1.1.

---
updated-dependencies:
- dependency-name: org.owasp.dependencycheck
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 18:12:37 +01:00
dependabot[bot]
7de45c01d1 chore(deps): bump com.google.cloud:libraries-bom from 26.50.0 to 26.52.0
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/java-cloud-bom) from 26.50.0 to 26.52.0.
- [Release notes](https://github.com/googleapis/java-cloud-bom/releases)
- [Changelog](https://github.com/googleapis/java-cloud-bom/blob/main/release-please-config.json)
- [Commits](https://github.com/googleapis/java-cloud-bom/compare/v26.50.0...v26.52.0)

---
updated-dependencies:
- dependency-name: com.google.cloud:libraries-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 17:59:09 +01:00
dependabot[bot]
79d67a25bf chore(deps): bump jacksonVersion from 2.18.1 to 2.18.2
Bumps `jacksonVersion` from 2.18.1 to 2.18.2.

Updates `com.fasterxml.jackson:jackson-bom` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.18.1...jackson-bom-2.18.2)

Updates `com.fasterxml.jackson.core:jackson-core` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.18.1...jackson-core-2.18.2)

Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.core:jackson-annotations` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.module:jackson-module-parameter-names` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-modules-java8/compare/jackson-modules-java8-2.18.1...jackson-modules-java8-2.18.2)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-yaml` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-dataformats-text/compare/jackson-dataformats-text-2.18.1...jackson-dataformats-text-2.18.2)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-smile` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-dataformats-binary/compare/jackson-dataformats-binary-2.18.1...jackson-dataformats-binary-2.18.2)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-cbor` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-dataformats-binary/compare/jackson-dataformats-binary-2.18.1...jackson-dataformats-binary-2.18.2)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-ion` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-dataformat-ion/commits)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-xml` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.18.1...jackson-dataformat-xml-2.18.2)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-guava` from 2.18.1 to 2.18.2
- [Commits](https://github.com/FasterXML/jackson-datatypes-collections/compare/jackson-datatypes-collections-2.18.1...jackson-datatypes-collections-2.18.2)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.18.1 to 2.18.2

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jdk8` from 2.18.1 to 2.18.2

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson:jackson-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.module:jackson-module-parameter-names
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-smile
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-cbor
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-ion
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 17:58:02 +01:00
dependabot[bot]
dc966b3b11 chore(deps): bump commons-io:commons-io from 2.17.0 to 2.18.0
Bumps commons-io:commons-io from 2.17.0 to 2.18.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 17:41:18 +01:00
dependabot[bot]
3cf92f5093 chore(deps): bump org.jooq:jooq from 3.19.15 to 3.19.16
Bumps org.jooq:jooq from 3.19.15 to 3.19.16.

---
updated-dependencies:
- dependency-name: org.jooq:jooq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 17:41:09 +01:00
Bart Ledoux
e86cdc920f supress CJS warning in storybook 2024-12-20 17:17:42 +01:00
Bart Ledoux
dba5c39ded build: use husky instead of ghooks 2024-12-20 16:31:53 +01:00
dependabot[bot]
d9f1dd1405 chore(deps): bump com.microsoft.playwright:playwright
Bumps [com.microsoft.playwright:playwright](https://github.com/microsoft/playwright-java) from 1.48.0 to 1.49.0.
- [Release notes](https://github.com/microsoft/playwright-java/releases)
- [Commits](https://github.com/microsoft/playwright-java/compare/v1.48.0...v1.49.0)

---
updated-dependencies:
- dependency-name: com.microsoft.playwright:playwright
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 16:15:07 +01:00
dependabot[bot]
ee5f8f952e chore(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.17.0 to 2.19.0.
- [Release notes](https://github.com/opensearch-project/opensearch-java/releases)
- [Changelog](https://github.com/opensearch-project/opensearch-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/opensearch-project/opensearch-java/compare/v2.17.0...v2.19.0)

---
updated-dependencies:
- dependency-name: org.opensearch.client:opensearch-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 15:48:40 +01:00
dependabot[bot]
06c56d582b chore(deps): bump com.azure:azure-sdk-bom from 1.2.29 to 1.2.30
Bumps [com.azure:azure-sdk-bom](https://github.com/azure/azure-sdk-for-java) from 1.2.29 to 1.2.30.
- [Release notes](https://github.com/azure/azure-sdk-for-java/releases)
- [Commits](https://github.com/azure/azure-sdk-for-java/compare/azure-sdk-bom_1.2.29...azure-sdk-bom_1.2.30)

---
updated-dependencies:
- dependency-name: com.azure:azure-sdk-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 15:28:24 +01:00
dependabot[bot]
3f1758c200 chore(deps): bump io.qameta.allure:allure-bom from 2.29.0 to 2.29.1
Bumps [io.qameta.allure:allure-bom](https://github.com/allure-framework/allure-java) from 2.29.0 to 2.29.1.
- [Release notes](https://github.com/allure-framework/allure-java/releases)
- [Commits](https://github.com/allure-framework/allure-java/compare/2.29.0...2.29.1)

---
updated-dependencies:
- dependency-name: io.qameta.allure:allure-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 15:28:05 +01:00
dependabot[bot]
7ef8419592 chore(deps): bump software.amazon.awssdk:bom from 2.29.29 to 2.29.37
Bumps software.amazon.awssdk:bom from 2.29.29 to 2.29.37.

---
updated-dependencies:
- dependency-name: software.amazon.awssdk:bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 14:24:25 +01:00
dependabot[bot]
ad5e731404 chore(deps): bump com.github.docker-java:docker-java-transport-httpclient5
Bumps [com.github.docker-java:docker-java-transport-httpclient5](https://github.com/docker-java/docker-java) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/docker-java/docker-java/releases)
- [Changelog](https://github.com/docker-java/docker-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/docker-java/docker-java/compare/3.4.0...3.4.1)

---
updated-dependencies:
- dependency-name: com.github.docker-java:docker-java-transport-httpclient5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 14:16:20 +01:00
dependabot[bot]
9acdf85254 chore(deps): bump org.sonarqube from 5.1.0.4882 to 6.0.1.5171
Bumps org.sonarqube from 5.1.0.4882 to 6.0.1.5171.

---
updated-dependencies:
- dependency-name: org.sonarqube
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 14:16:07 +01:00
dependabot[bot]
b961fbf472 chore(deps): bump com.github.docker-java:docker-java from 3.4.0 to 3.4.1
Bumps [com.github.docker-java:docker-java](https://github.com/docker-java/docker-java) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/docker-java/docker-java/releases)
- [Changelog](https://github.com/docker-java/docker-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/docker-java/docker-java/compare/3.4.0...3.4.1)

---
updated-dependencies:
- dependency-name: com.github.docker-java:docker-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 13:47:07 +01:00
Loïc Mathieu
53af6a38b9 feat(core): add audit log when killing an execution
Fixes https://github.com/kestra-io/kestra-ee/issues/2426
2024-12-20 13:13:51 +01:00
MilosPaunovic
4a94b2237b chore(ui): lint code properly for ci to pass 2024-12-20 12:43:04 +01:00
dependabot[bot]
0f6a0fcc45 chore(deps): bump net.thisptr:jackson-jq from 1.1.0 to 1.2.0
Bumps [net.thisptr:jackson-jq](https://github.com/eiiches/jackson-jq) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/eiiches/jackson-jq/releases)
- [Commits](https://github.com/eiiches/jackson-jq/compare/1.1.0...1.2.0)

---
updated-dependencies:
- dependency-name: net.thisptr:jackson-jq
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 12:36:06 +01:00
Loïc Mathieu
3559b640ea feat(jdbc): small improvement to the worker trigger queue 2024-12-20 12:35:39 +01:00
shreeup
4cf68da726 chore(ui): improve behavior on changing theme or language (#6520) 2024-12-20 11:46:19 +01:00
dependabot[bot]
72e6b1b71d chore(deps): bump software.amazon.awssdk.crt:aws-crt
Bumps [software.amazon.awssdk.crt:aws-crt](https://github.com/awslabs/aws-crt-java) from 0.31.1 to 0.33.7.
- [Release notes](https://github.com/awslabs/aws-crt-java/releases)
- [Commits](https://github.com/awslabs/aws-crt-java/compare/v0.31.1...v0.33.7)

---
updated-dependencies:
- dependency-name: software.amazon.awssdk.crt:aws-crt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-20 11:45:07 +01:00
Piyush Bhaskar
6ad5e2379a chore(ui): make the entire row clickable on the gantt page (#6539) 2024-12-20 11:41:08 +01:00
MilosPaunovic
804c3b2d5d chore(ui): expand doughnut chart if there is no legend shown 2024-12-20 11:19:07 +01:00
Florian Hussonnois
729972fd1c build(ci): allow docker-build when skipping tests 2024-12-20 10:59:52 +01:00
Miloš Paunović
5625c210da feat(ui): implement initial stories for filter components (#6542) 2024-12-20 10:26:29 +01:00
Nicolas K.
cbd5d9ced6 fix(runner-kafka): interface contract of template test changed (#6536)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-19 17:10:54 +01:00
Barthélémy Ledoux
1b26cec0e6 feat(ci): parallelize frontend testing workflow with Storybook, vitest and linter (#6529) 2024-12-19 15:24:04 +01:00
Nicolas K.
59fa27797e Clean flaky tests (#6530)
* feat(tests): don't load all flows if not needed

* feat(tests): don't load all flows if not needed in runner test and runner retry test

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-19 14:52:43 +01:00
GitHub Action
5b6b501bc8 chore(translations): auto generate values for languages other than english 2024-12-19 13:17:33 +00:00
Miloš Paunović
25084c76a8 chore(ui): implement new filtering system where it was missing (#6531) 2024-12-19 14:17:01 +01:00
Barthélémy Ledoux
8387b6fd9b test: add a story & tests for filter labels (#6526)
* add a story for filter labels

* add some typescript love to filter labels

* add a few stories

* update eslint

* revert changes to label

* fix typings

* wait for the setup to finish
2024-12-19 14:04:43 +01:00
Loïc Mathieu
f550fde76c fix(core): existing ns based on KV and not only flows
Lookup if there are existing KV to know if a ns exist from the kv function and not only if flows exist in the KV.
2024-12-19 13:19:48 +01:00
dependabot[bot]
64e3023585 chore(deps): bump org.apache.logging.log4j:log4j-to-slf4j
Bumps org.apache.logging.log4j:log4j-to-slf4j from 2.24.1 to 2.24.3.

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-to-slf4j
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-19 13:04:56 +01:00
Mathieu Gabelle
2290b99332 feat: add Huggingface Plugin 2024-12-19 12:15:34 +01:00
Miloš Paunović
20b7237c97 chore(deps): regular dependency update (#6523) 2024-12-19 08:22:45 +01:00
Miloš Paunović
2391f174a7 fix(ui): if no trigger state filter is selected, show them all (#6522) 2024-12-19 08:13:21 +01:00
Nicolas K.
5f8cd4c14c fix(webserver): rework tests in order to load only required flows (#6517)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-18 16:42:33 +01:00
Nikhil Sinha
7cd4eda33d feat(): display custom input only if customvalue is enabled (#5692)
Co-authored-by: YannC <ycoornaert@kestra.io>
2024-12-18 15:50:22 +01:00
Barthélémy Ledoux
03b1ba870c refactor(ui): move stories to tests/storybook (#6515) 2024-12-18 15:35:42 +01:00
Anna Geller
7a8d2aeb97 fix: subflow docs 2024-12-18 15:30:04 +01:00
Florian Hussonnois
0ab4b6d10d fix(run): add LD_PRELOAD to handle duckdb/rocksdb libc conflict
related-to: kestra-io/plugin-jdbc#165
2024-12-18 15:28:54 +01:00
GitHub Action
cdc30080f9 chore(translations): auto generate values for languages other than english 2024-12-18 14:17:41 +00:00
YannC
18a2b553ca feat(core): allow SELECT input to be radio UI type
close #5591
2024-12-18 15:17:03 +01:00
Nicolas K.
38dcc75271 fix(core): remove race condition on trigger runner test (#6516)
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-18 14:04:20 +01:00
Miloš Paunović
1da6e75bc8 chore(ui): improved filter usage throughout the product (#6513) 2024-12-18 11:09:56 +01:00
Anna Geller
0f23d33824 docs: add more keyboard shortcuts 2024-12-18 10:40:32 +01:00
Nicolas K.
bf018c0189 Flaky test add logs (#6504)
* test(runner tests): add logs to track race condition

* feat(tests): add extension to load flows

* clean(tests): remove logs

* feat(tests): move the extension into the right folder

* feat(tests): add new junit extensions, clean tests and now kestraTest can run runner

* clean(tests): small ficxes after merge

* feat(tests): remove @Test from ExecuteFLow

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-18 10:33:42 +01:00
Barthélémy Ledoux
68c13d92b6 build: setup storybook for development in isolation (#6499) 2024-12-18 09:58:44 +01:00
Barthélémy Ledoux
f87e6253b3 fix: add missing mutation when loading plugin doc form cache (#6502) 2024-12-18 09:13:47 +01:00
Loïc Mathieu
01e6d529f6 fix(jdbc): read the disabled flag from the DB 2024-12-17 17:21:51 +01:00
Loïc Mathieu
556fabc3a4 fix(webserver): correct the triger find endpoint URL 2024-12-17 17:21:51 +01:00
YannC
4187627ef1 fix(core): save flowable's output when flowable is child of another flowable (#6500)
close #6494
2024-12-17 16:23:45 +01:00
dependabot[bot]
149d876442 chore(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.7.0 to 4.7.2.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.7.0...v4.7.2)

---
updated-dependencies:
- dependency-name: io.micronaut.platform:micronaut-platform
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-17 15:12:16 +01:00
Loïc Mathieu
da1bbb51af feat(core): throw an error if the secret is not found 2024-12-17 15:09:49 +01:00
Loïc Mathieu
b133210fa0 feat(script): include task null outputs
Fixes https://github.com/kestra-io/plugin-scripts/issues/195
2024-12-17 15:08:27 +01:00
GitHub Action
aa8588c3b7 chore(translations): auto generate values for languages other than english 2024-12-17 11:29:14 +00:00
Miloš Paunović
bdd14f40f9 chore(ui): complete the audit log filtering options (#6496) 2024-12-17 12:28:52 +01:00
brian.mulier
a1f1987d71 fix(ui): put 0.0.0 version in package.json as we don't update it and rely on gradle.properties version instead 2024-12-17 12:07:15 +01:00
Florian Hussonnois
908134792e fix(core): properly check next scheduled date for backfill execution (#6413)
Changes:
When a trigger is evaluated for in a back-fill context, we have to make sure
that current-date is strictly after the next execution date for an execution to be eligible.

fix: #6413
2024-12-17 09:58:18 +01:00
Ludovic DEHON
5064606350 fix(jdbc-postgres): escape special chars on full text search
close kestra-io/kestra-ee#2430
close kestra-io/kestra-ee#2454
2024-12-17 08:53:52 +01:00
Piyush Bhaskar
1707b0c48b chore(ui): make tab arrows hidden when there is no need for them(#6486) 2024-12-17 08:21:11 +01:00
Ludovic DEHON
73026d0647 fix(core): handle input & output with id of 1 chars
close #6089
2024-12-16 18:58:48 +01:00
Ludovic DEHON
7067644150 refactor(test): use application context from the current test suite on FlowLoad 2024-12-16 18:58:48 +01:00
Loïc Mathieu
aa8ad15209 feat(core): use the Sleep official task instead of a custom test one 2024-12-16 17:51:12 +01:00
Loïc Mathieu
6a34c04e32 feat(webserver): small improvements to our OpenAPI spec 2024-12-16 16:38:59 +01:00
YannC
2d4fb7684a fix(jdbc): missing SKIPPED state in DB migrations (#6487)
close #6461
2024-12-16 16:04:34 +01:00
MilosPaunovic
6f3aff1467 chore(ui): re-work same filter applying multiple times 2024-12-16 14:50:47 +01:00
Miloš Paunović
2ce20724ca chore(ui): amend scope lables on dasboard filters (#6485) 2024-12-16 14:09:27 +01:00
Miloš Paunović
1b6442ffde chore(ui): autmatically open date picker if absolute date is selected as type (#6484) 2024-12-16 13:57:42 +01:00
Piyush Bhaskar
36dce4c815 chore(ui): improve the styling of error component on executions overview (#6465) 2024-12-16 13:39:18 +01:00
Loïc Mathieu
9238b56008 fix(webserver): TriggerController endpoint issues
- Empty endpoint removed.
- Deprecate for removal a  not-used endpoint.
- Fix incorrect OpenAPI operations
2024-12-16 13:24:03 +01:00
GitHub Action
c57984709d chore(translations): auto generate values for languages other than english 2024-12-16 12:02:14 +00:00
Miloš Paunović
b5e3e9336d chore(ui): improve passing of props to filter component (#6483) 2024-12-16 13:01:53 +01:00
Nicolas K.
008c03ce2d feat(tests): move the extension into the right folder
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-16 12:08:35 +01:00
Nicolas K.
dddf4db75a test(runner tests): add logs to track race condition (#6455)
* test(runner tests): add logs to track race condition

* feat(tests): add extension to load flows

* clean(tests): remove logs

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-16 11:41:55 +01:00
Miloš Paunović
d631e99c7d chore(translations): handle filters key translation (#6479) 2024-12-16 11:40:08 +01:00
GitHub Action
3fb12a66d1 chore(translations): auto generate values for languages other than english 2024-12-16 10:18:11 +00:00
Miloš Paunović
cacfcaf60d chore(ui): rework the file structure in filters section (#6452) 2024-12-16 11:17:41 +01:00
Barthélémy Ledoux
b11d994884 chore: avoid global constants (use window instead) (#6478)
* fix(ui): update global constants to use window scope

* fix vitest
2024-12-16 11:01:03 +01:00
Ludovic DEHON
bfea840faa refactor(test): create an ExecutionUtils to load flow 2024-12-16 10:40:44 +01:00
Miloš Paunović
ce31abf290 chore(ui): add clearable property to select fields on inputs form (#6477) 2024-12-16 09:14:08 +01:00
Arpit Gupta
8313e12d17 chore(ui): use global scope for translations throughout the product (#6466)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-16 08:18:15 +01:00
Arpit Gupta
08ace9735e Fix #6461 'Cancelled' option UI (#6463) 2024-12-15 12:09:48 +01:00
Yoann Vernageau
7696baedec chore: exclude liveness/readiness health checks from access logs (#6453) 2024-12-13 22:37:03 +01:00
Florian Hussonnois
89ccdfc773 fix(core): wait for running executor for liveness executor
Changes:
To safely execute the liveness coordinator task without error
we should wait for the executor to be fully running

part-of: kestra-io/kestra-ee#2492
2024-12-13 16:51:34 +01:00
Florian Hussonnois
751972b58f fix(core): exclude def.failsafe from classloading isolation (#4621) 2024-12-13 16:51:19 +01:00
Bart Ledoux
43657c9b6a remove: lintrc superfluous 2024-12-13 16:27:27 +01:00
nKwiatkowski
870a3217eb fix(tests): remove merge namespace mistake 2024-12-13 15:29:16 +01:00
Nicolas K.
3ec4211b7c fix(core-ee): change Objects.equals for tenant id to prevent NPE (#6411)
* fix(core-ee): change Objects.equals for tenant id to prevent NPE

* fix(core): run tests one by one

* fix(core): add a retry on random failing test

* fix(core): create a specific flow to trigger failure tht check on other namespace to prevent collision with other tests

* rollback(core): put testing config back to previous version to handle it in a separate PR

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-13 15:04:06 +01:00
Nicolas K.
f1e3d5096c fix(tests): load only required flows for runner tests (#6447)
* fix(tests): load only required flows for runner tests

* clean(tests): use existing interface to wrap the test execution

* clean(tests): use existing interface to wrap the test execution

* clean(tests): remove flow loader and put the method in the main test class

* rollback(tests): put back condition trigger to the original namespace

---------

Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
2024-12-13 14:55:00 +01:00
yuri1969
8a43d5443d fix(): keep OpenAPI spec file name static 2024-12-13 14:44:09 +01:00
Barthélémy Ledoux
ed264a5389 fix: avoid redirect loops when axios calls an unauthorized API (#6450)
* fix: avoid redirect loops when axios calls an unauthorized API

* use the proper structure for axios

* protect against empty request data
2024-12-13 12:33:15 +01:00
GitHub Action
aae4e6b933 chore(translations): auto generate values for languages other than english 2024-12-13 10:49:40 +00:00
Piyush Bhaskar
5de3662c69 chore(ui): improve design of the flow overview page with no executions (#6446)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-13 11:48:02 +01:00
GitHub Action
9090154670 chore(translations): auto generate values for languages other than english 2024-12-13 09:50:51 +00:00
MilosPaunovic
3f104ae9b7 chore(translations): add missing keys 2024-12-13 10:50:20 +01:00
MilosPaunovic
25818878ee chore(ui): amend filter selection 2024-12-13 08:18:38 +01:00
Ludovic DEHON
1267e9b025 chore(core): refactor SecretService 2024-12-13 00:20:12 +01:00
Anna Geller
2594f2816c docs: conditional inputs and outputs 2024-12-12 19:25:48 +01:00
Barthélémy Ledoux
e8a98d9d3c fix: required Boolean & Multiselect rules (#6445)
* fix: required Boolean & Multiselect rules

* fix single line in light mode dark editor
2024-12-12 16:36:34 +01:00
Marco Sabatini
93db727a82 feat(main-gha-workflow): add dispatch event with new version (#6443) 2024-12-12 14:47:15 +01:00
MilosPaunovic
2358bf43f6 chore(ui): align with new version of linter 2024-12-12 14:20:44 +01:00
dependabot[bot]
45c3846e52 chore(deps-dev): bump typescript-eslint from 8.17.0 to 8.18.0 in /ui (#6432)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.17.0 to 8.18.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-12 14:14:41 +01:00
dependabot[bot]
06ed7a1672 chore(deps): bump posthog-js from 1.195.0 to 1.197.0 in /ui (#6427)
Bumps [posthog-js](https://github.com/PostHog/posthog-js) from 1.195.0 to 1.197.0.
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/v1.195.0...v1.197.0)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-12 14:14:23 +01:00
Barthélémy Ledoux
c29648dd9c chore: update ESlint to v9 (next major) (#6389) 2024-12-12 14:01:27 +01:00
Kratos
cb6f49b7d0 chore(ui): prevent applying same filter multiple times (#6219)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-12 13:52:49 +01:00
Piyush Bhaskar
94bfa38cb8 chore(ui): improve filters expanding (#6415) 2024-12-12 13:48:54 +01:00
GitHub Action
019097465d chore(translations): auto generate values for languages other than english 2024-12-12 12:40:19 +00:00
Miloš Paunović
1488719803 chore(ui): removing recent filter functionality (#6420) 2024-12-12 13:39:57 +01:00
GitHub Action
41e64cc043 chore(translations): auto generate values for languages other than english 2024-12-12 12:20:13 +00:00
Miloš Paunović
262c5ecc66 feat(ui): introduce new filters bar to audit logs (#6419) 2024-12-12 13:19:22 +01:00
Anna Geller
7cdc04029c docs: make windows instructions more specific 2024-12-12 12:49:02 +01:00
hcavana
ac8d404f65 Patch 1 (#6418)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update README.md

* Update docker-compose.yml

Changement port 8081 TO 8083

* chore(ui): revert docker-compose changes

* chore(ui): revert docker-compose changes

* chore(ui): revert docker-compose changes

---------

Co-authored-by: Josh Pocock <69722783+joshpocock@users.noreply.github.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-12 12:45:08 +01:00
brian.mulier
88bb0748db fix(ui): avoid unsaved changes pop-up upon clicking on plugin property type definition anchors
closes #6297
2024-12-11 18:35:04 +01:00
brian.mulier
495f2cd391 fix(ui): total is not needed in FlowCreate.vue 2024-12-11 17:17:23 +01:00
brian.mulier
99227a6443 fix(ui): Flow create was no longer generating graph 2024-12-11 17:16:54 +01:00
GitHub Action
c867db8ae2 chore(translations): auto generate values for languages other than english 2024-12-11 13:38:51 +00:00
Piyush Bhaskar
a45fecf95f feat(ui): Add new filters to Administration -> Triggers page (#6328)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-11 14:38:25 +01:00
MilosPaunovic
e9033462c6 chore(ui): amended the css for filter bar width 2024-12-11 14:13:12 +01:00
michascant
eb74e1fd5b feat(UI): added new filters to Flows -> Metrics tab (#6305)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-11 14:09:40 +01:00
GitHub Action
3ddfe5e8dd chore(translations): auto generate values for languages other than english 2024-12-11 13:08:50 +00:00
Miloš Paunović
382a21100e feat(ui): add missing filter options for metrics (#6409) 2024-12-11 14:08:16 +01:00
Piyush Bhaskar
c3b827951c feat(ui): Triggers: The expanded button displays an empty area. (#6337)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-11 11:35:37 +01:00
Anna Geller
200cedaca6 fix: deprecated condition 2024-12-11 11:30:27 +01:00
Piyush Bhaskar
b8e5ac3a6d feat(ui):Change arrow and colors tasks on Executions logs tab. (#6355)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-11 11:13:00 +01:00
brian.mulier
d98488526e fix(ui): add Nuxt alias + bump some deps in package-lock.json 2024-12-11 11:09:52 +01:00
Piyush Bhaskar
bac16e5fab feat(ui): Improve Gantt page. (#6358)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-11 11:06:34 +01:00
MilosPaunovic
e9be789474 chore(ui): temporarily disable filters bar highlighting 2024-12-11 09:27:08 +01:00
Miloš Paunović
9174710516 chore(deps): regular dependency update (#6402) 2024-12-11 09:10:24 +01:00
Piyush Bhaskar
e5d695c980 feat(ui): improvement in filter for adding clear all filters. (#6359)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-11 08:59:37 +01:00
Piyush Bhaskar
ccfce4a6de feat(ui): Make filters expand fully if we omit some of the non required buttons (#6364)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-11 08:43:30 +01:00
Florian Hussonnois
8d02aa7b45 fix(core): exclude common libs from classloading isolation (#4621) 2024-12-10 16:17:10 +01:00
Loïc Mathieu
0e0928d510 feat(core): log at ERROR level for script logs to stderr
Fixes https://github.com/kestra-io/plugin-scripts/issues/190
2024-12-10 13:11:48 +01:00
Miloš Paunović
a0e2c20662 chore(ui): amend description color of system namespace (#6382) 2024-12-10 12:09:01 +01:00
Florian Hussonnois
05eebeda63 fix(core): exclude reactivestreams from classloading isolation (#4621) 2024-12-10 11:18:31 +01:00
Miloš Paunović
023e264a5d fix(ui): pass flow revision on execution overview (#6380) 2024-12-10 10:47:16 +01:00
dependabot[bot]
ba07dc88d1 chore(deps): bump nanoid from 3.3.7 to 3.3.8 in /ui (#6377)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-10 10:32:00 +01:00
Barthélémy Ledoux
0bd8a355ea fix: add typescript tsconfig (#6316)
* add typescript tsconfig

* make progress on typechecking

* fix build process

* update typings

* progress on typescript

* more progress

* restore irrelevant changes

* remove last set of changes
2024-12-10 10:15:57 +01:00
Florian Hussonnois
dcf6c64027 fix(core): ensure child-first strategy for plugin class loading (#4621)
Changes:
- fix child-first strategy
- cleanup the PluginClassLoader class

Fix: #4621
2024-12-10 09:55:20 +01:00
Loïc Mathieu
fe6d6c85bc fix(jdbc): don't delete from the queues table
Fixes https://github.com/kestra-io/kestra-ee/issues/2432
2024-12-10 09:41:07 +01:00
Miloš Paunović
1a84fb96ce chore(ui): respect system theme for editor (#6376) 2024-12-10 08:34:50 +01:00
brian.mulier
db41d81f6e fix(tests): select file for metadata checks in list() test 2024-12-09 18:03:39 +01:00
brian.mulier
34c4ece234 fix(ui): prevent undefined on triggers that don't have sources anymore 2024-12-09 17:57:52 +01:00
Loïc Mathieu
3cd0c7fbe1 chore(core): avoid serialzing the value multiple time 2024-12-09 17:22:39 +01:00
nKwiatkowski
7979809aef feat(plugins): add typesense plugin 2024-12-09 14:21:37 +01:00
Barthélémy Ledoux
f7469070ef feat(ui): add flow validation to FlowCreate component (#6370) 2024-12-09 14:16:57 +01:00
Loïc Mathieu
ba2aa0d231 chore(deps): define GCP, Azure and AWS cloud BOM inside the platform
This avoids possible dependency divergence between all plugins (oss, ee, secret, storage) if they are not updated at the same time.
2024-12-09 12:43:06 +01:00
MilosPaunovic
a78566fc58 chore(docs): switch link to good first issues in readme file 2024-12-09 11:23:16 +01:00
yuri
b1f9da1ad9 chore(*): bump node version used in project (#6327) 2024-12-09 10:52:21 +01:00
Tejas Patil
c526a9a59e chore(ui): prevent opening flow trigger details on row double click (#6354) 2024-12-09 10:39:28 +01:00
Barthélémy Ledoux
d779934ccb docs: context docs appId basic setup (#6341)
* feat(ui): context docs, default  appId with routing

* use the new app api

* add appId copy tooling

* refactor: use docId instead of appId

* rename DocAppId

* make docId box react to click
2024-12-09 10:09:47 +01:00
Shivam
b860cd6518 fix(ui): properly handle filename with multiple dots in editor sidebar (#6362)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-09 10:01:03 +01:00
ANKIT KUMAR
98a867da1c chore(ui): amend font size in tables (#6363)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-09 09:52:47 +01:00
Ludovic DEHON
c6a7c12700 chore(core): add unit test for if nested in parallel 2024-12-08 00:09:52 +01:00
Loïc Mathieu
a27bb1a85d feat(core,jdbc): small trigger / scheduler improvements 2024-12-06 18:09:39 +01:00
Loïc Mathieu
6bb521f4e0 chore(ci): remove generation of latest-full tag
Fixes https://github.com/kestra-io/kestra/issues/4727
2024-12-06 17:05:23 +01:00
Miloš Paunović
596e0c342d chore(ui): improve text label in filter bar (#6350) 2024-12-06 15:44:06 +01:00
Miloš Paunović
54441751e0 chore(ui): remove unused files (#6348) 2024-12-06 15:05:20 +01:00
Florian Hussonnois
6c6f072c2c fix(core): fix cannot create Metric from null in Worker class
fix: kestra-io/kestra-ee#2417
2024-12-06 13:29:08 +01:00
MilosPaunovic
948347ace5 fix(ui): make sure that property exists 2024-12-06 13:05:51 +01:00
Loïc Mathieu
8a26e37455 fix(core): catch errors on task run
Fixes https://github.com/kestra-io/kestra-ee/issues/2416
2024-12-06 11:39:26 +01:00
Loïc Mathieu
6a953d194d chore(jdbc): remove not used method 2024-12-06 11:31:52 +01:00
sanketmagar2001
fb59a6b4ea chore(ui): initial work on improving display of topology (#5606)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-06 11:22:01 +01:00
Piyush Bhaskar
8a511e2d03 chore(ui): improve the styling of boolean buttons on inputs form (#6055)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
2024-12-06 11:08:44 +01:00
Nitin Kumar Pal
72882dfa20 chore(ui): vertically center content in flows table rows (#6330)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-06 10:50:18 +01:00
YannC
525fcf6b70 fix(ui): axios missing content type 2024-12-06 10:40:55 +01:00
brian.mulier
21bf09df11 fix(jdbc): topology was built across all tenants 2024-12-06 09:52:15 +01:00
Miloš Paunović
9222cfa7cc chore(ui): prevent text wrap inside trigger id column (#6336) 2024-12-06 09:30:17 +01:00
Miloš Paunović
89f5de4e9c chore(ui): respect date format form setting inside filter label (#6335) 2024-12-06 09:14:32 +01:00
Yerin Lee
f2bfc232c3 chore(ui): add scrolling to totals chart legend if more than 4 items present (#5971)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-05 15:36:57 +01:00
Florian Hussonnois
ff0b7c4a0a refactor(core): optimize keepLastVersionCollector method 2024-12-05 15:20:12 +01:00
Florian Hussonnois
85a22bcfaa fix(core): fix potential NPE in AbstractServiceLivenessCoordinator 2024-12-05 15:07:58 +01:00
Piyush Bhaskar
23cf3200d7 chore(ui): improve bulk actions design in the executions listing (#6240)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-05 14:49:48 +01:00
Manoj Balaraj
b9aebdbb5d fix(ui): properly handle pebble expression if it contains dash character (#6062)
Co-authored-by: manu2931 <manojb912@gmai.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-05 14:09:58 +01:00
yuri
797b21489f chore(ui): add tooltips for filter section buttons (#5942)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-05 13:47:56 +01:00
Miloš Paunović
099d9e1efd chore(translations): align keys with english (#6324) 2024-12-05 13:38:53 +01:00
Miloš Paunović
4a76fc7dc9 fix(ui): show status label in dialog for changing execution status (#6323) 2024-12-05 13:29:59 +01:00
Will Russell
13fe55dc99 fix(docs): table formatting 2024-12-05 11:04:50 +00:00
Miloš Paunović
604fc71adb feat(ui): add triggers sorting by next execution date (#6318) 2024-12-05 12:03:20 +01:00
Loïc Mathieu
985a10610c chore(core): remove Flow source auto-generation
Fixes #5694
2024-12-05 11:44:04 +01:00
YannC
ef5ece9721 fix(webserver): automatically handle trailing slash in delete endpoint for namespace files (#6266)
close #6118
2024-12-05 11:32:43 +01:00
Aabhas Sao
a05f707e90 chore(ui): uniform log line buttons styling (#6254) 2024-12-05 10:59:26 +01:00
GitHub Action
b63c2361c9 chore(translations): auto generate values for languages other than english 2024-12-05 09:52:51 +00:00
Miloš Paunović
7a6d9fa48d chore(ui): clean up of welcome page usage of markdown files (#6315) 2024-12-05 10:51:34 +01:00
Loïc Mathieu
96b7307376 Revert "feat(core): Add displayName to flow level outputs(backend) (#5605)"
This reverts commit a5741aa424.

This reverts commit 42f721fdec.

This reverts commit 0de24c4448.
2024-12-05 10:28:41 +01:00
Miloš Paunović
1f843272a9 fix(ui): filter out system labels from executing using prefill (#6311) 2024-12-05 09:20:59 +01:00
Abhishek Pawar
8ce0ed7b6d chore(ui): uniform the height of cards on main dashboard (#6213)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-05 09:02:13 +01:00
Piyush Bhaskar
91e7fdb137 chore(ui): remove default editor outline (#6303)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
2024-12-05 08:36:29 +01:00
Miloš Paunović
f57106a5f8 fix(ui): only apply editor padding on main editor (#6310) 2024-12-05 08:32:51 +01:00
Loïc Mathieu
9cb1e5d466 fix(core): copy the list to avoid concurrent modification exception in count
This would avoid this test failure: https://github.com/kestra-io/kestra/pull/6264/checks?check_run_id=33916950881
2024-12-04 17:25:04 +01:00
Bart Ledoux
fe9db94b07 remove eslint from vite 2024-12-04 17:07:22 +01:00
Barthélémy Ledoux
3df1c3778e refactor: replace getCurrentInstance router access with useRouter (#6210) 2024-12-04 16:38:31 +01:00
Barthélémy Ledoux
4e3b23831e chore: upgrade vue-router to 4.5.0 (#6298)
* re-update router

* fix leftmenulink
2024-12-04 16:14:12 +01:00
Barthélémy Ledoux
aed3cc6650 refactor(ui): enforce block order in ESLint configuration (#6299) 2024-12-04 16:13:50 +01:00
Rohit Ghumare
3248cdde4a chore(ui): initial work on output icons issue (#5746)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 15:55:29 +01:00
osmaneTKT
664ab85353 chore(ui): initial work on debug expression sidebar resizing on outputs page (#5878)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 15:44:26 +01:00
Bardan Putra Prananto
b9ccc4b0e9 fix(core): Fix Pause property annotation, exclude Input subtypes from definitions (#6265)
* fix(core): Fix Pause property annotation and exclude Input subtypes from definitions

* only enable filter if base class is null
2024-12-04 15:06:05 +01:00
pphy03
9cdaefcadf chore(ui): make confirmation dialogs properly render markdown content (#5986)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 14:47:24 +01:00
Bart Ledoux
f02cf1f51e fix: rollback router update 2024-12-04 14:32:01 +01:00
RizviSyed
ba94893eeb #6208 Refactored based on comments 2024-12-04 14:26:59 +01:00
RizviSyed
5c66903a9c #6208 Refactored based on comments 2024-12-04 14:26:59 +01:00
RizviSyed
433375177f #6208 Renamed class 2024-12-04 14:26:59 +01:00
RizviSyed
d25e9fa063 #6208 Added a Pebble function to generate a UUID
Closes #6208.
2024-12-04 14:26:59 +01:00
Abhishek Pawar
1aa6be0ee7 fix(ui): handle logs selector overflow in a good manner (#6224)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 14:16:10 +01:00
Aabhas Sao
646c2a6a6f fix(ui): properly filter flows in namespace tab (#6046)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 14:02:04 +01:00
RizviSyed
fb762a91af #6207 Refactored based on comments 2024-12-04 14:00:15 +01:00
RizviSyed
c503f3d387 #6207 Refactored based on comments 2024-12-04 14:00:15 +01:00
RizviSyed
9c610d89e2 #6207 Added additional test case 2024-12-04 14:00:15 +01:00
RizviSyed
1d6fe271e2 #6207 Added Random Number generator 2024-12-04 14:00:15 +01:00
Miloš Paunović
03acc8580e chore(ui): automatically add namespace filter where needed (#6296) 2024-12-04 13:56:09 +01:00
Ian Cheng
948fa7858f feat(ui): add right click menu on file tree view in editor (#5936)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 13:19:48 +01:00
Loïc Mathieu
348547268f fix(core, webserver): properly close the queue on Flux.onFinally
Two fixes:
- close the queue onFinally and not onComplete and onCancel to take into accunt errors.
- close the queue onFinally in the execution creation as now it is only done on the success path and not even via a Flux lifecycle method

This may fix or improve some incosistent behavior reported by users on the webserver.
2024-12-04 12:17:29 +01:00
Loïc Mathieu
973ba0342e fix(core): Correctly parse Content-Disposition in the Download task
Fixes #6270
2024-12-04 12:16:22 +01:00
Piyush Bhaskar
b0509b8c51 chore(ui): amend tags design on blueprints section (#6229)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 12:11:32 +01:00
GitHub Action
7171c56979 chore(translations): auto generate values for languages other than english 2024-12-04 11:00:21 +00:00
Piyush Bhaskar
5ee8dc1341 chore(ui): Improvement in Welcome Page. (#6077)
* chore(ui): Improvement in Welcome Page.

* Update Welcome.vue | scoped the styling

* fix bad merge

* remove special behavior of navbar on welcome

* finish the welcome page (thank you)

* fix: better adaptive layout

* use container queries and flex for better responsive design

* chore(translations): auto generate values for languages other than english

---------

Co-authored-by: Barthélémy Ledoux <ledouxb@me.com>
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
Co-authored-by: GitHub Action <actions@github.com>
2024-12-04 11:59:23 +01:00
Florian Hussonnois
5330aa0e84 chore(ci): add workflow to release all plugins 2024-12-04 11:09:47 +01:00
Loïc Mathieu
91dd6170f1 fix(jdbc): possible race when initializing the JdbcMapper 2024-12-04 10:40:50 +01:00
Hyoseop Song
ba0e770a05 Add subpath guard function to avoid non-relative subpath parsed URI 2024-12-04 10:40:32 +01:00
dependabot[bot]
e850764403 chore(deps): bump org.jooq:jooq from 3.19.14 to 3.19.15
Bumps org.jooq:jooq from 3.19.14 to 3.19.15.

---
updated-dependencies:
- dependency-name: org.jooq:jooq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-04 10:12:31 +01:00
dependabot[bot]
296e2739a5 chore(deps): bump aquasecurity/trivy-action from 0.28.0 to 0.29.0
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.28.0 to 0.29.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.28.0...0.29.0)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-04 10:06:01 +01:00
dependabot[bot]
d6029b0908 chore(deps): bump andrcuns/allure-publish-action from 2.8.0 to 2.9.0
Bumps [andrcuns/allure-publish-action](https://github.com/andrcuns/allure-publish-action) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/andrcuns/allure-publish-action/releases)
- [Commits](https://github.com/andrcuns/allure-publish-action/compare/v2.8.0...v2.9.0)

---
updated-dependencies:
- dependency-name: andrcuns/allure-publish-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-04 10:05:52 +01:00
Loïc Mathieu
e165052693 chore(core): remove deprecated RunContext.render(Property) methods 2024-12-04 09:41:55 +01:00
Loïc Mathieu
fb9691d67a chore(core): avoid using applicationContext.init() in the RunContext
This will improve performance as a run context is created very often.

Fixes #5492
2024-12-04 09:41:55 +01:00
Miloš Paunović
67840589b6 chore(deps): regular dependency update (#6287) 2024-12-04 09:31:07 +01:00
Nitin Bisht
418aa9dd38 chore(ui): amend spacing on plugins page (#6223)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 08:54:24 +01:00
yuri
c74828685f fix(ui): generalize filter width across browsers (#5980)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 08:51:11 +01:00
Joe Celaster
eb1cbfa4d9 chore(ui): remove search field background on single plugin page (#6220)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 08:48:08 +01:00
Manoj Balaraj
57bc721c61 fix(ui): improve debug outputs expression on initial load (#6094)
Co-authored-by: manu2931 <manojb912@gmai.com>
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 08:44:25 +01:00
GitHub Action
02898d29ac chore(translations): auto generate values for languages other than english 2024-12-04 07:41:28 +00:00
morri12
4901c1b127 chore(ui): add a confirmation dialog before removing a bookmark (#6217)
Co-authored-by: Ryanator <ryanmorris@rogers.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 08:41:00 +01:00
Piyush Bhaskar
c95d474500 chore(ui): add top and left padding to editor component (#6191)
Co-authored-by: Piyush-r-bhaskar <piyush.bhaskar@gmail.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-12-04 08:38:24 +01:00
Ines Qian
7f6436f95f chore(ui): properly highlight selected options in all of the filter dropdowns (#6173)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-12-04 08:33:50 +01:00
brian.mulier
6dbdfad9ce fix(test): add metadata assertion to storage listing 2024-12-03 20:33:46 +01:00
Barthélémy Ledoux
d67df717f2 fix(docs): keep use in docs sidebar when clicking in TOC page (#6262)
* fix(docs): keep use in docs sidebar when clicking in TOC page

* fix: allow open in a new tab and main menu in docs

* woops

* woops I did it again

* fix: context docs link should never move away from page

* remove vue warnings
2024-12-03 14:28:27 +01:00
Loïc Mathieu
0f2c5bb57e fix(core): possible NPE when the Executor didn't have the flow 2024-12-03 12:19:10 +01:00
Florian Hussonnois
fba4a7929e chore(version): update snapshot version 'v0.21.0-SNAPSHOT'. 2024-12-03 12:06:06 +01:00
Florian Hussonnois
279be83445 chore(version): update to version 'v0.20.0'. 2024-12-03 12:06:03 +01:00
1396 changed files with 85256 additions and 36364 deletions

67
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,67 @@
FROM ubuntu:24.04
ARG DEBIAN_FRONTEND=noninteractive
USER root
WORKDIR /root
RUN apt update && apt install -y \
apt-transport-https ca-certificates gnupg curl wget git zip unzip less zsh net-tools iputils-ping jq lsof
ENV HOME="/root"
# --------------------------------------
# Git
# --------------------------------------
# Need to add the devcontainer workspace folder as a safe directory to enable git
# version control system to be enabled in the containers file system.
RUN git config --global --add safe.directory "/workspaces/kestra"
# --------------------------------------
# --------------------------------------
# Oh my zsh
# --------------------------------------
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" -- \
-t robbyrussell \
-p git -p node -p npm
ENV SHELL=/bin/zsh
# --------------------------------------
# --------------------------------------
# Java
# --------------------------------------
RUN wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
RUN dpkg -i ./jdk-21_linux-x64_bin.deb
ENV JAVA_HOME=/usr/java/jdk-21-oracle-x64
ENV PATH="$PATH:$JAVA_HOME/bin"
# Will load a custom configuration file for Micronaut
ENV MICRONAUT_ENVIRONMENTS=local,override
# Sets the path where you save plugins as Jar and is loaded during the startup process
ENV KESTRA_PLUGINS_PATH="/workspaces/kestra/local/plugins"
# --------------------------------------
# --------------------------------------
# Node.js
# --------------------------------------
RUN curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh \
&& bash nodesource_setup.sh && apt install -y nodejs
# Increases JavaScript heap memory to 4GB to prevent heap out of error during startup
ENV NODE_OPTIONS=--max-old-space-size=4096
# --------------------------------------
# --------------------------------------
# Python
# --------------------------------------
RUN apt install -y python3 pip python3-venv
# --------------------------------------
# --------------------------------------
# SSH
# --------------------------------------
RUN mkdir -p ~/.ssh
RUN touch ~/.ssh/config
RUN echo "Host github.com" >> ~/.ssh/config \
&& echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
RUN touch ~/.ssh/id_ed25519
# --------------------------------------

144
.devcontainer/README.md Normal file
View File

@@ -0,0 +1,144 @@
# Kestra Devcontainer
This devcontainer provides a quick and easy setup for anyone using VSCode to get up and running quickly with this project to start development on either the frontend or backend. It bootstraps a docker container for you to develop inside of without the need to manually setup the environment.
---
## INSTRUCTIONS
### Setup:
Take a look at this guide to get an idea of what the setup is like as this devcontainer setup follows this approach: https://kestra.io/docs/getting-started/contributing
Once you have this repo cloned to your local system, you will need to install the VSCode extension [Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack).
Then run the following command from the command palette:
`Dev Containers: Open Folder in Container...` and select your Kestra root folder.
This will then put you inside a docker container ready for development.
NOTE: you'll need to wait for the gradle build to finish and compile Java files but this process should happen automatically within VSCode.
In the meantime, you can move onto the next step...
---
### Development:
- Create a `.env.development.local` file in the `ui` folder and paste the following:
- Navigate into the `ui` folder and run `npm install` to install the dependencies for the frontend project.
- Now go to the `cli/src/main/resources` folder and create a `application-override.yml` file.
Now you have two choices:
`Local mode`:
Runs the Kestra server in local mode which uses a H2 database, so this is the only config you'd need:
```yaml
micronaut:
server:
cors:
enabled: true
configurations:
all:
allowedOrigins:
- http://localhost:5173
```
You can then open a new terminal and run the following command to start the backend server: `./gradlew runLocal`
`Standalone mode`:
Runs in standalone mode which uses Postgres. Make sure to have a local Postgres instance already running on localhost:
```yaml
kestra:
repository:
type: postgres
storage:
type: local
local:
base-path: "/app/storage"
queue:
type: postgres
tasks:
tmp-dir:
path: /tmp/kestra-wd/tmp
anonymous-usage-report:
enabled: false
server:
basic-auth:
enabled: false
datasources:
postgres:
# It is important to note that you must use the "host.docker.internal" host when connecting to a docker container outside of your devcontainer as attempting to use localhost will only point back to this devcontainer.
url: jdbc:postgresql://host.docker.internal:5432/kestra
driverClassName: org.postgresql.Driver
username: kestra
password: k3str4
flyway:
datasources:
postgres:
enabled: true
locations:
- classpath:migrations/postgres
# We must ignore missing migrations as we may delete the wrong ones or delete those that are not used anymore.
ignore-migration-patterns: "*:missing,*:future"
out-of-order: true
micronaut:
server:
cors:
enabled: true
configurations:
all:
allowedOrigins:
- http://localhost:5173
```
Then add the following settings to the `.vscode/launch.json` file:
```json
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Kestra Standalone",
"request": "launch",
"mainClass": "io.kestra.cli.App",
"projectName": "cli",
"args": "server standalone"
}
]
}
```
You can then use the VSCode `Run and Debug` extension to start the Kestra server.
Additionally, if you're doing frontend development, you can run `npm run dev` from the `ui` folder after having the above running (which will provide a backend) to access your application from `localhost:5173`. This has the benefit to watch your changes and hot-reload upon doing frontend changes.
#### Plugins
If you want your plugins to be loaded inside your devcontainer, point the `source` field to a folder containing jars of the plugins you want to embed in the following snippet in `devcontainer.json`:
```
"mounts": [
{
"source": "/absolute/path/to/your/local/jar/plugins/folder",
"target": "/workspaces/kestra/local/plugins",
"type": "bind"
}
],
```
---
### GIT
If you want to commit to GitHub, make sure to navigate to the `~/.ssh` folder and either create a new SSH key or override the existing `id_ed25519` file and paste an existing SSH key from your local machine into this file. You will then need to change the permissions of the file by running: `chmod 600 id_ed25519`. This will allow you to then push to GitHub.
---

View File

@@ -0,0 +1,46 @@
{
"name": "kestra",
"build": {
"context": ".",
"dockerfile": "Dockerfile"
},
"workspaceFolder": "/workspaces/kestra",
"forwardPorts": [5173, 8080],
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/bin/zsh"
}
},
"workbench.iconTheme": "vscode-icons",
"editor.tabSize": 4,
"editor.formatOnSave": true,
"files.insertFinalNewline": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"telemetry.telemetryLevel": "off",
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active"
},
"extensions": [
"redhat.vscode-yaml",
"dbaeumer.vscode-eslint",
"vscode-icons-team.vscode-icons",
"eamodio.gitlens",
"esbenp.prettier-vscode",
"aaron-bond.better-comments",
"codeandstuff.package-json-upgrade",
"andys8.jest-snippets",
"oderwat.indent-rainbow",
"evondev.indent-rainbow-palettes",
"formulahendry.auto-rename-tag",
"IronGeek.vscode-env",
"yoavbls.pretty-ts-errors",
"github.vscode-github-actions",
"vscjava.vscode-java-pack",
"ms-azuretools.vscode-docker"
]
}
}
}

View File

@@ -76,7 +76,6 @@ python3 -m pip install virtualenv
The frontend is made with [Vue.js](https://vuejs.org/) and located on the `/ui` folder.
- `npm install`
- create a file `ui/.env.development.local` with content `VITE_APP_API_URL=http://localhost:8080` (or your actual server url)
- `npm run dev` will start the development server with hot reload.
- The server start by default on port 5173 and is reachable on `http://localhost:5173`
- You can run `npm run build` in order to build the front-end that will be delivered from the backend (without running the `npm run dev`) above.

View File

@@ -1,24 +0,0 @@
name: 'Load Kestra Plugin List'
description: 'Composite action to load list of plugins'
inputs:
plugin-version:
description: "Kestra version"
default: 'LATEST'
required: true
plugin-file:
description: "File of the plugins"
default: './.plugins'
required: true
outputs:
plugins:
description: "List of all Kestra plugins"
value: ${{ steps.plugins.outputs.plugins }}
runs:
using: composite
steps:
- name: Get Plugins List
id: plugins
shell: bash
run: |
PLUGINS=$([ -f ${{ inputs.plugin-file }} ] && cat ${{ inputs.plugin-file }} | grep "io\\.kestra\\." | sed -e '/#/s/^.//' | sed -e "s/LATEST/${{ inputs.plugin-version }}/g" | xargs || echo '');
echo "plugins=$PLUGINS" >> $GITHUB_OUTPUT

View File

@@ -1,20 +0,0 @@
name: 'Setup vars'
description: 'Composite action to setup common vars'
outputs:
tag:
description: "Git tag"
value: ${{ steps.vars.outputs.tag }}
commit:
description: "Git commit"
value: ${{ steps.vars.outputs.commit }}
runs:
using: composite
steps:
# Setup vars
- name: Set variables
id: vars
shell: bash
run: |
TAG=${GITHUB_REF#refs/*/}
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "commit=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_OUTPUT

View File

@@ -33,9 +33,6 @@ updates:
open-pull-requests-limit: 50
labels: ["dependency-upgrade"]
ignore:
# Ignore major versions greater than 8, as it's still known to be flaky
- dependency-name: "eslint"
versions: [">8"]
# Ignore updates of version 1.x, as we're using beta of 2.x
- dependency-name: "vue-virtual-scroller"
versions: ["1.x"]

View File

@@ -1,117 +0,0 @@
name: Daily Core check
on:
schedule:
- cron: '0 5 * * *'
jobs:
check:
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
name: Check & Publish
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
python-enabled: true
caches-enabled: true
# Services
- name: Build the docker-compose stack
run: docker compose -f docker-compose-ci.yml up -d
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
# Gradle check
- name: Build with Gradle
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
env:
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
run: |
echo $GOOGLE_SERVICE_ACCOUNT | base64 -d > ~/.gcp-service-account.json
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/.gcp-service-account.json
./gradlew check javadoc --parallel --refresh-dependencies
# Sonar
- name: Analyze with Sonar
if: ${{ env.SONAR_TOKEN != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonar --info
# Allure check
- name: Auth to Google Cloud
id: auth
if: ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.8.0
if: ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
env:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JAVA_HOME: /usr/lib/jvm/default-jvm/
with:
storageType: gcs
resultsGlob: "**/build/allure-results"
bucket: internal-kestra-host
baseUrl: "https://internal.kestra.io"
prefix: ${{ format('{0}/{1}', github.repository, 'allure/java') }}
copyLatest: true
ignoreMissingResults: true
# Jacoco
- name: 'Set up Cloud SDK'
if: ${{ github.ref == 'refs/heads/develop' && env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
uses: 'google-github-actions/setup-gcloud@v2'
- name: 'Copy jacoco files'
if: ${{ github.ref == 'refs/heads/develop' && env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
run: |
mv build/reports/jacoco/testCodeCoverageReport build/reports/jacoco/test/
mv build/reports/jacoco/test/testCodeCoverageReport.xml build/reports/jacoco/test/jacocoTestReport.xml
gsutil -m rsync -d -r build/reports/jacoco/test/ gs://internal-kestra-host/${{ format('{0}/{1}', github.repository, 'jacoco') }}
# report test
- name: Test Report
uses: mikepenz/action-junit-report@v5
if: success() || failure()
with:
report_paths: '**/build/test-results/**/TEST-*.xml'
# Codecov
- uses: codecov/codecov-action@v5
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Notify failed CI
id: send-ci-failed
if: always() && job.status != 'success'
uses: kestra-io/actions/.github/actions/send-ci-failed@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

View File

@@ -1,75 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
name: "CodeQL"
on:
push:
branches: [develop]
schedule:
- cron: '0 5 * * 1'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
language: ['java', 'javascript']
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Set up JDK
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3

View File

@@ -1,134 +0,0 @@
name: Create Docker images on tag
on:
workflow_dispatch:
inputs:
retag-latest:
description: 'Retag latest Docker images'
required: true
type: string
default: "true"
options:
- "true"
- "false"
plugin-version:
description: 'Plugin version'
required: false
type: string
default: "LATEST"
env:
PLUGIN_VERSION: ${{ github.event.inputs.plugin-version != null && github.event.inputs.plugin-version || 'LATEST' }}
jobs:
plugins:
name: List Plugins
runs-on: ubuntu-latest
outputs:
plugins: ${{ steps.plugins.outputs.plugins }}
steps:
# Checkout
- uses: actions/checkout@v4
# Get Plugins List
- name: Get Plugins List
uses: ./.github/actions/plugins-list
id: plugins
with:
plugin-version: ${{ env.PLUGIN_VERSION }}
docker:
name: Publish Docker
needs: [ plugins ]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
strategy:
matrix:
image:
- name: "-no-plugins"
plugins: ""
packages: ""
python-libs: ""
- name: ""
plugins: ${{needs.plugins.outputs.plugins}}
packages: python3 python3-venv python-is-python3 python3-pip nodejs npm curl zip unzip
python-libs: kestra
steps:
- uses: actions/checkout@v4
# Vars
- name: Set image name
id: vars
run: |
TAG=${GITHUB_REF#refs/*/}
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "plugins=${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT
# Download release
- name: Download release
uses: robinraju/release-downloader@v1.11
with:
tag: ${{steps.vars.outputs.tag}}
fileName: 'kestra-*'
out-file-path: build/executable
- name: Copy exe to image
run: |
cp build/executable/* docker/app/kestra && chmod +x docker/app/kestra
# Docker setup
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Docker Login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# Docker Build and push
- name: Push to Docker Hub
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ format('kestra/kestra:{0}{1}', steps.vars.outputs.tag, matrix.image.name) }}
platforms: linux/amd64,linux/arm64
build-args: |
KESTRA_PLUGINS=${{ steps.vars.outputs.plugins }}
APT_PACKAGES=${{ matrix.image.packages }}
PYTHON_LIBRARIES=${{ matrix.image.python-libs }}
- name: Install regctl
if: github.event.inputs.retag-latest == 'true'
uses: regclient/actions/regctl-installer@main
- name: Retag to latest
if: github.event.inputs.retag-latest == 'true'
run: |
regctl image copy ${{ format('kestra/kestra:{0}{1}', steps.vars.outputs.tag, matrix.image.name) }} ${{ format('kestra/kestra:latest{0}', matrix.image.name) }}
- name: Retag latest to latest-full
if: github.event.inputs.retag-latest == 'true'
run: |
regctl image copy kestra/kestra:latest kestra/kestra:latest-full
end:
runs-on: ubuntu-latest
needs:
- docker
if: always()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
steps:
# Slack
- name: Slack notification
uses: Gamesight/slack-workflow-status@master
if: ${{ always() && env.SLACK_WEBHOOK_URL != 0 }}
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
name: GitHub Actions
icon_emoji: ':github-actions:'
channel: 'C02DQ1A7JLR' # _int_git channel

View File

@@ -1,164 +0,0 @@
name: 'Reusable Workflow for Running End-to-End Tests'
on:
workflow_call:
inputs:
tags:
description: "Tags used for filtering tests to include for QA."
type: string
required: true
docker-artifact-name:
description: "The GitHub artifact containing the Kestra docker image."
type: string
required: false
docker-image-tag:
description: "The Docker image Tag for Kestra"
default: 'kestra/kestra:develop'
type: string
required: true
backend:
description: "The Kestra backend type to be used for E2E tests."
type: string
required: true
default: "postgres"
secrets:
GITHUB_AUTH_TOKEN:
description: "The GitHub Token."
required: true
GOOGLE_SERVICE_ACCOUNT:
description: "The Google Service Account."
required: false
jobs:
check:
timeout-minutes: 60
runs-on: ubuntu-latest
env:
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
E2E_TEST_DOCKER_DIR: ./kestra/e2e-tests/docker
KESTRA_BASE_URL: http://127.27.27.27:8080/ui/
steps:
# Checkout kestra
- name: Checkout kestra
uses: actions/checkout@v4
with:
path: kestra
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
caches-enabled: true
# Get Docker Image
- name: Download Kestra Image
if: inputs.docker-artifact-name != ''
uses: actions/download-artifact@v4
with:
name: ${{ inputs.docker-artifact-name }}
path: /tmp
- name: Load Kestra Image
if: inputs.docker-artifact-name != ''
run: |
docker load --input /tmp/${{ inputs.docker-artifact-name }}.tar
# Docker Compose
- name: Login to DockerHub
uses: docker/login-action@v3
if: inputs.docker-artifact-name == ''
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
# Build configuration
- name: Create additional application configuration
run: |
touch ${{ env.E2E_TEST_DOCKER_DIR }}/data/application-secrets.yml
- name: Setup additional application configuration
if: env.APPLICATION_SECRETS != null
env:
APPLICATION_SECRETS: ${{ secrets.APPLICATION_SECRETS }}
run: |
echo $APPLICATION_SECRETS | base64 -d > ${{ env.E2E_TEST_DOCKER_DIR }}/data/application-secrets.yml
# Deploy Docker Compose Stack
- name: Run Kestra (${{ inputs.backend }})
env:
KESTRA_DOCKER_IMAGE: ${{ inputs.docker-image-tag }}
run: |
cd ${{ env.E2E_TEST_DOCKER_DIR }}
echo "KESTRA_DOCKER_IMAGE=$KESTRA_DOCKER_IMAGE" >> .env
docker compose -f docker-compose-${{ inputs.backend }}.yml up -d
- name: Install Playwright Deps
run: |
cd kestra
./gradlew playwright --args="install-deps"
# Run E2E Tests
- name: Wait For Kestra UI
run: |
# Start time
START_TIME=$(date +%s)
# Timeout duration in seconds (5 minutes)
TIMEOUT_DURATION=$((5 * 60))
while [ $(curl -s -L -o /dev/null -w %{http_code} $KESTRA_BASE_URL) != 200 ]; do
echo -e $(date) "\tKestra server HTTP state: " $(curl -k -L -s -o /dev/null -w %{http_code} $KESTRA_BASE_URL) " (waiting for 200)";
# Check the elapsed time
CURRENT_TIME=$(date +%s)
ELAPSED_TIME=$((CURRENT_TIME - START_TIME))
# Break the loop if the elapsed time exceeds the timeout duration
if [ $ELAPSED_TIME -ge $TIMEOUT_DURATION ]; then
echo "Timeout reached: Exiting after 5 minutes."
exit 1;
fi
sleep 2;
done;
echo "Kestra is running: $KESTRA_BASE_URL 🚀";
continue-on-error: true
- name: Run E2E Tests (${{ inputs.tags }})
if: inputs.tags != ''
run: |
cd kestra
./gradlew e2eTestsCheck -P tags=${{ inputs.tags }}
- name: Run E2E Tests
if: inputs.tags == ''
run: |
cd kestra
./gradlew e2eTestsCheck
# Allure check
- name: Auth to Google Cloud
id: auth
if: ${{ !cancelled() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.8.0
if: ${{ !cancelled() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
env:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_AUTH_TOKEN }}
JAVA_HOME: /usr/lib/jvm/default-jvm/
with:
storageType: gcs
resultsGlob: build/allure-results
bucket: internal-kestra-host
baseUrl: "https://internal.kestra.io"
prefix: ${{ format('{0}/{1}/{2}', github.repository, env.GITHUB_HEAD_REF_SLUG != '' && env.GITHUB_HEAD_REF_SLUG || github.ref_name, 'allure/playwright') }}
copyLatest: true
ignoreMissingResults: true

View File

@@ -1,111 +0,0 @@
name: Generate Translations
on:
pull_request:
types: [opened, synchronize]
paths:
- "ui/src/translations/en.json"
push:
branches:
- develop
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
jobs:
commit:
name: Commit directly to PR
runs-on: ubuntu-latest
if: ${{ github.event.pull_request.head.repo.fork == false }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 50
ref: ${{ github.head_ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install Python dependencies
run: pip install gitpython openai
- name: Generate translations
run: python ui/src/translations/generate_translations.py
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Check keys matching
run: node ui/src/translations/check.js
- name: Set up Git
run: |
git config --global user.name "GitHub Action"
git config --global user.email "actions@github.com"
- name: Check for changes and commit
env:
GH_TOKEN: ${{ github.token }}
run: |
git add ui/src/translations/*.json
if git diff --cached --quiet; then
echo "No changes to commit. Exiting with success."
exit 0
fi
git commit -m "chore(translations): auto generate values for languages other than english"
git push origin ${{ github.head_ref }}
pull_request:
name: Open PR for a forked repository
runs-on: ubuntu-latest
if: ${{ github.event.pull_request.head.repo.fork == true }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 10
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install Python dependencies
run: pip install gitpython openai
- name: Generate translations
run: python ui/src/translations/generate_translations.py
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Check keys matching
run: node ui/src/translations/check.js
- name: Set up Git
run: |
git config --global user.name "GitHub Action"
git config --global user.email "actions@github.com"
- name: Create and push a new branch
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BRANCH_NAME="generated-translations-${{ github.event.pull_request.head.repo.name }}"
git checkout -b $BRANCH_NAME
git add ui/src/translations/*.json
if git diff --cached --quiet; then
echo "No changes to commit. Exiting with success."
exit 0
fi
git commit -m "chore(translations): auto generate values for languages other than english"
git push origin $BRANCH_NAME

87
.github/workflows/main-build.yml vendored Normal file
View File

@@ -0,0 +1,87 @@
name: Main Workflow
on:
push:
branches:
- releases/*
- develop
workflow_dispatch:
inputs:
skip-test:
description: 'Skip test'
type: choice
required: true
default: 'false'
options:
- "true"
- "false"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-main
cancel-in-progress: true
jobs:
backend-tests:
name: Backend tests
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
uses: kestra-io/actions/.github/workflows/kestra-oss-backend-tests.yml@main
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
frontend-tests:
name: Frontend tests
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
uses: kestra-io/actions/.github/workflows/kestra-oss-frontend-tests.yml@main
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-develop-docker:
name: Publish Docker
needs: [backend-tests, frontend-tests]
if: "!failure() && !cancelled() && github.ref == 'refs/heads/develop'"
uses: kestra-io/actions/.github/workflows/kestra-oss-publish-docker.yml@main
with:
plugin-version: 'LATEST-SNAPSHOT'
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
GH_PERSONAL_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}
publish-develop-maven:
name: Publish develop Maven
needs: [ backend-tests, frontend-tests ]
if: "!failure() && !cancelled() && github.ref == 'refs/heads/develop'"
uses: kestra-io/actions/.github/workflows/kestra-oss-publish-maven.yml@main
secrets:
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_GPG_KEYID: ${{ secrets.SONATYPE_GPG_KEYID }}
SONATYPE_GPG_PASSWORD: ${{ secrets.SONATYPE_GPG_PASSWORD }}
SONATYPE_GPG_FILE: ${{ secrets.SONATYPE_GPG_FILE }}
end:
runs-on: ubuntu-latest
needs: [publish-develop-docker, publish-develop-maven]
if: always()
steps:
- name: Trigger EE Workflow
uses: peter-evans/repository-dispatch@v3
if: github.ref == 'refs/heads/develop' && needs.release.result == 'success'
with:
token: ${{ secrets.GH_PERSONAL_TOKEN }}
repository: kestra-io/kestra-ee
event-type: "oss-updated"
# Slack
- name: Slack - Notification
if: ${{ failure() && env.SLACK_WEBHOOK_URL != 0 && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') }}
uses: kestra-io/actions/composite/slack-status@main
with:
webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}

View File

@@ -1,466 +0,0 @@
name: Main
on:
push:
branches:
- develop
tags:
- v*
pull_request:
branches:
- develop
repository_dispatch:
types: [ rebuild ]
workflow_dispatch:
inputs:
skip-test:
description: 'Skip test'
type: choice
required: true
default: 'false'
options:
- "true"
- "false"
plugin-version:
description: 'Plugin version'
required: false
type: string
default: "LATEST"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
JAVA_VERSION: '21'
DOCKER_APT_PACKAGES: python3 python3-venv python-is-python3 python3-pip nodejs npm curl zip unzip
DOCKER_PYTHON_LIBRARIES: kestra
PLUGIN_VERSION: ${{ github.event.inputs.plugin-version != null && github.event.inputs.plugin-version || 'LATEST' }}
jobs:
build-artifacts:
name: Build Artifacts
runs-on: ubuntu-latest
timeout-minutes: 60
outputs:
docker-tag: ${{ steps.vars.outputs.tag }}
docker-artifact-name: ${{ steps.vars.outputs.artifact }}
plugins: ${{ steps.plugins-list.outputs.plugins }}
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
caches-enabled: true
# Get Plugins List
- name: Get Plugins List
uses: ./.github/actions/plugins-list
if: "!startsWith(github.ref, 'refs/tags/v')"
id: plugins-list
with:
plugin-version: ${{ env.PLUGIN_VERSION }}
# Set Plugins List
- name: Set Plugin List
id: plugins
if: "!startsWith(github.ref, 'refs/tags/v')"
run: |
PLUGINS="${{ steps.plugins-list.outputs.plugins }}"
TAG=${GITHUB_REF#refs/*/}
if [[ $TAG = "master" || $TAG == v* ]]; then
echo "plugins=$PLUGINS" >> $GITHUB_OUTPUT
else
echo "plugins=--repositories=https://s01.oss.sonatype.org/content/repositories/snapshots $PLUGINS" >> $GITHUB_OUTPUT
fi
# Build
- name: Build with Gradle
run: |
./gradlew executableJar
- name: Copy exe to image
run: |
cp build/executable/* docker/app/kestra && chmod +x docker/app/kestra
# Docker Tag
- name: Set up Vars
id: vars
run: |
TAG=${GITHUB_REF#refs/*/}
if [[ $TAG = "master" ]]
then
TAG="latest";
elif [[ $TAG = "develop" ]]
then
TAG="develop";
elif [[ $TAG = v* ]]
then
TAG="${TAG}";
else
TAG="build-${{ github.run_id }}";
fi
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "artifact=docker-kestra-${TAG}" >> $GITHUB_OUTPUT
# Docker setup
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Docker Build
- name: Build & Export Docker Image
uses: docker/build-push-action@v6
if: "!startsWith(github.ref, 'refs/tags/v')"
with:
context: .
push: false
file: Dockerfile
tags: |
kestra/kestra:${{ steps.vars.outputs.tag }}
build-args: |
KESTRA_PLUGINS=${{ steps.plugins.outputs.plugins }}
APT_PACKAGES=${{ env.DOCKER_APT_PACKAGES }}
PYTHON_LIBRARIES=${{ env.DOCKER_PYTHON_LIBRARIES }}
outputs: type=docker,dest=/tmp/${{ steps.vars.outputs.artifact }}.tar
# Upload artifacts
- name: Upload JAR
uses: actions/upload-artifact@v4
with:
name: jar
path: build/libs/
- name: Upload Executable
uses: actions/upload-artifact@v4
with:
name: exe
path: build/executable/
- name: Upload Docker
uses: actions/upload-artifact@v4
if: "!startsWith(github.ref, 'refs/tags/v')"
with:
name: ${{ steps.vars.outputs.artifact }}
path: /tmp/${{ steps.vars.outputs.artifact }}.tar
# Run Reusable Workflow from QA repository
check-e2e:
name: Check E2E Tests
needs: build-artifacts
if: ${{ (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') && !startsWith(github.ref, 'refs/tags/v') }}
uses: ./.github/workflows/e2e.yml
strategy:
fail-fast: false
matrix:
backends: ["postgres"]
with:
tags: oss
docker-artifact-name: ${{ needs.build-artifacts.outputs.docker-artifact-name }}
docker-image-tag: kestra/kestra:${{ needs.build-artifacts.outputs.docker-tag }}
backend: ${{ matrix.backends }}
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
check:
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
name: Check & Publish
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
python-enabled: true
caches-enabled: true
# Services
- name: Build the docker-compose stack
run: docker compose -f docker-compose-ci.yml up -d
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
# Gradle check
- name: Build with Gradle
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
env:
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
run: |
echo $GOOGLE_SERVICE_ACCOUNT | base64 -d > ~/.gcp-service-account.json
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/.gcp-service-account.json
./gradlew check javadoc --parallel
# Sonar
- name: Analyze with Sonar
if: ${{ env.SONAR_TOKEN != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonar --info
# Allure check
- name: Auth to Google Cloud
id: auth
if: ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.8.0
if: ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
env:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JAVA_HOME: /usr/lib/jvm/default-jvm/
with:
storageType: gcs
resultsGlob: "**/build/allure-results"
bucket: internal-kestra-host
baseUrl: "https://internal.kestra.io"
prefix: ${{ format('{0}/{1}', github.repository, 'allure/java') }}
copyLatest: true
ignoreMissingResults: true
# Jacoco
- name: 'Set up Cloud SDK'
if: ${{ env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
uses: 'google-github-actions/setup-gcloud@v2'
- name: 'Copy jacoco files'
if: ${{ env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
run: |
mv build/reports/jacoco/testCodeCoverageReport build/reports/jacoco/test/
mv build/reports/jacoco/test/testCodeCoverageReport.xml build/reports/jacoco/test/jacocoTestReport.xml
gsutil -m rsync -d -r build/reports/jacoco/test/ gs://internal-kestra-host/${{ format('{0}/{1}', github.repository, 'jacoco') }}
# report test
- name: Test Report
uses: mikepenz/action-junit-report@v5
if: success() || failure()
with:
report_paths: '**/build/test-results/**/TEST-*.xml'
# Codecov
- uses: codecov/codecov-action@v5
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
release:
name: Github Release
runs-on: ubuntu-latest
needs: [ check, check-e2e ]
if: |
always() &&
startsWith(github.ref, 'refs/tags/v') &&
needs.check.result == 'success' &&
(needs.check-e2e.result == 'skipped' || needs.check-e2e.result == 'success')
steps:
# Download Exec
- name: Download executable
uses: actions/download-artifact@v4
if: startsWith(github.ref, 'refs/tags/v')
with:
name: exe
path: build/executable
# GitHub Release
- name: Create GitHub release
uses: "marvinpinto/action-automatic-releases@latest"
if: startsWith(github.ref, 'refs/tags/v')
continue-on-error: true
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false
files: |
build/executable/*
docker:
name: Publish Docker
runs-on: ubuntu-latest
needs: [build-artifacts, check, check-e2e]
if: github.ref == 'refs/heads/develop'
strategy:
matrix:
image:
- tag: ${{needs.build-artifacts.outputs.docker-tag}}-no-plugins
packages: ""
python-libraries: ""
- tag: ${{needs.build-artifacts.outputs.docker-tag}}
plugins: ${{needs.build-artifacts.outputs.plugins}}
packages: python3 python3-venv python-is-python3 python3-pip nodejs npm curl zip unzip
python-libraries: kestra
steps:
- uses: actions/checkout@v4
# Docker setup
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Docker Login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# Vars
- name: Set image name
id: vars
run: |
TAG=${GITHUB_REF#refs/*/}
if [[ $TAG = "master" || $TAG == v* ]]; then
echo "plugins=${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT
else
echo "plugins=--repositories=https://s01.oss.sonatype.org/content/repositories/snapshots ${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT
fi
# Build Docker Image
- name: Download executable
uses: actions/download-artifact@v4
with:
name: exe
path: build/executable
- name: Copy exe to image
run: |
cp build/executable/* docker/app/kestra && chmod +x docker/app/kestra
# Docker Build and push
- name: Build Docker Image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: kestra/kestra:${{ matrix.image.tag }}
platforms: linux/amd64,linux/arm64
build-args: |
KESTRA_PLUGINS=${{ steps.vars.outputs.plugins }}
APT_PACKAGES=${{matrix.image.packages}}
PYTHON_LIBRARIES=${{matrix.image.python-libraries}}
maven:
name: Publish to Maven
runs-on: ubuntu-latest
needs: [check, check-e2e]
if: |
always() &&
github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/v') &&
needs.check.result == 'success' &&
(needs.check-e2e.result == 'skipped' || needs.check-e2e.result == 'success')
steps:
- uses: actions/checkout@v4
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
caches-enabled: true
# Publish
- name: Publish package to Sonatype
if: github.ref == 'refs/heads/develop'
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USER }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_GPG_KEYID: ${{ secrets.SONATYPE_GPG_KEYID }}
SONATYPE_GPG_PASSWORD: ${{ secrets.SONATYPE_GPG_PASSWORD }}
SONATYPE_GPG_FILE: ${{ secrets.SONATYPE_GPG_FILE }}
run: |
mkdir -p ~/.gradle/
echo "signing.keyId=${SONATYPE_GPG_KEYID}" > ~/.gradle/gradle.properties
echo "signing.password=${SONATYPE_GPG_PASSWORD}" >> ~/.gradle/gradle.properties
echo "signing.secretKeyRingFile=${HOME}/.gradle/secring.gpg" >> ~/.gradle/gradle.properties
echo ${SONATYPE_GPG_FILE} | base64 -d > ~/.gradle/secring.gpg
./gradlew publishToSonatype
# Release
- name: Release package to Maven Central
if: startsWith(github.ref, 'refs/tags/v')
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USER }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_GPG_KEYID: ${{ secrets.SONATYPE_GPG_KEYID }}
SONATYPE_GPG_PASSWORD: ${{ secrets.SONATYPE_GPG_PASSWORD }}
SONATYPE_GPG_FILE: ${{ secrets.SONATYPE_GPG_FILE }}
run: |
echo "signing.keyId=${SONATYPE_GPG_KEYID}" > ~/.gradle/gradle.properties
echo "signing.password=${SONATYPE_GPG_PASSWORD}" >> ~/.gradle/gradle.properties
echo "signing.secretKeyRingFile=${HOME}/.gradle/secring.gpg" >> ~/.gradle/gradle.properties
echo ${SONATYPE_GPG_FILE} | base64 -d > ~/.gradle/secring.gpg
./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
end:
runs-on: ubuntu-latest
needs:
- check-e2e
- check
- maven
- docker
- release
if: always()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
steps:
# Update
- name: Update internal
uses: benc-uk/workflow-dispatch@v1
if: github.ref == 'refs/heads/develop' && needs.docker.result == 'success'
with:
workflow: oss-build.yml
repo: kestra-io/infra
ref: master
token: ${{ secrets.GH_PERSONAL_TOKEN }}
# Slack
- name: Slack notification
uses: Gamesight/slack-workflow-status@master
if: ${{ always() && env.SLACK_WEBHOOK_URL != 0 }}
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
name: GitHub Actions
icon_emoji: ':github-actions:'
channel: 'C02DQ1A7JLR' # _int_git channel

60
.github/workflows/pre-release.yml vendored Normal file
View File

@@ -0,0 +1,60 @@
name: Pre Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
skip-test:
description: 'Skip test'
type: choice
required: true
default: 'false'
options:
- "true"
- "false"
jobs:
build-artifacts:
name: Build Artifacts
uses: kestra-io/actions/.github/workflows/kestra-oss-build-artifacts.yml@main
backend-tests:
name: Backend tests
uses: kestra-io/actions/.github/workflows/kestra-oss-backend-tests.yml@main
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
frontend-tests:
name: Frontend tests
uses: kestra-io/actions/.github/workflows/kestra-oss-frontend-tests.yml@main
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
publish-maven:
name: Publish Maven
needs: [ backend-tests, frontend-tests ]
if: "!failure() && !cancelled()"
uses: kestra-io/actions/.github/workflows/kestra-oss-publish-maven.yml@main
secrets:
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_GPG_KEYID: ${{ secrets.SONATYPE_GPG_KEYID }}
SONATYPE_GPG_PASSWORD: ${{ secrets.SONATYPE_GPG_PASSWORD }}
SONATYPE_GPG_FILE: ${{ secrets.SONATYPE_GPG_FILE }}
publish-github:
name: Github Release
needs: [build-artifacts, backend-tests, frontend-tests]
if: "!failure() && !cancelled()"
uses: kestra-io/actions/.github/workflows/kestra-oss-publish-github.yml@main
secrets:
GH_PERSONAL_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}
SLACK_RELEASES_WEBHOOK_URL: ${{ secrets.SLACK_RELEASES_WEBHOOK_URL }}

View File

@@ -0,0 +1,16 @@
name: Pull Request - Delete Docker
on:
pull_request:
types: [closed]
# TODO import a reusable one
jobs:
publish:
name: Pull Request - Delete Docker
if: github.repository == 'kestra-io/kestra' # prevent running on forks
runs-on: ubuntu-latest
steps:
- uses: dataaxiom/ghcr-cleanup-action@v1
with:
package: kestra-pr
delete-tags: ${{ github.event.pull_request.number }}

57
.github/workflows/pull-request.yml vendored Normal file
View File

@@ -0,0 +1,57 @@
name: Pull Request Workflow
on:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-pr
cancel-in-progress: true
jobs:
file-changes:
if: ${{ github.event.pull_request.draft == false }}
name: File changes detection
runs-on: ubuntu-latest
timeout-minutes: 60
outputs:
ui: ${{ steps.changes.outputs.ui }}
translations: ${{ steps.changes.outputs.translations }}
backend: ${{ steps.changes.outputs.backend }}
steps:
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
ui:
- 'ui/**'
backend:
- '!{ui,.github}/**'
token: ${{ secrets.GITHUB_TOKEN }}
frontend:
name: Frontend - Tests
needs: [file-changes]
if: "needs.file-changes.outputs.ui == 'true'"
uses: kestra-io/actions/.github/workflows/kestra-oss-frontend-tests.yml@main
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
backend:
name: Backend - Tests
needs: file-changes
if: "needs.file-changes.outputs.backend == 'true'"
uses: kestra-io/actions/.github/workflows/kestra-oss-backend-tests.yml@main
secrets:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
e2e-tests:
name: E2E - Tests
uses: kestra-io/actions/.github/workflows/kestra-oss-e2e-tests.yml@main
generate-pull-request-docker-image:
name: Generate PR docker image
uses: kestra-io/actions/.github/workflows/kestra-oss-pullrequest-publish-docker.yml@main

41
.github/workflows/release-docker.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Publish docker
on:
workflow_dispatch:
inputs:
retag-latest:
description: 'Retag latest Docker images'
required: true
type: boolean
default: false
retag-lts:
description: 'Retag LTS Docker images'
required: true
type: boolean
default: false
plugin-version:
description: '(deprecated) Plugin version window for old Kestra releases using .plugins file (0.22 to 0.24). If omitted, then plugin list will be fetched from the API compatible versions endpoint'
required: false
type: string
default: "[0.22,0.23)"
dry-run:
description: 'Dry run mode that will not write or release anything'
required: true
type: boolean
default: false
jobs:
publish-docker:
name: Publish Docker
if: startsWith(github.ref, 'refs/tags/v')
uses: kestra-io/actions/.github/workflows/kestra-oss-publish-docker.yml@main
with:
plugin-version: ${{ inputs.plugin-version }}
retag-latest: ${{ inputs.retag-latest }}
retag-lts: ${{ inputs.retag-lts }}
dry-run: ${{ inputs.dry-run }}
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
GH_PERSONAL_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}

View File

@@ -8,30 +8,31 @@ on:
env:
JAVA_VERSION: '21'
permissions:
contents: read
jobs:
dependency-check:
name: Dependency Check
runs-on: ubuntu-latest
steps:
# Checkout
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
- uses: kestra-io/actions/composite/setup-build@main
id: build
with:
java-enabled: true
node-enabled: true
caches-enabled: true
# Npm
- name: Npm - Install
shell: bash
working-directory: ui
run: npm ci
# Run OWASP dependency check plugin
- name: Gradle Dependency Check
@@ -47,69 +48,3 @@ jobs:
with:
name: dependency-check-report
path: build/reports/dependency-check-report.html
develop-image-check:
name: Image Check (develop)
runs-on: ubuntu-latest
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: false
node-enabled: false
caches-enabled: true
# Run Trivy image scan for Docker vulnerabilities, see https://github.com/aquasecurity/trivy-action
- name: Docker Vulnerabilities Check
uses: aquasecurity/trivy-action@0.28.0
with:
image-ref: kestra/kestra:develop
format: table
skip-dirs: /app/plugins
scanners: vuln
latest-image-check:
name: Image Check (latest)
runs-on: ubuntu-latest
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: false
node-enabled: false
caches-enabled: true
# Run Trivy image scan for Docker vulnerabilities, see https://github.com/aquasecurity/trivy-action
- name: Docker Vulnerabilities Check
uses: aquasecurity/trivy-action@0.28.0
with:
image-ref: kestra/kestra:latest
format: table
skip-dirs: /app/plugins
scanners: vuln

5
.gitignore vendored
View File

@@ -36,6 +36,8 @@ yarn.lock
ui/coverage
ui/stats.html
ui/.frontend-gradle-plugin
ui/utils/CHANGELOG.md
ui/test-report.junit.xml
### Docker
/.env
@@ -54,3 +56,6 @@ core/src/main/resources/gradle.properties
# Allure Reports
**/allure-results/*
*storybook.log
storybook-static

203
.plugins
View File

@@ -1,103 +1,108 @@
#
# List of plugins to install locally with: $ make install-plugins
# Format: <RepositoryName>:<GroupId>:<ArtifactId>:<Version>
#
# Uncomment the lines corresponding to the plugins to be installed:
#
#io.kestra.plugin:plugin-airbyte:LATEST
#io.kestra.plugin:plugin-airflow:LATEST
#io.kestra.plugin:plugin-amqp:LATEST
#io.kestra.plugin:plugin-ansible:LATEST
#io.kestra.plugin:plugin-aws:LATEST
#io.kestra.plugin:plugin-azure:LATEST
#io.kestra.plugin:plugin-cassandra:LATEST
#io.kestra.plugin:plugin-cloudquery:LATEST
#io.kestra.plugin:plugin-compress:LATEST
#io.kestra.plugin:plugin-couchbase:LATEST
#io.kestra.plugin:plugin-crypto:LATEST
#io.kestra.plugin:plugin-databricks:LATEST
#io.kestra.plugin:plugin-datahub:LATEST
#io.kestra.plugin:plugin-dataform:LATEST
#io.kestra.plugin:plugin-dbt:LATEST
#io.kestra.plugin:plugin-debezium-db2:LATEST
#io.kestra.plugin:plugin-debezium-mongodb:LATEST
#io.kestra.plugin:plugin-debezium-mysql:LATEST
#io.kestra.plugin:plugin-debezium-oracle:LATEST
#io.kestra.plugin:plugin-debezium-postgres:LATEST
#io.kestra.plugin:plugin-debezium-sqlserver:LATEST
#io.kestra.plugin:plugin-docker:LATEST
#io.kestra.plugin:plugin-elasticsearch:LATEST
#io.kestra.plugin:plugin-fivetran:LATEST
#io.kestra.plugin:plugin-fs:LATEST
#io.kestra.plugin:plugin-gcp:LATEST
#io.kestra.plugin:plugin-git:LATEST
#io.kestra.plugin:plugin-github:LATEST
#io.kestra.plugin:plugin-googleworkspace:LATEST
#io.kestra.plugin:plugin-hightouch:LATEST
#io.kestra.plugin:plugin-hubspot:LATEST
#io.kestra.plugin:plugin-jdbc-as400:LATEST
#io.kestra.plugin:plugin-jdbc-clickhouse:LATEST
#io.kestra.plugin:plugin-jdbc-db2:LATEST
#io.kestra.plugin:plugin-jdbc-duckdb:LATEST
#io.kestra.plugin:plugin-jdbc-druid:LATEST
#io.kestra.plugin:plugin-jdbc-mysql:LATEST
#io.kestra.plugin:plugin-jdbc-oracle:LATEST
#io.kestra.plugin:plugin-jdbc-pinot:LATEST
#io.kestra.plugin:plugin-jdbc-postgres:LATEST
#io.kestra.plugin:plugin-jdbc-redshift:LATEST
#io.kestra.plugin:plugin-jdbc-snowflake:LATEST
#io.kestra.plugin:plugin-jdbc-sqlserver:LATEST
#io.kestra.plugin:plugin-jdbc-trino:LATEST
#io.kestra.plugin:plugin-jdbc-vectorwise:LATEST
#io.kestra.plugin:plugin-jdbc-vertica:LATEST
#io.kestra.plugin:plugin-jdbc-dremio:LATEST
#io.kestra.plugin:plugin-jdbc-arrow-flight:LATEST
#io.kestra.plugin:plugin-jdbc-sqlite:LATEST
#io.kestra.plugin:plugin-jdbc-sybase:LATEST
#io.kestra.plugin:plugin-jira:LATEST
#io.kestra.plugin:plugin-kafka:LATEST
#io.kestra.plugin:plugin-kubernetes:LATEST
#io.kestra.plugin:plugin-ldap:LATEST
#io.kestra.plugin:plugin-linear:LATEST
#io.kestra.plugin:plugin-malloy:LATEST
#io.kestra.plugin:plugin-meilisearch:LATEST
#io.kestra.plugin:plugin-minio:LATEST
#io.kestra.plugin:plugin-modal:LATEST
#io.kestra.plugin:plugin-mongodb:LATEST
#io.kestra.plugin:plugin-mqtt:LATEST
#io.kestra.plugin:plugin-nats:LATEST
#io.kestra.plugin:plugin-neo4j:LATEST
#io.kestra.plugin:plugin-notifications:LATEST
#io.kestra.plugin:plugin-openai:LATEST
#io.kestra.plugin:plugin-opensearch:LATEST
#io.kestra.plugin:plugin-powerbi:LATEST
#io.kestra.plugin:plugin-pulsar:LATEST
#io.kestra.plugin:plugin-redis:LATEST
#io.kestra.plugin:plugin-script-groovy:LATEST
#io.kestra.plugin:plugin-script-jbang:LATEST
#io.kestra.plugin:plugin-script-julia:LATEST
#io.kestra.plugin:plugin-script-jython:LATEST
#io.kestra.plugin:plugin-script-nashorn:LATEST
#io.kestra.plugin:plugin-script-node:LATEST
#io.kestra.plugin:plugin-script-powershell:LATEST
#io.kestra.plugin:plugin-script-python:LATEST
#io.kestra.plugin:plugin-script-r:LATEST
#io.kestra.plugin:plugin-script-ruby:LATEST
#io.kestra.plugin:plugin-script-shell:LATEST
#io.kestra.plugin:plugin-serdes:LATEST
#io.kestra.plugin:plugin-servicenow:LATEST
#io.kestra.plugin:plugin-singer:LATEST
#io.kestra.plugin:plugin-soda:LATEST
#io.kestra.plugin:plugin-solace:LATEST
#io.kestra.plugin:plugin-spark:LATEST
#io.kestra.plugin:plugin-sqlmesh:LATEST
#io.kestra.plugin:plugin-surrealdb:LATEST
#io.kestra.plugin:plugin-terraform:LATEST
#io.kestra.plugin:plugin-transform-grok:LATEST
#io.kestra.plugin:plugin-transform-json:LATEST
#io.kestra.plugin:plugin-tika:LATEST
#io.kestra.plugin:plugin-weaviate:LATEST
#io.kestra.plugin:plugin-zendesk:LATEST
#io.kestra.storage:storage-azure:LATEST
#io.kestra.storage:storage-gcs:LATEST
#io.kestra.storage:storage-minio:LATEST
#io.kestra.storage:storage-s3:LATEST
#plugin-airbyte:io.kestra.plugin:plugin-airbyte:LATEST
#plugin-airflow:io.kestra.plugin:plugin-airflow:LATEST
#plugin-amqp:io.kestra.plugin:plugin-amqp:LATEST
#plugin-ansible:io.kestra.plugin:plugin-ansible:LATEST
#plugin-aws:io.kestra.plugin:plugin-aws:LATEST
#plugin-azure:io.kestra.plugin:plugin-azure:LATEST
#plugin-cassandra:io.kestra.plugin:plugin-cassandra:LATEST
#plugin-cloudquery:io.kestra.plugin:plugin-cloudquery:LATEST
#plugin-compress:io.kestra.plugin:plugin-compress:LATEST
#plugin-couchbase:io.kestra.plugin:plugin-couchbase:LATEST
#plugin-crypto:io.kestra.plugin:plugin-crypto:LATEST
#plugin-databricks:io.kestra.plugin:plugin-databricks:LATEST
#plugin-datahub:io.kestra.plugin:plugin-datahub:LATEST
#plugin-dataform:io.kestra.plugin:plugin-dataform:LATEST
#plugin-dbt:io.kestra.plugin:plugin-dbt:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-db2:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-mongodb:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-mysql:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-oracle:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-postgres:LATEST
#plugin-debezium:io.kestra.plugin:plugin-debezium-sqlserver:LATEST
#plugin-docker:io.kestra.plugin:plugin-docker:LATEST
#plugin-elasticsearch:io.kestra.plugin:plugin-elasticsearch:LATEST
#plugin-fivetran:io.kestra.plugin:plugin-fivetran:LATEST
#plugin-fs:io.kestra.plugin:plugin-fs:LATEST
#plugin-gcp:io.kestra.plugin:plugin-gcp:LATEST
#plugin-git:io.kestra.plugin:plugin-git:LATEST
#plugin-github:io.kestra.plugin:plugin-github:LATEST
#plugin-googleworkspace:io.kestra.plugin:plugin-googleworkspace:LATEST
#plugin-graalvm:io.kestra.plugin:plugin-graalvm:LATEST
#plugin-hightouch:io.kestra.plugin:plugin-hightouch:LATEST
#plugin-hubspot:io.kestra.plugin:plugin-hubspot:LATEST
#plugin-huggingface:io.kestra.plugin:plugin-huggingface:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-as400:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-clickhouse:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-db2:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-duckdb:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-druid:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-mariadb:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-mysql:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-oracle:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-pinot:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-postgres:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-redshift:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-snowflake:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-sqlserver:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-trino:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-vectorwise:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-vertica:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-dremio:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-arrow-flight:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-sqlite:LATEST
#plugin-jdbc:io.kestra.plugin:plugin-jdbc-sybase:LATEST
#plugin-jira:io.kestra.plugin:plugin-jira:LATEST
#plugin-kafka:io.kestra.plugin:plugin-kafka:LATEST
#plugin-kubernetes:io.kestra.plugin:plugin-kubernetes:LATEST
#plugin-ldap:io.kestra.plugin:plugin-langchain4j:LATEST
#plugin-ldap:io.kestra.plugin:plugin-ldap:LATEST
#plugin-linear:io.kestra.plugin:plugin-linear:LATEST
#plugin-malloy:io.kestra.plugin:plugin-malloy:LATEST
#plugin-meilisearch:io.kestra.plugin:plugin-meilisearch:LATEST
#plugin-minio:io.kestra.plugin:plugin-minio:LATEST
#plugin-modal:io.kestra.plugin:plugin-modal:LATEST
#plugin-mongodb:io.kestra.plugin:plugin-mongodb:LATEST
#plugin-mqtt:io.kestra.plugin:plugin-mqtt:LATEST
#plugin-nats:io.kestra.plugin:plugin-nats:LATEST
#plugin-neo4j:io.kestra.plugin:plugin-neo4j:LATEST
#plugin-notifications:io.kestra.plugin:plugin-notifications:LATEST
#plugin-openai:io.kestra.plugin:plugin-openai:LATEST
#plugin-opensearch:io.kestra.plugin:plugin-opensearch:LATEST
#plugin-powerbi:io.kestra.plugin:plugin-powerbi:LATEST
#plugin-pulsar:io.kestra.plugin:plugin-pulsar:LATEST
#plugin-redis:io.kestra.plugin:plugin-redis:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-groovy:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-jbang:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-julia:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-jython:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-nashorn:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-node:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-powershell:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-python:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-r:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-ruby:LATEST
#plugin-scripts:io.kestra.plugin:plugin-script-shell:LATEST
#plugin-serdes:io.kestra.plugin:plugin-serdes:LATEST
#plugin-servicenow:io.kestra.plugin:plugin-servicenow:LATEST
#plugin-singer:io.kestra.plugin:plugin-singer:LATEST
#plugin-soda:io.kestra.plugin:plugin-soda:LATEST
#plugin-solace:io.kestra.plugin:plugin-solace:LATEST
#plugin-spark:io.kestra.plugin:plugin-spark:LATEST
#plugin-sqlmesh:io.kestra.plugin:plugin-sqlmesh:LATEST
#plugin-surrealdb:io.kestra.plugin:plugin-surrealdb:LATEST
#plugin-terraform:io.kestra.plugin:plugin-terraform:LATEST
#plugin-transform:io.kestra.plugin:plugin-transform-grok:LATEST
#plugin-transform:io.kestra.plugin:plugin-transform-json:LATEST
#plugin-tika:io.kestra.plugin:plugin-tika:LATEST
#plugin-weaviate:io.kestra.plugin:plugin-weaviate:LATEST
#plugin-zendesk:io.kestra.plugin:plugin-zendesk:LATEST
#plugin-typesense:io.kestra.plugin:plugin-typesense:LATEST
#storage-azure:io.kestra.storage:storage-azure:LATEST
#storage-gcs:io.kestra.storage:storage-gcs:LATEST
#storage-minio:io.kestra.storage:storage-minio:LATEST
#storage-s3:io.kestra.storage:storage-s3:LATEST

849
CHANGELOG.md Normal file
View File

@@ -0,0 +1,849 @@
# 0.22.2
**Full Changelog**: [v0.22.1....v0.22.2](https://github.com/kestra-io/kestra/compare/v0.22.1...v0.22.2)
### 🚀 Enhancements
- **jdbc:** Allow disabling queue cleaning. ([a63dbe8e8](https://github.com/kestra-io/kestra/commit/a63dbe8e8))
- **jdbc-h2,jdbc-mysql,jdbc-postgres:** Add an index on queues.key ([412837952](https://github.com/kestra-io/kestra/commit/412837952))
- **ui:** Ability to hide secret value when typing in secrets ([59cc56186](https://github.com/kestra-io/kestra/commit/59cc56186))
### 🩹 Fixes
- **core:** Default namespace in namespace file ([ffd06a57e](https://github.com/kestra-io/kestra/commit/ffd06a57e))
- **ui:** Prevent infinite loading loop in Namespace KV Store & Secrets pages if there is none ([8fb6e6af2](https://github.com/kestra-io/kestra/commit/8fb6e6af2))
- **ui:** Amend namespace files creation & editing problems ([#8279](https://github.com/kestra-io/kestra/pull/8279))
- **core:** Fix NPE when generating flow graph ([37ef0a8b3](https://github.com/kestra-io/kestra/commit/37ef0a8b3))
### 🏡 Chore
- **version:** Update the CHANGELOG.MD with details for 0.22.1 ([120d06454](https://github.com/kestra-io/kestra/commit/120d06454))
- **ui:** Amend the sizing of editor panels ([#8277](https://github.com/kestra-io/kestra/pull/8277))
- **ui:** Pass prop to maximize the height of namespace file editor ([#8278](https://github.com/kestra-io/kestra/pull/8278))
- Upgrade to 0.22.2 ([546d5478d](https://github.com/kestra-io/kestra/commit/546d5478d))
### ❤️ Contributors
- Brian.mulier ([@brian-mulier-p](https://github.com/brian-mulier-p))
- Florian Hussonnois ([@fhussonnois](https://github.com/fhussonnois))
- Miloš Paunović ([@MilosPaunovic](https://github.com/MilosPaunovic))
- Loïc Mathieu ([@loicmathieu](https://github.com/loicmathieu))
# 0.22.1
**Full Changelog**: [v0.22.0....v0.22.1](https://github.com/kestra-io/kestra/compare/v0.22.0...v0.22.1)
### 🚀 Enhancements
- Add afterExecution to basic.md ([#8126](https://github.com/kestra-io/kestra/pull/8126))
### 🩹 Fixes
- **cli**: prevent FlowUpdatesCommand to crash due to plugin loader ([YannC](https://github.com/kestra-io/kestra/commit/3ce2cdaeb915d98debfb635215d8604abbc869c2))
- **core:** Use a stable flow logger name ([7cfbb91e7](https://github.com/kestra-io/kestra/commit/7cfbb91e7))
- **core:** HttpClient log the URL even if it's a secret" ([ae223c8d7](https://github.com/kestra-io/kestra/commit/ae223c8d7))
- **core:** Mask secrets on log attributes ([94dcba126](https://github.com/kestra-io/kestra/commit/94dcba126))
- **ui:** Keep fetching if filtered kvs & secrets have no elements after fetch ([5757b576e](https://github.com/kestra-io/kestra/commit/5757b576e))
- **gradle:** Windows selfrun.bat ([9cb51ba0e](https://github.com/kestra-io/kestra/commit/9cb51ba0e))
- **jdbc:** Possible deadlock on service instance ([6ead4e63c](https://github.com/kestra-io/kestra/commit/6ead4e63c))
- **cli:** Fix NPE for commands not requiring plugins ([#8212](https://github.com/kestra-io/kestra/pull/8212))
- **core:** Be tolerant of decryption issue ([38f68dae5](https://github.com/kestra-io/kestra/commit/38f68dae5))
- **jdbc:** #8219 unquoted timestamp field breaking query ([#8222](https://github.com/kestra-io/kestra/pull/8222), [#8219](https://github.com/kestra-io/kestra/issues/8219))
### 🏡 Chore
- **version:** Update the CHANGELOG.MD with details for 0.22.0 ([b78748ebf](https://github.com/kestra-io/kestra/commit/b78748ebf))
- **ci:** Modify publish docker to align on EE ([fedbffbdf](https://github.com/kestra-io/kestra/commit/fedbffbdf))
- **ci:** Align plugins handle for docker publish on EE CI ([632c5836d](https://github.com/kestra-io/kestra/commit/632c5836d))
- ae223c8: Revert "fix(core): HttpClient log the URL even if it's a secret" (Loïc Mathieu)
- Upgrade to 0.22.1 ([9857930da](https://github.com/kestra-io/kestra/commit/9857930da))
### ❤️ Contributors
- Loïc Mathieu ([@loicmathieu](https://github.com/loicmathieu))
- Nicolas K. <nk_mikmak@hotmail.com>
- YannC <ycoornaert@kestra.io>
- Florian Hussonnois ([@fhussonnois](https://github.com/fhussonnois))
- Shruti Mantri <shruti1810@gmail.com>
- MilosPaunovic ([@MilosPaunovic](https://github.com/MilosPaunovic))
- Brian.mulier ([@brian-mulier-p](https://github.com/brian-mulier-p))
# 0.22.0
**Full Changelog**: [v0.21.0...v0.22.0](https://github.com/kestra-io/kestra/compare/v0.21.0...v0.22.0)
### 🚀 Enhancements
- **ui:** Don't show deprecated tasks in the plugins list ([8d00c8a55](https://github.com/kestra-io/kestra/commit/8d00c8a55))
- **webserver:** If no date provided for dashboard, then use default timewindow ([b86b4bb16](https://github.com/kestra-io/kestra/commit/b86b4bb16))
- Add a shadow to cards ([#7038](https://github.com/kestra-io/kestra/pull/7038))
- **ui:** Multiple improvements of no code editor ([#7076](https://github.com/kestra-io/kestra/pull/7076))
- **ui:** Display attempts status on taskrun on left ([84447fd42](https://github.com/kestra-io/kestra/commit/84447fd42))
- **ui:** Improve the task array component ([#7095](https://github.com/kestra-io/kestra/pull/7095))
- Show a lock on EE only pages ([#7093](https://github.com/kestra-io/kestra/pull/7093))
- **ui:** Allow task re-ordering from no code editor ([#7120](https://github.com/kestra-io/kestra/pull/7120))
- **ui:** Add finally block to no code editor ([#7123](https://github.com/kestra-io/kestra/pull/7123))
- **build:** Add script to makefile ([#7125](https://github.com/kestra-io/kestra/pull/7125))
- **ui:** Add a link to the filtered Executions table. ([#7129](https://github.com/kestra-io/kestra/pull/7129))
- **ui:** Multiple improvements of no code editor ([#7146](https://github.com/kestra-io/kestra/pull/7146))
- **core:** New Publish task for metrics ([#7122](https://github.com/kestra-io/kestra/pull/7122))
- **jdbc-*:** Delete subflow_executions table ([671eb2b57](https://github.com/kestra-io/kestra/commit/671eb2b57))
- **ui:** Add keyboard shortcuts dialog to editor ([#6628](https://github.com/kestra-io/kestra/pull/6628))
- **ui:** Now display an error when SSE failed ([#7177](https://github.com/kestra-io/kestra/pull/7177))
- **ui:** Docs markdown alert styled based on alert level in product. ([#6818](https://github.com/kestra-io/kestra/pull/6818))
- **ui:** Add option to choose visible columns in flow and execution listings ([#6932](https://github.com/kestra-io/kestra/pull/6932))
- Theme switch to "theme switch" the charts ([#7151](https://github.com/kestra-io/kestra/pull/7151))
- **ui:** Add script to help with creation of release notes ([#7212](https://github.com/kestra-io/kestra/pull/7212))
- **core:** Allow loading secrets from a different namspace ([21aebe4e7](https://github.com/kestra-io/kestra/commit/21aebe4e7))
- **webserver:** Optimize queue usage for follow endpoints ([13be8b812](https://github.com/kestra-io/kestra/commit/13be8b812))
- **webserver:** Improvement to ExecutionStreaminService ([4c401ce0c](https://github.com/kestra-io/kestra/commit/4c401ce0c))
- **cicd:** Codecov + tests report ([03dccd144](https://github.com/kestra-io/kestra/commit/03dccd144))
- **cicd:** Add codecov bundle analysis ([ab2a0108a](https://github.com/kestra-io/kestra/commit/ab2a0108a))
- **webserver:** Use a shared queue consumer from the log follow endpoint ([2a95aee96](https://github.com/kestra-io/kestra/commit/2a95aee96))
- **core:** Add sanity check to request task ([#7230](https://github.com/kestra-io/kestra/pull/7230))
- **ci:** Add workflows for release process ([480fc7589](https://github.com/kestra-io/kestra/commit/480fc7589))
- **cicd:** Add codecov flags ([3f429ef0a](https://github.com/kestra-io/kestra/commit/3f429ef0a))
- **core:** Simplify Pebble error messages ([1eacb447d](https://github.com/kestra-io/kestra/commit/1eacb447d))
- **cicd:** Add unit test for js ([#7246](https://github.com/kestra-io/kestra/pull/7246))
- **cicd:** Add test analysis on frontend ([123f74803](https://github.com/kestra-io/kestra/commit/123f74803))
- **cicd:** Don't mark failed for front end test ([1bbe0e659](https://github.com/kestra-io/kestra/commit/1bbe0e659))
- **cicd:** Restore codeql weekly ([0c3ed3b75](https://github.com/kestra-io/kestra/commit/0c3ed3b75))
- **core, jdbc:** Directly process WorkerTaskResult from flowable tasks ([be1871430](https://github.com/kestra-io/kestra/commit/be1871430))
- **ui:** Center view when switching between topology modes ([#7257](https://github.com/kestra-io/kestra/pull/7257))
- Give blueprint pages a distinct name ([#7254](https://github.com/kestra-io/kestra/pull/7254))
- **core:** Added FileEmpty & FileExists Pebble Functions ([88a5cd69e](https://github.com/kestra-io/kestra/commit/88a5cd69e))
- **jdbc:** Purge execution queue early ([dd8ae5e64](https://github.com/kestra-io/kestra/commit/dd8ae5e64))
- **jdbc:** Puerge worker task result queue early ([31d221241](https://github.com/kestra-io/kestra/commit/31d221241))
- **jdbc:** Purge worker job queue early ([e7f551edc](https://github.com/kestra-io/kestra/commit/e7f551edc))
- **core:** Add system.correlationId label to triggered executions ([ed1449363](https://github.com/kestra-io/kestra/commit/ed1449363))
- **jdbc:** Queues.updated should be set when the record is updated ([9d717caf9](https://github.com/kestra-io/kestra/commit/9d717caf9))
- **jdbc:** Clean more eagerly some queues based on configuration ([13ac335c9](https://github.com/kestra-io/kestra/commit/13ac335c9))
- **core, jdbc:** Use an elastic thread pool ([f8a6e3fb0](https://github.com/kestra-io/kestra/commit/f8a6e3fb0))
- **jdbc:** Consume multiple times the execution and worker task result queues ([41712b8d8](https://github.com/kestra-io/kestra/commit/41712b8d8))
- ([#7389](https://github.com/kestra-io/kestra/pull/7389))
- ([#7432](https://github.com/kestra-io/kestra/pull/7432))
- **ui:** Add keyboard shortcuts for changing editor font size ([#7450](https://github.com/kestra-io/kestra/pull/7450))
- **ui:** Introduce topology export to image files ([#7541](https://github.com/kestra-io/kestra/pull/7541))
- Add plugin search command ([e7950279b](https://github.com/kestra-io/kestra/commit/e7950279b))
- **ui:** Improve inspecting details of multiple executions ([#7516](https://github.com/kestra-io/kestra/pull/7516))
- **ui:** Add ability to have persistent filter options ([#7276](https://github.com/kestra-io/kestra/pull/7276))
- Add full examples for datetimebetween condition ([#7598](https://github.com/kestra-io/kestra/pull/7598))
- **ui:** Introduce the execution timeline section on overview tab ([#7498](https://github.com/kestra-io/kestra/pull/7498))
- **ui:** Make filter dropdown be positioned below the input caret ([#7614](https://github.com/kestra-io/kestra/pull/7614))
- **core:** Enhance plugin management ([a098847c6](https://github.com/kestra-io/kestra/commit/a098847c6))
- **ui:** Allow reordering tabs in the editor ([#7531](https://github.com/kestra-io/kestra/pull/7531))
- **core:** Improve performance of ExecutorService.handleChildWorkerTaskResult ([fa07cbd3b](https://github.com/kestra-io/kestra/commit/fa07cbd3b))
- **#7636:** Add default options for HttpClient ([5b42d0adb](https://github.com/kestra-io/kestra/commit/5b42d0adb))
- **#7636:** Add default options for HttpClient" ([7ccb97a96](https://github.com/kestra-io/kestra/commit/7ccb97a96))
- **core:** Replace new ArrayList by Collections.emptyList() ([ff3f90465](https://github.com/kestra-io/kestra/commit/ff3f90465))
- **core:** Use HashMap.newHashMap(int) ([677585213](https://github.com/kestra-io/kestra/commit/677585213))
- **core:** Improve merging outputs by merging them at the task level ([8c708e2d5](https://github.com/kestra-io/kestra/commit/8c708e2d5))
- Add examples for conditions - 3 ([#7657](https://github.com/kestra-io/kestra/pull/7657))
- Add examples for flow conditions ([#7659](https://github.com/kestra-io/kestra/pull/7659))
- Add example for expression condition ([#7660](https://github.com/kestra-io/kestra/pull/7660))
- **#7636:** Add default options for HttpClient ([#7650](https://github.com/kestra-io/kestra/pull/7650))
- **core, jdbc:** DashboardRepository.findAll() ([cd97705d8](https://github.com/kestra-io/kestra/commit/cd97705d8))
- **ui:** Add markdown formatting to flow run dialog ([#7663](https://github.com/kestra-io/kestra/pull/7663))
- **core, jdbc:** Dynamic worker group key ([2c63112a5](https://github.com/kestra-io/kestra/commit/2c63112a5))
- **core-ee:** #2838 add audit log shipper ([#7701](https://github.com/kestra-io/kestra/pull/7701), [#2838](https://github.com/kestra-io/kestra/issues/2838))
- **core:** Allow reading file from any namespaces ([dfe5552a1](https://github.com/kestra-io/kestra/commit/dfe5552a1))
- **core:** Add new crudEventType value ([f7e61a46d](https://github.com/kestra-io/kestra/commit/f7e61a46d))
- **core:** #7721 add namespace to pebble file functions ([#7729](https://github.com/kestra-io/kestra/pull/7729), [#7721](https://github.com/kestra-io/kestra/issues/7721))
- **webserver:** Mask the secret() function result from eval outputs ([88341bb5c](https://github.com/kestra-io/kestra/commit/88341bb5c))
- **core:** Handle worker group fallback inside the scheduler ([e9f2711cd](https://github.com/kestra-io/kestra/commit/e9f2711cd))
- **core:** #5467 add namespaces in the namespaceFiles parameter ([#7749](https://github.com/kestra-io/kestra/pull/7749), [#5467](https://github.com/kestra-io/kestra/issues/5467))
- **core:** Add outputs to the Flow trigger ([1692cab53](https://github.com/kestra-io/kestra/commit/1692cab53))
- **core:** Custom log filter ([3ef11044a](https://github.com/kestra-io/kestra/commit/3ef11044a))
- **core-ee:** Add json format to file log exporter ([#7789](https://github.com/kestra-io/kestra/pull/7789))
- **ui:** Introduce kv() and secret() pebble autocompletions ([a064c7a95](https://github.com/kestra-io/kestra/commit/a064c7a95))
- **core:** Add execution state in Pebbe context ([d0af5767d](https://github.com/kestra-io/kestra/commit/d0af5767d))
- **core:** AfterExecution tasks ([39b8fc103](https://github.com/kestra-io/kestra/commit/39b8fc103))
- **core,jdbc:** Switch back to a cached thread pool for async JDBC queue ([c2e62d653](https://github.com/kestra-io/kestra/commit/c2e62d653))
- **build:** Configure heap size to max 50% of available memory ([#7800](https://github.com/kestra-io/kestra/pull/7800))
- **core:** Redact KESTRA_JAVA_OPTS from the env available to executions ([ecfe925ec](https://github.com/kestra-io/kestra/commit/ecfe925ec))
- Add finally to the flow assets in basic.md ([#7857](https://github.com/kestra-io/kestra/pull/7857))
- **core:** Add afterExecution to the topology ([f7019af9d](https://github.com/kestra-io/kestra/commit/f7019af9d))
- **ui:** Add `afterExecution` block to no code editor ([#7848](https://github.com/kestra-io/kestra/pull/7848))
- **cli:** Add new --all option to plugin install cmd ([#7375](https://github.com/kestra-io/kestra/pull/7375))
- **core:** Add Kestra env name and URL to the expression context ([1ba54cd08](https://github.com/kestra-io/kestra/commit/1ba54cd08))
- **webserver:** Add Kestra URL to the config endpoint ([70e6d47c1](https://github.com/kestra-io/kestra/commit/70e6d47c1))
- **ui:** Add copy button to kv store listing rows ([#7907](https://github.com/kestra-io/kestra/pull/7907))
- **ui:** Implement a default tab setting for flows ([#7917](https://github.com/kestra-io/kestra/pull/7917))
- ⚠️ Make kv pebble function raise error by default ([#7855](https://github.com/kestra-io/kestra/pull/7855))
- **ui:** Add the option to copy single/all logs to clipboard ([#7755](https://github.com/kestra-io/kestra/pull/7755))
- **ui:** Add beta badge global component ([#7934](https://github.com/kestra-io/kestra/pull/7934))
- **model, core:** Document tasks props that are internal storage URI ([745c64c4b](https://github.com/kestra-io/kestra/commit/745c64c4b))
- **core:** Add correlationId to the Flow trigger ([a7433c6f6](https://github.com/kestra-io/kestra/commit/a7433c6f6))
- ***:** Allow disabling flow logs and use a specific logger for executions, tasks and triggers ([11a166486](https://github.com/kestra-io/kestra/commit/11a166486))
- **core:** Require existing namespace ([6194f244c](https://github.com/kestra-io/kestra/commit/6194f244c))
- **ui:** Introduce global KV Store view ([ab7788aea](https://github.com/kestra-io/kestra/commit/ab7788aea))
- **core:** Allow null or empty proxy address to bypass proxy conf ([73c7a2d3d](https://github.com/kestra-io/kestra/commit/73c7a2d3d))
- **core:** Speed up namespace file download and add a log & metrics ([f29aab071](https://github.com/kestra-io/kestra/commit/f29aab071))
- **core:** #7932 add file exist comportment to NamespaceFiles ([#7979](https://github.com/kestra-io/kestra/pull/7979), [#7932](https://github.com/kestra-io/kestra/issues/7932))
- **core:** Add new subkey arg to secret pebble function ([0987d0b34](https://github.com/kestra-io/kestra/commit/0987d0b34))
- Multi panel editor without the refactor ([#7971](https://github.com/kestra-io/kestra/pull/7971))
- Parse docs is 2 steps to avoid user waiting with nothing ([#7149](https://github.com/kestra-io/kestra/pull/7149))
- **core,jdbc:** Reset the trigger inside the JdbcExecutor ([4a3d6b30d](https://github.com/kestra-io/kestra/commit/4a3d6b30d))
- **ui:** Introduce global Secrets page ([d9ac26716](https://github.com/kestra-io/kestra/commit/d9ac26716))
- **docs:** Add example for best practice with multiline json http post request ([#8023](https://github.com/kestra-io/kestra/pull/8023))
- **core:** #5467 add inheritance for KV in pebble and Get task ([#8031](https://github.com/kestra-io/kestra/pull/8031), [#5467](https://github.com/kestra-io/kestra/issues/5467))
- Cleaner multipanel tab move ([#8029](https://github.com/kestra-io/kestra/pull/8029))
- **ui:** Improve styling of saved filter searches ([#8040](https://github.com/kestra-io/kestra/pull/8040))
- ***:** Add new methods findAllAsync for the backup ([c965f2f64](https://github.com/kestra-io/kestra/commit/c965f2f64))
- **core-ee:** #7501 split file log exporter to multiple files ([#8138](https://github.com/kestra-io/kestra/pull/8138), [#7501](https://github.com/kestra-io/kestra/issues/7501))
### 🩹 Fixes
- **cli:** Flow watcher should compute plugin defaults ([07dfaada9](https://github.com/kestra-io/kestra/commit/07dfaada9))
- **ui:** Dynamic format date ([d17fe2548](https://github.com/kestra-io/kestra/commit/d17fe2548))
- Namespaces should have the card background ([b8fac95e1](https://github.com/kestra-io/kestra/commit/b8fac95e1))
- **styles:** Remove background color from edit buttons ([#7037](https://github.com/kestra-io/kestra/pull/7037))
- Use proper css variables for table colors ([#7049](https://github.com/kestra-io/kestra/pull/7049))
- Remove default variables for box-shadow ([f1b294065](https://github.com/kestra-io/kestra/commit/f1b294065))
- Color of tags in executions list ([#7035](https://github.com/kestra-io/kestra/pull/7035))
- **core:** RestartForEachItem() is flaky ([6afdbb01f](https://github.com/kestra-io/kestra/commit/6afdbb01f))
- **script:** AbstractExecScript.injectDefaults should throw IllegalVariableEvaluationException ([2777b3438](https://github.com/kestra-io/kestra/commit/2777b3438))
- **cli:** Repeate flaky tests FileChangedEventListenerTest ([03caf3825](https://github.com/kestra-io/kestra/commit/03caf3825))
- **demo:** Make button clickable with utm link ([491546557](https://github.com/kestra-io/kestra/commit/491546557))
- Remove the topbar from namepasce/flows ([accbafe13](https://github.com/kestra-io/kestra/commit/accbafe13))
- Remove some warnings ([7a299e51f](https://github.com/kestra-io/kestra/commit/7a299e51f))
- **ui:** Amend no code editor breadcrumbs issue ([#7054](https://github.com/kestra-io/kestra/pull/7054))
- **docs:** Remove custom dashboard website component ([e1a4f2e2f](https://github.com/kestra-io/kestra/commit/e1a4f2e2f))
- Unlock audit logs in execution ([157566300](https://github.com/kestra-io/kestra/commit/157566300))
- Transfer utm parameters correctly ([0e09f6821](https://github.com/kestra-io/kestra/commit/0e09f6821))
- **ui:** Fix missing param kind for blueprint in flow editor ([#7087](https://github.com/kestra-io/kestra/pull/7087))
- **core:** Subflow validation didn't work anymore ([9b2c4c9a1](https://github.com/kestra-io/kestra/commit/9b2c4c9a1))
- **core:** Retry flaky test AbstractRunnerTest.multipleConditionTriggerFailed() ([db4f186bd](https://github.com/kestra-io/kestra/commit/db4f186bd))
- **core:** Http request with head and 404 and sending the wrong exception ([6ee0e86ca](https://github.com/kestra-io/kestra/commit/6ee0e86ca))
- **cli:** Retry flaky test FlowCreateOrUpdateCommandTest.runWithDelete. ([96f4466f1](https://github.com/kestra-io/kestra/commit/96f4466f1))
- **core:** Subflow labels must not be overriden by parent flow ones ([6190d9113](https://github.com/kestra-io/kestra/commit/6190d9113))
- Use the new charts in the flows page ([#6970](https://github.com/kestra-io/kestra/pull/6970))
- Plugin header icon for ticket #4252 ([#4252](https://github.com/kestra-io/kestra/issues/4252))
- Make sure normal single line table dont' push the build #7018 ([#7018](https://github.com/kestra-io/kestra/issues/7018))
- **core:** Retry flaky test TimeoutTest.timeout() ([4e753c7b9](https://github.com/kestra-io/kestra/commit/4e753c7b9))
- Protect axios JSON parsing ([a4dcb8dcd](https://github.com/kestra-io/kestra/commit/a4dcb8dcd))
- Remove FE warnings on flow edition ([65dd4f9fd](https://github.com/kestra-io/kestra/commit/65dd4f9fd))
- Remove Labels tag type warning ([3a8b24eda](https://github.com/kestra-io/kestra/commit/3a8b24eda))
- Avoid clearing selected value on every error ([631a016e0](https://github.com/kestra-io/kestra/commit/631a016e0))
- **ui:** Remove useless double click row action ([e527f0133](https://github.com/kestra-io/kestra/commit/e527f0133))
- **ci:** Update scripts/workflows for plugins ([555b769aa](https://github.com/kestra-io/kestra/commit/555b769aa))
- Use the proper variable for select header in table ([#7107](https://github.com/kestra-io/kestra/pull/7107))
- Make table links primary instead of purple ([#7106](https://github.com/kestra-io/kestra/pull/7106))
- **ui:** Restore namespace filter manual typing & various improvements ([#7127](https://github.com/kestra-io/kestra/pull/7127))
- **core:** Remove the dynamic property patterns ([e6827f273](https://github.com/kestra-io/kestra/commit/e6827f273))
- **cli:** Print help on missing parameters ([ae05de4a1](https://github.com/kestra-io/kestra/commit/ae05de4a1))
- **ui:** Amend log lines in Firefox ([#7133](https://github.com/kestra-io/kestra/pull/7133))
- Enterprise edition tag in light mode ([85ebf49b6](https://github.com/kestra-io/kestra/commit/85ebf49b6))
- Sidemenu bring back the gray hover ([e15eb5587](https://github.com/kestra-io/kestra/commit/e15eb5587))
- **ui:** Get the string fields in no code to use editor and have auto completion back ([#7150](https://github.com/kestra-io/kestra/pull/7150))
- **ui:** Switching from custom Flow blueprints tab to dashboard was not working ([fa5ef3b4c](https://github.com/kestra-io/kestra/commit/fa5ef3b4c))
- **ui:** Custom Dashboard name overflows. ([#7124](https://github.com/kestra-io/kestra/pull/7124))
- Setup docId for blueprints ([9499ee2c2](https://github.com/kestra-io/kestra/commit/9499ee2c2))
- Bring back hover in main menu ([1bbe48fe5](https://github.com/kestra-io/kestra/commit/1bbe48fe5))
- **core:** Process runner are not serialized correctly on worker ([c91827610](https://github.com/kestra-io/kestra/commit/c91827610))
- **ui:** Amend pagination on namespace flows listing ([#7163](https://github.com/kestra-io/kestra/pull/7163))
- **core:** Retry flaky test AbstractRunnerTest.restartFailedThenFailureWithGlobalErrors ([560703fde](https://github.com/kestra-io/kestra/commit/560703fde))
- **ui:** Null-safe search filters ([21733d849](https://github.com/kestra-io/kestra/commit/21733d849))
- **core:** Retry flaky test AbstractRunnereTest.concurrencyQueuePause ([f8b64cfbd](https://github.com/kestra-io/kestra/commit/f8b64cfbd))
- **ui:** Amend translation string for no results ([#7172](https://github.com/kestra-io/kestra/pull/7172))
- **ui:** Align dashboard button label to icon ([#7175](https://github.com/kestra-io/kestra/pull/7175))
- **core:** Retry test HttpClientTest.getText ([20d55122e](https://github.com/kestra-io/kestra/commit/20d55122e))
- **core:** Retry flaky test AbstractRunnerTest.restartForEachItem ([30db740de](https://github.com/kestra-io/kestra/commit/30db740de))
- **core:** Make flow/namespace variables available for input expr ([8d8b7e7a6](https://github.com/kestra-io/kestra/commit/8d8b7e7a6))
- **ui:** Global plugin doc with new redesign + auto-expand properties initially ([bbb03b288](https://github.com/kestra-io/kestra/commit/bbb03b288))
- **theme:** Make plugin rendering reactive to theme switch ([9619dca76](https://github.com/kestra-io/kestra/commit/9619dca76))
- **core:** #7181 log level rendered as string ([#7198](https://github.com/kestra-io/kestra/pull/7198), [#7181](https://github.com/kestra-io/kestra/issues/7181))
- **core:** Request option doesn't initialize properly ([a0483dc20](https://github.com/kestra-io/kestra/commit/a0483dc20))
- **ui:** Prevent doubling the executions chart on flow overview ([#7219](https://github.com/kestra-io/kestra/pull/7219))
- **core:** Possible NPE on LabelService.containsAll ([ecd36ec2a](https://github.com/kestra-io/kestra/commit/ecd36ec2a))
- **ui:** Amend the language switching issue ([#7235](https://github.com/kestra-io/kestra/pull/7235))
- Add comment on i18n code ([e0ee26a9c](https://github.com/kestra-io/kestra/commit/e0ee26a9c))
- Labels should not be purple if inactive ([95b94f396](https://github.com/kestra-io/kestra/commit/95b94f396))
- **webserver,core:** Move the LogStreamService in core so EE can use it for apps ([84c07ef01](https://github.com/kestra-io/kestra/commit/84c07ef01))
- **ci:** Fix and remove unecessary setps in set version workflows ([dc8576afe](https://github.com/kestra-io/kestra/commit/dc8576afe))
- Make dashboard tables the right color ([6f7bb80c6](https://github.com/kestra-io/kestra/commit/6f7bb80c6))
- Use the udpated labelsFromQuery in labels ([ec967a57f](https://github.com/kestra-io/kestra/commit/ec967a57f))
- **ci:** Workflow test correct previous job status usage ([9ba27b9bd](https://github.com/kestra-io/kestra/commit/9ba27b9bd))
- **ci:** Disabled previous generate translations CI ([5dcd27c06](https://github.com/kestra-io/kestra/commit/5dcd27c06))
- **ci:** Missing checkout in release step ([09ff9d405](https://github.com/kestra-io/kestra/commit/09ff9d405))
- **ci:** Removed useless name in action files ([4986d68f5](https://github.com/kestra-io/kestra/commit/4986d68f5))
- **ci:** Pass correctly secret + cleanup ([945564366](https://github.com/kestra-io/kestra/commit/945564366))
- **cicd:** Add npm install on vulnerabilities check ([9790f0237](https://github.com/kestra-io/kestra/commit/9790f0237))
- **ci:** Workflow test ouptputs + changes for codecov ([c3e830c2c](https://github.com/kestra-io/kestra/commit/c3e830c2c))
- **ci:** Inputs instead of secrets ([c53239470](https://github.com/kestra-io/kestra/commit/c53239470))
- **core:** #7227 cron schedule with timezone and backfile not triggering ([#7285](https://github.com/kestra-io/kestra/pull/7285), [#7227](https://github.com/kestra-io/kestra/issues/7227))
- Force run docs ([#7289](https://github.com/kestra-io/kestra/pull/7289))
- Collapsed menu colors in light mode ([0becf7433](https://github.com/kestra-io/kestra/commit/0becf7433))
- **ui:** Match chart colors ([#7290](https://github.com/kestra-io/kestra/pull/7290))
- **makefile:** Build plugin now build main branch too ([#7297](https://github.com/kestra-io/kestra/pull/7297))
- **core:** Flacky trigger with backfile test ([#7295](https://github.com/kestra-io/kestra/pull/7295))
- **core:** Http client was not using deprecated setter ([25370d10b](https://github.com/kestra-io/kestra/commit/25370d10b))
- **core:** Do not validate subflow if namespace or id is pebble ([#7294](https://github.com/kestra-io/kestra/pull/7294))
- **h2:** Remove indenting in sql file ([#7306](https://github.com/kestra-io/kestra/pull/7306))
- **core:** Add request.yaml file back ([#7308](https://github.com/kestra-io/kestra/pull/7308))
- **core:** Possible NPE when an execution has no labels ([7dbf86d54](https://github.com/kestra-io/kestra/commit/7dbf86d54))
- **cicd:** Npm install in the wrong folder for vulnerabilities checks ([7bf42cb1c](https://github.com/kestra-io/kestra/commit/7bf42cb1c))
- Add proper ellipsis to sidemenu ([#7361](https://github.com/kestra-io/kestra/pull/7361))
- Trim bookmarks better ([#7359](https://github.com/kestra-io/kestra/pull/7359))
- **ui:** Make sure bulk selection is taking into account only selected items ([#7362](https://github.com/kestra-io/kestra/pull/7362))
- Make menu hierarchy get closer to the original designs ([#7102](https://github.com/kestra-io/kestra/pull/7102))
- **core:** Render list ([b45a44bd3](https://github.com/kestra-io/kestra/commit/b45a44bd3))
- **jdbc:** Delete the executor state at the correct stage ([1d65fd96b](https://github.com/kestra-io/kestra/commit/1d65fd96b))
- **ui:** Refresh dashboard list ([#7370](https://github.com/kestra-io/kestra/pull/7370))
- **core:** Handle http request with no content type ([239fb6a68](https://github.com/kestra-io/kestra/commit/239fb6a68))
- **cicd:** Add mariadb plugins on docker image ([5b29a0d07](https://github.com/kestra-io/kestra/commit/5b29a0d07))
- **scheduler:** Delete trigger when flow is not found ([#7366](https://github.com/kestra-io/kestra/pull/7366))
- **cli:** Disable by default OTEL metrics ([def8fa3ff](https://github.com/kestra-io/kestra/commit/def8fa3ff))
- Changing language should work with providers too ([b8d0ae3ec](https://github.com/kestra-io/kestra/commit/b8d0ae3ec))
- **ui:** Fix slack button on error toast ([ad651cdc5](https://github.com/kestra-io/kestra/commit/ad651cdc5))
- **ui:** Properly handle the operation labels in filter component ([#7399](https://github.com/kestra-io/kestra/pull/7399))
- **core:** Taskrun list can be null ([ddfed2e65](https://github.com/kestra-io/kestra/commit/ddfed2e65))
- **ui:** Correct english translations ([#7401](https://github.com/kestra-io/kestra/pull/7401))
- **core:** ForEachItem inside an If task ([d9d2f8697](https://github.com/kestra-io/kestra/commit/d9d2f8697))
- **test:** Attempt at making the test not flakky ([#7400](https://github.com/kestra-io/kestra/pull/7400))
- Enable rendering of commands properties inside CommandsWrapper ([#7381](https://github.com/kestra-io/kestra/pull/7381))
- Restore red dot when there is news ([fbd893434](https://github.com/kestra-io/kestra/commit/fbd893434))
- **tests:** Wider maxDuration for retry-failed-flow-duration.yml ([d55ce16f5](https://github.com/kestra-io/kestra/commit/d55ce16f5))
- **ui:** Better duration consistency on Gantt chart ([4a55485cd](https://github.com/kestra-io/kestra/commit/4a55485cd))
- **tests:** Logs are asynchronously inserted so we wait for them to be fully in ([13cb0fb96](https://github.com/kestra-io/kestra/commit/13cb0fb96))
- **ui:** Improve modifying inputs from no code editor ([#7440](https://github.com/kestra-io/kestra/pull/7440))
- **core:** Provide tenantId when looking for subflow ([#7442](https://github.com/kestra-io/kestra/pull/7442))
- **core:** Move back to the old worker thread pool because it was restricting it to 1 thread ([372327581](https://github.com/kestra-io/kestra/commit/372327581))
- **core:** Remove props with default from `required` in json schema to avoid validation errors ([15b85ac95](https://github.com/kestra-io/kestra/commit/15b85ac95))
- **core:** Render `delete` property at the beginning in Docker task runner ([16e3830c9](https://github.com/kestra-io/kestra/commit/16e3830c9))
- **tests:** Increase timeout on JdbcServiceLivenessCoordinatorTest.taskResubmitSkipExecution ([cebe8f354](https://github.com/kestra-io/kestra/commit/cebe8f354))
- **cicd:** Update concurrency key ([666f8a7ad](https://github.com/kestra-io/kestra/commit/666f8a7ad))
- **core:** Http proxy was not passed to configuration ([a53395ab3](https://github.com/kestra-io/kestra/commit/a53395ab3))
- **ci:** QEMU issue ([ce15ca1ca](https://github.com/kestra-io/kestra/commit/ce15ca1ca))
- **webserver:** Allow special chars in label key ([#7419](https://github.com/kestra-io/kestra/pull/7419))
- **ui:** Properly cast value to boolean ([#7455](https://github.com/kestra-io/kestra/pull/7455))
- **ui:** Improve handling of main filter labels on page load ([#7456](https://github.com/kestra-io/kestra/pull/7456))
- **ui:** Fix the light theme contrast for editor. ([#7438](https://github.com/kestra-io/kestra/pull/7438))
- **core:** If subflow is disabled, raise an error ([#7490](https://github.com/kestra-io/kestra/pull/7490))
- Render before command with options in CommandsWrapper ([#7496](https://github.com/kestra-io/kestra/pull/7496))
- **tasks:** Remove useless format metrics on return ([#7486](https://github.com/kestra-io/kestra/pull/7486))
- **core:** Require condition in Flow trigger ([#7494](https://github.com/kestra-io/kestra/pull/7494))
- **ui:** Make flow metrics behave as expected ([#7502](https://github.com/kestra-io/kestra/pull/7502))
- **ui:** Properly filter out log levels ([#7503](https://github.com/kestra-io/kestra/pull/7503))
- **core:** Add package-info.java to dashboard package ([df92491e5](https://github.com/kestra-io/kestra/commit/df92491e5))
- **core:** Add package-info.java to script + handle subgroups properly ([ac2643c10](https://github.com/kestra-io/kestra/commit/ac2643c10))
- **core:** Try to log message for unhandled realtime trigger exception ([a115eb537](https://github.com/kestra-io/kestra/commit/a115eb537))
- **core:** Move package-info.java to proper dashboard packages ([16284e5b9](https://github.com/kestra-io/kestra/commit/16284e5b9))
- **core:** Rename dashboards subgroups ([9ec4d9282](https://github.com/kestra-io/kestra/commit/9ec4d9282))
- **core:** Typo in PluginScanner ([25723b1ac](https://github.com/kestra-io/kestra/commit/25723b1ac))
- **core:** Camel to snake-case for app-blocks in RegisteredPlugin ([c8c0c4e63](https://github.com/kestra-io/kestra/commit/c8c0c4e63))
- **core:** Missing content type on http client ([9fce6cfe6](https://github.com/kestra-io/kestra/commit/9fce6cfe6))
- **jdbc:** Be resilient to DataException ([cf10269f2](https://github.com/kestra-io/kestra/commit/cf10269f2))
- **core:** Content type encoding should not be mandatory ([4500c976d](https://github.com/kestra-io/kestra/commit/4500c976d))
- **core:** #172 add reactor into classloader blacklist ([#172](https://github.com/kestra-io/kestra/issues/172))
- **ui:** Amend filtering of logs ([#7535](https://github.com/kestra-io/kestra/pull/7535))
- **core:** Handle space in HTTP request URI ([a2c89e508](https://github.com/kestra-io/kestra/commit/a2c89e508))
- **core:** Subflow using the old task name never ends ([38b8190be](https://github.com/kestra-io/kestra/commit/38b8190be))
- **ui:** Amend label filter encoding after values change ([#7536](https://github.com/kestra-io/kestra/pull/7536))
- **ui:** Plugins TOC is now handling every type of plugins ([48b117b35](https://github.com/kestra-io/kestra/commit/48b117b35))
- **ui:** Styling enhancements for plugin doc ([ff4f7abb0](https://github.com/kestra-io/kestra/commit/ff4f7abb0))
- **ui:** Preselect filter comparator option ([#7518](https://github.com/kestra-io/kestra/pull/7518))
- **ui:** Improve coloring for task object tooltips in no code editor ([#7515](https://github.com/kestra-io/kestra/pull/7515))
- Refactor PluginSearchCommand ([8d2af87db](https://github.com/kestra-io/kestra/commit/8d2af87db))
- **ui:** Make flow deletion work as expected ([#7579](https://github.com/kestra-io/kestra/pull/7579))
- **ui:** Amend inconsistencies inside the product tour ([#7582](https://github.com/kestra-io/kestra/pull/7582))
- **core:** Log can have no executionId ([fc7ef1ca3](https://github.com/kestra-io/kestra/commit/fc7ef1ca3))
- **core:** Properly render list properties ([7fbe43322](https://github.com/kestra-io/kestra/commit/7fbe43322))
- **ui:** Make sure adding labels on flow run dialog is possible ([#7587](https://github.com/kestra-io/kestra/pull/7587))
- **ui:** LabelInput.vue was causing UI freeze ([a996347de](https://github.com/kestra-io/kestra/commit/a996347de))
- Ci for translations ([#7602](https://github.com/kestra-io/kestra/pull/7602))
- **translations:** Fix translation key detection by comparing against last modifying commit ([#7604](https://github.com/kestra-io/kestra/pull/7604))
- Only re-translate if the key is not already in the target dict ([#7608](https://github.com/kestra-io/kestra/pull/7608))
- Clean up translations script ([81635ddc8](https://github.com/kestra-io/kestra/commit/81635ddc8))
- Improve some wording ([ae75ea06d](https://github.com/kestra-io/kestra/commit/ae75ea06d))
- **translations:** Allow retranslating modified keys when needed ([020d674d8](https://github.com/kestra-io/kestra/commit/020d674d8))
- Turn CI flag to a dropdown ([d04764814](https://github.com/kestra-io/kestra/commit/d04764814))
- Improve translation prompt ([3804bdc7f](https://github.com/kestra-io/kestra/commit/3804bdc7f))
- Make sure nocode edits the right task from the topology ([3dc8e98ed](https://github.com/kestra-io/kestra/commit/3dc8e98ed))
- **ui:** Replace alert blocks upon markdown rendering to display them properly ([9b4f3148f](https://github.com/kestra-io/kestra/commit/9b4f3148f))
- Confusing trace log ([c8207b870](https://github.com/kestra-io/kestra/commit/c8207b870))
- **ui:** Executions naviation based on start Date. ([#7626](https://github.com/kestra-io/kestra/pull/7626))
- **core:** No longer lowercasing PluginClassIdentifier to have proper validation upon Plugin deserialization ([17e54134c](https://github.com/kestra-io/kestra/commit/17e54134c))
- **ui:** Additional check for text label of filters section ([446a034d6](https://github.com/kestra-io/kestra/commit/446a034d6))
- **ui:** Improve check for text label of filters section ([036a7cf4f](https://github.com/kestra-io/kestra/commit/036a7cf4f))
- **ui:** Use watch with ref instead of accessing the value ([5f21eb579](https://github.com/kestra-io/kestra/commit/5f21eb579))
- **ui:** Allow sidebar theme toggle to update the editor theme ([#7648](https://github.com/kestra-io/kestra/pull/7648))
- **ci:** Fix vulnerability check workflow ([8bd3c2fef](https://github.com/kestra-io/kestra/commit/8bd3c2fef))
- **ui:** Make sure adding labels on flow run dialog is possible ([#7652](https://github.com/kestra-io/kestra/pull/7652))
- **cicd:** Missing acls for test reports ([d2bf56fec](https://github.com/kestra-io/kestra/commit/d2bf56fec))
- **core:** Validation error when timeWindow.type is null ([1eb9adf30](https://github.com/kestra-io/kestra/commit/1eb9adf30))
- **core:** MultipleCondition documentation ([12180457e](https://github.com/kestra-io/kestra/commit/12180457e))
- **core:** Avoid duplicates in plugins subgroups + properly retrieve subgroup title ([ef65623b1](https://github.com/kestra-io/kestra/commit/ef65623b1))
- **cli:** Fix regression on CLI plugin doc cmd ([e200bbdb6](https://github.com/kestra-io/kestra/commit/e200bbdb6))
- **core:** Stop Docker runner gracefully ([8f9fc5fe4](https://github.com/kestra-io/kestra/commit/8f9fc5fe4))
- **ui:** Prevent context docs open on editor custom blueprints click ([#7716](https://github.com/kestra-io/kestra/pull/7716))
- **runner-memory:** Delete MemorySchedulerTriggerState back due to cherry-pick ([593558dd2](https://github.com/kestra-io/kestra/commit/593558dd2))
- **ui:** Improved fetch of type for pluginDoc and avoid removing doc if map has "type" as property but without doc (like ENUM value) ([#7727](https://github.com/kestra-io/kestra/pull/7727))
- **demo:** On pages stop showing the docs without a button ([07e4598fa](https://github.com/kestra-io/kestra/commit/07e4598fa))
- Repair collapsed menu submenus ([467861652](https://github.com/kestra-io/kestra/commit/467861652))
- **flow editor:** Enhance behavior when switching file tabs ([#7722](https://github.com/kestra-io/kestra/pull/7722))
- **tests:** Reject promise with 404 instead of empty resolve if non-mocked store call in flowAutoCompletionProvider.spec.ts ([166262209](https://github.com/kestra-io/kestra/commit/166262209))
- **jdbc:** Resubmit worker job to the good worker group ([7696d41d5](https://github.com/kestra-io/kestra/commit/7696d41d5))
- **ci:** Generate_translations.py is now deleting keys that are no longer in en translation to avoid ghost translations ([440a94290](https://github.com/kestra-io/kestra/commit/440a94290))
- **core:** ThresholdFilter is now stricly lower" ([4276a0afd](https://github.com/kestra-io/kestra/commit/4276a0afd))
- **core:** Failing schedule test ([#7783](https://github.com/kestra-io/kestra/pull/7783))
- **cli:** Fix double shutdown warn messages ([d2d0726f7](https://github.com/kestra-io/kestra/commit/d2d0726f7))
- **core:** Flaky test ExitTest.shouldExitAndKillTheExecution() ([0870d8ebd](https://github.com/kestra-io/kestra/commit/0870d8ebd))
- **jdbc:** Flaky tests JdbcServiceLivenessCoordinatorTest ([5ffeee532](https://github.com/kestra-io/kestra/commit/5ffeee532))
- **core:** Wait for service-manager-task thread to be stopped ([01036c829](https://github.com/kestra-io/kestra/commit/01036c829))
- **tests:** Increase seconds diff between dates ([#7785](https://github.com/kestra-io/kestra/pull/7785))
- **core:** #7740 http configuration bearer token may change to basic because of allowFailed ([#7788](https://github.com/kestra-io/kestra/pull/7788), [#7740](https://github.com/kestra-io/kestra/issues/7740))
- **jdbc:** Return correct total when paginating custom dashboard chart ([#7790](https://github.com/kestra-io/kestra/pull/7790))
- **webserver:** Add endpoint for inherited secrets ([9b5b2b981](https://github.com/kestra-io/kestra/commit/9b5b2b981))
- **ui:** Make switch view buttons from dashboard editor the same as flow editor ones ([82a346b2c](https://github.com/kestra-io/kestra/commit/82a346b2c))
- **ui:** Remove errors from dashboard validation if it's fixed ([4a1282768](https://github.com/kestra-io/kestra/commit/4a1282768))
- **core:** Fix properly map MavenPluginRepositoryConfig ([1cb323b7a](https://github.com/kestra-io/kestra/commit/1cb323b7a))
- **docs:** 2025 get started video ([977fe222a](https://github.com/kestra-io/kestra/commit/977fe222a))
- **core:** AllowedNamespace is already called in the KvStoreService ([e2da2dfeb](https://github.com/kestra-io/kestra/commit/e2da2dfeb))
- **core:** Missing afterExecution in FlowForExecution ([141968000](https://github.com/kestra-io/kestra/commit/141968000))
- **deps:** Move OTLP metrics lib to CLI to avoid warning in tests ([acebfef0d](https://github.com/kestra-io/kestra/commit/acebfef0d))
- **core:** Avoid calling Worker post construct method twice ([c9baaf856](https://github.com/kestra-io/kestra/commit/c9baaf856))
- **ui:** Display back core property if not in a task ([64e5b8004](https://github.com/kestra-io/kestra/commit/64e5b8004))
- **docs:** Add parallel example ([ff504afd8](https://github.com/kestra-io/kestra/commit/ff504afd8))
- Remove labels from an execution ([#7256](https://github.com/kestra-io/kestra/pull/7256))
- **docs:** Schedule example ([ebec8c212](https://github.com/kestra-io/kestra/commit/ebec8c212))
- **docs:** Fail examples ([379199e18](https://github.com/kestra-io/kestra/commit/379199e18))
- **docs:** Typos ([02336ed39](https://github.com/kestra-io/kestra/commit/02336ed39))
- **ui:** Use container queries for dashboard ([#7889](https://github.com/kestra-io/kestra/pull/7889))
- **core:** Avoid ClassCastException when parsing flow inputs ([#7882](https://github.com/kestra-io/kestra/pull/7882))
- **ui:** Amend displaying large amount of logs ([#7923](https://github.com/kestra-io/kestra/pull/7923))
- Disable micronaut otel by default ([8076fcc99](https://github.com/kestra-io/kestra/commit/8076fcc99))
- **cli:** Return exit 0 in CLI plugins cmd ([3566c4d36](https://github.com/kestra-io/kestra/commit/3566c4d36))
- OpenTelemetry should be optional ([0ee9abb37](https://github.com/kestra-io/kestra/commit/0ee9abb37))
- ***:** Improve log timestamp precision + allow to override timestamp… ([#7847](https://github.com/kestra-io/kestra/pull/7847))
- **ui:** Amend dependabot errors with parsing of package-lock.json file ([#7941](https://github.com/kestra-io/kestra/pull/7941))
- **core:** Possible NPE if no manifest ([8cba4dab6](https://github.com/kestra-io/kestra/commit/8cba4dab6))
- **ui:** Prevent filter text prefix to show up when searching locally ([#7947](https://github.com/kestra-io/kestra/pull/7947))
- **core:** Triggers don't have an execution ID already ([0579e23a2](https://github.com/kestra-io/kestra/commit/0579e23a2))
- **core-ee:** NPE when execution labels are null ([#7950](https://github.com/kestra-io/kestra/pull/7950))
- Only run posthog in prod mode ([#7952](https://github.com/kestra-io/kestra/pull/7952))
- **core:** Add metric Publish task doc & icon ([481138e43](https://github.com/kestra-io/kestra/commit/481138e43))
- Update ui-libs ([cca7ed0bf](https://github.com/kestra-io/kestra/commit/cca7ed0bf))
- **ui:** Filter tests were not up-to-date ([f3419084f](https://github.com/kestra-io/kestra/commit/f3419084f))
- **cicd:** Display ui unit test status ([df1bbcfb7](https://github.com/kestra-io/kestra/commit/df1bbcfb7))
- **ui:** Change plugin doc properly upon switching plugin type ([773a6e909](https://github.com/kestra-io/kestra/commit/773a6e909))
- **core:** Working dir interface contract by putting back putFile(path, content) ([#7980](https://github.com/kestra-io/kestra/pull/7980))
- **ui:** Include parameters into request for plugin schema fetching ([#8002](https://github.com/kestra-io/kestra/pull/8002))
- **core:** Amend server start announcements ([49a29c4bf](https://github.com/kestra-io/kestra/commit/49a29c4bf))
- **build:** Gradle space-assignment deprecation ([a1abd28a3](https://github.com/kestra-io/kestra/commit/a1abd28a3))
- **core:** Race in the FlowListener ([19894dbcd](https://github.com/kestra-io/kestra/commit/19894dbcd))
- **core:** Race while initializing trigger + possible duplicate update ([742169344](https://github.com/kestra-io/kestra/commit/742169344))
- Remove unwanted change in Curl ([3244b1c29](https://github.com/kestra-io/kestra/commit/3244b1c29))
- **ui:** Amend task source tabs colors ([#8010](https://github.com/kestra-io/kestra/pull/8010))
- **platform:** Move slf4j api to enforce platform to fix it's version in test ([#8007](https://github.com/kestra-io/kestra/pull/8007))
- **core:** Handling for trailing slash in the KESTRA_URL configuration ([#6373](https://github.com/kestra-io/kestra/pull/6373))
- **ui:** Prevent function parameters autocompletion from deleting parenthesis ([74455ad99](https://github.com/kestra-io/kestra/commit/74455ad99))
- **ui:** Handle properly layout of global Secrets when there is a secret manager ([edbf14c1b](https://github.com/kestra-io/kestra/commit/edbf14c1b))
- **core:** Ensure defaults can be injected in flows ([#3206](https://github.com/kestra-io/kestra/pull/3206))
- **ui:** Allow multi label filtering ([#8022](https://github.com/kestra-io/kestra/pull/8022))
- **ui:** Fail-safe secrets API calls ([c64c2c710](https://github.com/kestra-io/kestra/commit/c64c2c710))
- **ui:** Amend operator value of labels inside the filter ([#8028](https://github.com/kestra-io/kestra/pull/8028))
- **ui:** Fail-safe secrets API calls on global secrets view ([28d1f005a](https://github.com/kestra-io/kestra/commit/28d1f005a))
- **core:** Fix NPE when closing standalone runner ([6c9dc8fba](https://github.com/kestra-io/kestra/commit/6c9dc8fba))
- **ui:** Make sure global secret view iterates over all secrets ([75e763550](https://github.com/kestra-io/kestra/commit/75e763550))
- **cli:** Make worker args available through static KestraContext ([dea66ca25](https://github.com/kestra-io/kestra/commit/dea66ca25))
- **core:** Flatten map should not throw an exception ([4c93a2b0e](https://github.com/kestra-io/kestra/commit/4c93a2b0e))
- **webserver:** First eval without masking secret function to error in case of missing secret ([8f4ce5fc1](https://github.com/kestra-io/kestra/commit/8f4ce5fc1))
- **ui:** Properly detect yaml to inject json schema into MonacoEditor ([8be17827c](https://github.com/kestra-io/kestra/commit/8be17827c))
- **core:** HttpClient log the URL even if it's a secret ([54aa93570](https://github.com/kestra-io/kestra/commit/54aa93570))
- **core:** Properly fix the issue with MapUtils.flattenToNestedMap ([b8e8333f6](https://github.com/kestra-io/kestra/commit/b8e8333f6))
- **kafka runner:** #2709 filter child forEach tasks before merging th… ([#8095](https://github.com/kestra-io/kestra/pull/8095), [#2709](https://github.com/kestra-io/kestra/issues/2709))
- **core:** Avoid flow validation error on plugin alias duplicates ([8ebc3fbba](https://github.com/kestra-io/kestra/commit/8ebc3fbba))
- Doc and deprecated field was not showing for dynamic non-string properties ([#8006](https://github.com/kestra-io/kestra/pull/8006))
- **core:** Require condition in Flow trigger " ([#7494](https://github.com/kestra-io/kestra/pull/7494))
- **core:** Compilation issue ([380e329e9](https://github.com/kestra-io/kestra/commit/380e329e9))
- **core:** Namespace service now properly detects namespaces with flows inside ([a09319800](https://github.com/kestra-io/kestra/commit/a09319800))
- **webserver:** Handle out-of-bounds (>) namespaces fetch ([224026c39](https://github.com/kestra-io/kestra/commit/224026c39))
- **ui:** Add routeContext where it was missing ([143ebc061](https://github.com/kestra-io/kestra/commit/143ebc061))
- **ui:** Repair tenant translation ([b3799cc03](https://github.com/kestra-io/kestra/commit/b3799cc03))
- **ui:** Global secret page design ([54eccac63](https://github.com/kestra-io/kestra/commit/54eccac63))
- **ui:** Search bars are properly working in secrets & KV pages ([4e7c6e87b](https://github.com/kestra-io/kestra/commit/4e7c6e87b))
- **core:** Allow dash in plugin version qualifier ([95b1f8dfc](https://github.com/kestra-io/kestra/commit/95b1f8dfc))
- **cli:** Properly register plugins uninstall cmd ([91bf3207f](https://github.com/kestra-io/kestra/commit/91bf3207f))
- **core:** Add missing docker plugin subgroup icon ([1613dee76](https://github.com/kestra-io/kestra/commit/1613dee76))
- Task array needed better typings ([#8158](https://github.com/kestra-io/kestra/pull/8158))
- Make flowWarnings show to unlock saving ([#8157](https://github.com/kestra-io/kestra/pull/8157))
### 💅 Refactors
- Introduce render in commands wrapper for property string ([#7430](https://github.com/kestra-io/kestra/pull/7430))
- Avoid en.json warning when building ([df6d33931](https://github.com/kestra-io/kestra/commit/df6d33931))
- Remove rendering from Docker ([#7439](https://github.com/kestra-io/kestra/pull/7439))
- Return only command when no interpreter and no beforeCommands ([#7452](https://github.com/kestra-io/kestra/pull/7452))
- **ui:** Remove obsolete `chartjs-chart-treemap` library ([#7529](https://github.com/kestra-io/kestra/pull/7529))
- Update http client and fix tests ([be04c168f](https://github.com/kestra-io/kestra/commit/be04c168f))
- **ui:** Remove the obsolete console statement ([#7887](https://github.com/kestra-io/kestra/pull/7887))
- Move flow editor logic into flow store ([#7968](https://github.com/kestra-io/kestra/pull/7968))
### 📖 Documentation
- **core:** Better documentation on docker tasks ([f4b78755a](https://github.com/kestra-io/kestra/commit/f4b78755a))
- Debug expression ([#7514](https://github.com/kestra-io/kestra/pull/7514))
- Fix typo in storage reverse task title ([#7667](https://github.com/kestra-io/kestra/pull/7667))
- Kv pebble ([#7886](https://github.com/kestra-io/kestra/pull/7886))
### 📦 Build
- Try and fix FE CI ([4234c76b0](https://github.com/kestra-io/kestra/commit/4234c76b0))
- Prevent corepack crash ([3c7e26c88](https://github.com/kestra-io/kestra/commit/3c7e26c88))
- **deps:** Bump software.amazon.awssdk:bom from 2.30.6 to 2.30.11 ([d50f631fb](https://github.com/kestra-io/kestra/commit/d50f631fb))
- **deps:** Bump com.azure:azure-sdk-bom from 1.2.30 to 1.2.31 ([bd0e4a5f4](https://github.com/kestra-io/kestra/commit/bd0e4a5f4))
- **deps:** Bump software.amazon.awssdk.crt:aws-crt ([f1f0d3186](https://github.com/kestra-io/kestra/commit/f1f0d3186))
- **deps:** Bump flyingSaucerVersion from 9.11.2 to 9.11.3 ([d769b7aad](https://github.com/kestra-io/kestra/commit/d769b7aad))
- **deps:** Bump com.gradleup.shadow from 8.3.5 to 8.3.6 ([3a0beabe4](https://github.com/kestra-io/kestra/commit/3a0beabe4))
- **deps:** Bump org.owasp.dependencycheck from 12.0.1 to 12.0.2 ([36306495e](https://github.com/kestra-io/kestra/commit/36306495e))
- **deps:** Bump posthog-js from 1.215.2 to 1.215.3 in /ui ([#7182](https://github.com/kestra-io/kestra/pull/7182))
- **deps:** Bump shiki from 2.3.0 to 2.3.1 in /ui ([#7183](https://github.com/kestra-io/kestra/pull/7183))
- **deps-dev:** Bump @shikijs/markdown-it from 2.3.0 to 2.3.1 in /ui ([#7184](https://github.com/kestra-io/kestra/pull/7184))
- **deps:** Bump com.google.cloud:libraries-bom from 26.53.0 to 26.54.0 ([5aa73ec48](https://github.com/kestra-io/kestra/commit/5aa73ec48))
- **deps:** Bump software.amazon.awssdk:bom from 2.30.11 to 2.30.16 ([8a3f41323](https://github.com/kestra-io/kestra/commit/8a3f41323))
- **deps:** Bump software.amazon.awssdk.crt:aws-crt ([55bdfac7f](https://github.com/kestra-io/kestra/commit/55bdfac7f))
- **deps:** Bump com.microsoft.playwright:playwright ([48320a89d](https://github.com/kestra-io/kestra/commit/48320a89d))
- **deps:** Bump io.pebbletemplates:pebble from 3.2.2 to 3.2.3 ([8260dc603](https://github.com/kestra-io/kestra/commit/8260dc603))
- **deps:** Bump io.micronaut.platform:micronaut-platform ([4c5638d95](https://github.com/kestra-io/kestra/commit/4c5638d95))
- **deps:** Bump org.opensearch.client:opensearch-java ([90da5f7cf](https://github.com/kestra-io/kestra/commit/90da5f7cf))
- **deps:** Bump io.micronaut.platform:micronaut-platform ([f3cff1b8c](https://github.com/kestra-io/kestra/commit/f3cff1b8c))
- **deps:** Bump com.github.oshi:oshi-core from 6.6.6 to 6.7.0 ([66fdb58f4](https://github.com/kestra-io/kestra/commit/66fdb58f4))
- **deps:** Bump nl.basjes.gitignore:gitignore-reader ([4b48ad597](https://github.com/kestra-io/kestra/commit/4b48ad597))
- **deps:** Bump org.owasp.dependencycheck from 12.0.2 to 12.1.0 ([94421f141](https://github.com/kestra-io/kestra/commit/94421f141))
- **deps:** Bump software.amazon.awssdk:bom from 2.30.16 to 2.30.31 ([e7f2ec2ae](https://github.com/kestra-io/kestra/commit/e7f2ec2ae))
- **deps:** Bump opensearchRestVersion from 2.18.0 to 2.19.1 ([b6f91128a](https://github.com/kestra-io/kestra/commit/b6f91128a))
- **deps:** Bump com.google.cloud:libraries-bom from 26.54.0 to 26.56.0 ([82df58d26](https://github.com/kestra-io/kestra/commit/82df58d26))
- **deps:** Bump org.opensearch.client:opensearch-java ([ca4e6a4b3](https://github.com/kestra-io/kestra/commit/ca4e6a4b3))
- **deps:** Bump jacksonVersion from 2.18.2 to 2.18.3 ([20b87f1c9](https://github.com/kestra-io/kestra/commit/20b87f1c9))
- **deps:** Bump robinraju/release-downloader from 1.11 to 1.12 ([038890982](https://github.com/kestra-io/kestra/commit/038890982))
- **deps:** Bump com.azure:azure-sdk-bom from 1.2.31 to 1.2.32 ([92418841f](https://github.com/kestra-io/kestra/commit/92418841f))
- **deps:** Bump com.gorylenko.gradle-git-properties ([0a304ff1d](https://github.com/kestra-io/kestra/commit/0a304ff1d))
- **deps:** Bump org.testcontainers:junit-jupiter from 1.20.5 to 1.20.6 ([5af085844](https://github.com/kestra-io/kestra/commit/5af085844))
- **deps:** Bump org.opensearch.client:opensearch-java ([03a44c103](https://github.com/kestra-io/kestra/commit/03a44c103))
- **deps:** Bump com.github.docker-java:docker-java from 3.4.1 to 3.4.2 ([8d7bc6fdd](https://github.com/kestra-io/kestra/commit/8d7bc6fdd))
- **deps:** Bump org.jsoup:jsoup from 1.18.3 to 1.19.1 ([83f06f337](https://github.com/kestra-io/kestra/commit/83f06f337))
- **deps:** Bump software.amazon.awssdk.crt:aws-crt ([5935308e4](https://github.com/kestra-io/kestra/commit/5935308e4))
- **deps:** Bump org.testcontainers:testcontainers ([fefaa7cdb](https://github.com/kestra-io/kestra/commit/fefaa7cdb))
- **deps:** Bump software.amazon.awssdk:bom from 2.30.31 to 2.30.36 ([66e5a7ca3](https://github.com/kestra-io/kestra/commit/66e5a7ca3))
- **deps:** Bump io.micrometer:micrometer-core from 1.14.3 to 1.14.5 ([dea392a94](https://github.com/kestra-io/kestra/commit/dea392a94))
- **deps:** Bump @babel/helpers from 7.26.9 to 7.26.10 in /ui ([#7841](https://github.com/kestra-io/kestra/pull/7841))
- **deps:** Bump @babel/runtime-corejs3 from 7.26.9 to 7.26.10 in /ui ([#7840](https://github.com/kestra-io/kestra/pull/7840))
- **deps:** Bump software.amazon.awssdk:bom from 2.30.36 to 2.31.1 ([149dcac5f](https://github.com/kestra-io/kestra/commit/149dcac5f))
- **deps:** Bump protobufVersion from 3.25.5 to 4.30.1 ([6946c9268](https://github.com/kestra-io/kestra/commit/6946c9268))
- **deps:** Bump software.amazon.awssdk.crt:aws-crt ([0134d5e5c](https://github.com/kestra-io/kestra/commit/0134d5e5c))
- **deps:** Bump com.github.oshi:oshi-core from 6.7.0 to 6.7.1 ([8eb91b75e](https://github.com/kestra-io/kestra/commit/8eb91b75e))
- **deps:** Bump dorny/test-reporter from 1 to 2 ([ab061e9a1](https://github.com/kestra-io/kestra/commit/ab061e9a1))
- **deps:** Bump aquasecurity/trivy-action from 0.29.0 to 0.30.0 ([7f6e15ec4](https://github.com/kestra-io/kestra/commit/7f6e15ec4))
- **deps:** Bump nl.basjes.gitignore:gitignore-reader ([3dcd3c978](https://github.com/kestra-io/kestra/commit/3dcd3c978))
- **deps:** Bump org.jooq:jooq from 3.19.18 to 3.20.2 ([ab9ba91e5](https://github.com/kestra-io/kestra/commit/ab9ba91e5))
- **deps:** Bump org.slf4j:slf4j-api from 2.0.16 to 2.0.17 ([f89aa8d27](https://github.com/kestra-io/kestra/commit/f89aa8d27))
- **deps:** Bump org.aspectj:aspectjweaver from 1.9.22.1 to 1.9.23 ([5c73953c8](https://github.com/kestra-io/kestra/commit/5c73953c8))
- **deps:** Bump pdfjs-dist from 4.10.38 to 5.0.375 in /ui ([#7942](https://github.com/kestra-io/kestra/pull/7942))
- **deps:** Bump protobufVersion from 3.25.5 to 4.30.1" ([0ec2d8842](https://github.com/kestra-io/kestra/commit/0ec2d8842))
- **deps:** Bump com.microsoft.playwright:playwright ([6d59630a6](https://github.com/kestra-io/kestra/commit/6d59630a6))
- **deps:** Bump com.google.cloud:libraries-bom from 26.56.0 to 26.57.0 ([491f07296](https://github.com/kestra-io/kestra/commit/491f07296))
- **deps:** Bump com.github.oshi:oshi-core from 6.7.1 to 6.8.0 ([37af61f41](https://github.com/kestra-io/kestra/commit/37af61f41))
- **deps:** Bump software.amazon.awssdk:bom from 2.31.1 to 2.31.6 ([62e37f3b1](https://github.com/kestra-io/kestra/commit/62e37f3b1))
- **deps:** Bump software.amazon.awssdk.crt:aws-crt ([5a2ac895e](https://github.com/kestra-io/kestra/commit/5a2ac895e))
### 🏡 Chore
- **ci:** Update release workflows ([0b82b25a4](https://github.com/kestra-io/kestra/commit/0b82b25a4))
- Update "cluster" into "instance" in side menu ([#6996](https://github.com/kestra-io/kestra/pull/6996))
- **ui:** Move apps link in left menu just below the flows ([#7063](https://github.com/kestra-io/kestra/pull/7063))
- **ui:** Properly check the existence of fields inside schema ([cd822bd34](https://github.com/kestra-io/kestra/commit/cd822bd34))
- Update palette ([7a37a950b](https://github.com/kestra-io/kestra/commit/7a37a950b))
- **translations:** Auto generate values for languages other than english ([dee76c038](https://github.com/kestra-io/kestra/commit/dee76c038))
- **core:** Fix various compilation warnings ([625135959](https://github.com/kestra-io/kestra/commit/625135959))
- Add a test for firefox weird wrap ([97d12f9bc](https://github.com/kestra-io/kestra/commit/97d12f9bc))
- **ui:** Properly pass a prop related to saved searches ([594d00516](https://github.com/kestra-io/kestra/commit/594d00516))
- **core:** Small perf improvements to MapUtils ([5a4620439](https://github.com/kestra-io/kestra/commit/5a4620439))
- **ui:** Show each plugin deprecation warning in new line ([#6839](https://github.com/kestra-io/kestra/pull/6839))
- **translations:** Auto generate values for languages other than english ([52159ee64](https://github.com/kestra-io/kestra/commit/52159ee64))
- **ui:** Amend color of the input length counter ([#6990](https://github.com/kestra-io/kestra/pull/6990))
- **ui:** Enable command palette for monaco editor ([#6944](https://github.com/kestra-io/kestra/pull/6944))
- **translations:** Auto generate values for languages other than english ([fff8d630c](https://github.com/kestra-io/kestra/commit/fff8d630c))
- **translations:** Auto generate values for languages other than english ([6ba71712a](https://github.com/kestra-io/kestra/commit/6ba71712a))
- **ui:** Add skeleton loaders to dashboard cards ([#6602](https://github.com/kestra-io/kestra/pull/6602))
- Add utility script to check for plugin artifacts ([42ad09d79](https://github.com/kestra-io/kestra/commit/42ad09d79))
- **translations:** Auto generate values for languages other than english ([a9042fb27](https://github.com/kestra-io/kestra/commit/a9042fb27))
- **ui:** Improve the example for not condition ([#6820](https://github.com/kestra-io/kestra/pull/6820))
- **ui:** Update the visual of no data component ([#7179](https://github.com/kestra-io/kestra/pull/7179))
- **ui:** Improve the states options list inside filter values ([#7176](https://github.com/kestra-io/kestra/pull/7176))
- **translations:** Auto generate values for languages other than english ([86f3acace](https://github.com/kestra-io/kestra/commit/86f3acace))
- **ui:** Rename advanced properties to other in no code ([#7189](https://github.com/kestra-io/kestra/pull/7189))
- **translations:** Auto generate values for languages other than english ([e4973c331](https://github.com/kestra-io/kestra/commit/e4973c331))
- **ui:** Rename advanced properties to other in no code ([#7190](https://github.com/kestra-io/kestra/pull/7190))
- **translations:** Auto generate values for languages other than english ([cb7ed73be](https://github.com/kestra-io/kestra/commit/cb7ed73be))
- **ui:** Remove the option to change editor theme separately ([#7192](https://github.com/kestra-io/kestra/pull/7192))
- **translations:** Remove extra keys from translation files ([#7193](https://github.com/kestra-io/kestra/pull/7193))
- **ui:** Consolidate markdown files ([#7197](https://github.com/kestra-io/kestra/pull/7197))
- **ui:** Replace the visual for no tabs opened on namespace editor ([#7204](https://github.com/kestra-io/kestra/pull/7204))
- **ui:** Re-order the list of optional columns ([#7213](https://github.com/kestra-io/kestra/pull/7213))
- **ui:** Amended global pagination coloring ([#7201](https://github.com/kestra-io/kestra/pull/7201))
- **ui:** Generate random flow ID using combination of animal names and numbers ([#7223](https://github.com/kestra-io/kestra/pull/7223))
- **ui:** Only show warning on bulk execution deletion if nonTerminated is true ([#7211](https://github.com/kestra-io/kestra/pull/7211))
- **ui:** Show executions per namespace only if there are 2 or more items for chart ([#7216](https://github.com/kestra-io/kestra/pull/7216))
- **translations:** Auto generate values for languages other than english ([440faa7cd](https://github.com/kestra-io/kestra/commit/440faa7cd))
- **ui:** Initial work on filter persistency ([#7234](https://github.com/kestra-io/kestra/pull/7234))
- **ui:** Check for missing property on update metadata ([e335b76b3](https://github.com/kestra-io/kestra/commit/e335b76b3))
- Update theme colors ([c31609a12](https://github.com/kestra-io/kestra/commit/c31609a12))
- **ui:** Align chart duration label with switch toggle ([#7259](https://github.com/kestra-io/kestra/pull/7259))
- **ui:** Align chart duration label with switch toggle ([#7258](https://github.com/kestra-io/kestra/pull/7258))
- **ui:** Tweak the video container ratio in the docs sidebar ([#7260](https://github.com/kestra-io/kestra/pull/7260))
- **translations:** Auto generate values for languages other than english ([e0f4ab735](https://github.com/kestra-io/kestra/commit/e0f4ab735))
- **ui:** Disable saving flow actions if there are errors ([#7278](https://github.com/kestra-io/kestra/pull/7278))
- **ui:** Improve flow description coloring ([#7282](https://github.com/kestra-io/kestra/pull/7282))
- **ui:** Make action columns always visible on executions and flows ([#7291](https://github.com/kestra-io/kestra/pull/7291))
- **core:** Rename fileEmpty Pebble function to isFileEmpty ([8de839f32](https://github.com/kestra-io/kestra/commit/8de839f32))
- **core:** Refactor file related Pebble function to share code ([f599f2575](https://github.com/kestra-io/kestra/commit/f599f2575))
- Remove some compilation warnings ([9505c48e5](https://github.com/kestra-io/kestra/commit/9505c48e5))
- **ui:** Improve styling of main filter tags ([#7305](https://github.com/kestra-io/kestra/pull/7305))
- **ui:** Introduce filters bar to flow triggers page ([#7292](https://github.com/kestra-io/kestra/pull/7292))
- **ui:** Improve the doughnut chart legend ([#7321](https://github.com/kestra-io/kestra/pull/7321))
- **translations:** Amend theme key ([#7356](https://github.com/kestra-io/kestra/pull/7356))
- **ui:** Add shadows to main charts ([#7314](https://github.com/kestra-io/kestra/pull/7314))
- **ui:** Add validation messages for custom dashboard crud actions ([#7367](https://github.com/kestra-io/kestra/pull/7367))
- **ui:** Add link to filtered triggers page from backfill dialog ([#7380](https://github.com/kestra-io/kestra/pull/7380))
- **ui:** Include autocompletion shortcut in the preview list ([#7384](https://github.com/kestra-io/kestra/pull/7384))
- **ui:** Improve breadcrumbs on namespace view ([#7386](https://github.com/kestra-io/kestra/pull/7386))
- **ui:** Improve the labels behavior ([#7397](https://github.com/kestra-io/kestra/pull/7397))
- **ui:** Improve colors of filter dropdown selector ([#7403](https://github.com/kestra-io/kestra/pull/7403))
- **ui:** Vertically center all elements in table rows ([#7372](https://github.com/kestra-io/kestra/pull/7372))
- **ui:** Make import flows button be a secondary one, styling-wise ([#7405](https://github.com/kestra-io/kestra/pull/7405))
- **ui:** Improve execution outputs section ([#7377](https://github.com/kestra-io/kestra/pull/7377))
- **ui:** Improve filter parameters decoding for absolute date ([#7409](https://github.com/kestra-io/kestra/pull/7409))
- **ui:** Improved Logs empty page ([#7415](https://github.com/kestra-io/kestra/pull/7415))
- **ui:** Amend namespace flow creation label ([#7443](https://github.com/kestra-io/kestra/pull/7443))
- **ui:** Add missing translations ([#7444](https://github.com/kestra-io/kestra/pull/7444))
- **ui:** Add arrows to namespace listing ([#7448](https://github.com/kestra-io/kestra/pull/7448))
- **ui:** Disable click on search button if filtering is automatic ([#7454](https://github.com/kestra-io/kestra/pull/7454))
- **ui:** Remove obsolete props ([#7487](https://github.com/kestra-io/kestra/pull/7487))
- **ui:** Improve styling of editor file tree ([#7420](https://github.com/kestra-io/kestra/pull/7420))
- **translations:** Add missing key/value pairs ([#7492](https://github.com/kestra-io/kestra/pull/7492))
- **ui:** Amend margins of EE locked pages ([#7446](https://github.com/kestra-io/kestra/pull/7446))
- **ui:** Simplify query search with spaces inside ([#7404](https://github.com/kestra-io/kestra/pull/7404))
- **ui:** Improve scope type filters ([#7504](https://github.com/kestra-io/kestra/pull/7504))
- **ui:** Add translation key/value pairs ([#7509](https://github.com/kestra-io/kestra/pull/7509))
- **ui:** Improve the scope of translations ([#7505](https://github.com/kestra-io/kestra/pull/7505))
- **ui:** Restore automatic scroll to bottom on logs ([#7365](https://github.com/kestra-io/kestra/pull/7365))
- **ui:** Prevent sending random strings as child filter values ([#7526](https://github.com/kestra-io/kestra/pull/7526))
- **ui:** Purge empty labels on execution ([#7527](https://github.com/kestra-io/kestra/pull/7527))
- **ui:** Use system namespace label from configs ([cf635058c](https://github.com/kestra-io/kestra/commit/cf635058c))
- **ui:** Prevent system labels to be shown in set labels dialog ([#7539](https://github.com/kestra-io/kestra/pull/7539))
- **core:** Move run context property validation to the run context ([8a26fdd83](https://github.com/kestra-io/kestra/commit/8a26fdd83))
- Add wiremock and update tests ([04c4916ac](https://github.com/kestra-io/kestra/commit/04c4916ac))
- **ui:** Respect default execution tab settings field when opening single execution ([#7576](https://github.com/kestra-io/kestra/pull/7576))
- **ui:** Remove background and check mark from selected filters dropdown list ([#7583](https://github.com/kestra-io/kestra/pull/7583))
- Introduce Devcontainer setup ([#7507](https://github.com/kestra-io/kestra/pull/7507))
- **translations:** Standalone action for translations ([#7597](https://github.com/kestra-io/kestra/pull/7597))
- **translations:** Localize to languages other than English ([#7605](https://github.com/kestra-io/kestra/pull/7605))
- **translations:** Localize to languages other than English " ([#7605](https://github.com/kestra-io/kestra/pull/7605), [#7609](https://github.com/kestra-io/kestra/pull/7609))
- **translations:** Localize to languages other than English ([#7610](https://github.com/kestra-io/kestra/pull/7610))
- **translations:** Localize to languages other than English ([#7613](https://github.com/kestra-io/kestra/pull/7613))
- **translations:** Localize to languages other than English ([#7618](https://github.com/kestra-io/kestra/pull/7618))
- **ui:** Improve label for text search in filters section ([#7631](https://github.com/kestra-io/kestra/pull/7631))
- **translations:** Localize to languages other than English ([#7633](https://github.com/kestra-io/kestra/pull/7633))
- **ui:** Remove crud details from execution overview ([#7634](https://github.com/kestra-io/kestra/pull/7634))
- **ui:** Improve empty state of the namespace files editor ([#7495](https://github.com/kestra-io/kestra/pull/7495))
- **translations:** Localize to languages other than English ([#7635](https://github.com/kestra-io/kestra/pull/7635))
- **core:** Eval value property once for flowable task Switch ([bfd82e0b5](https://github.com/kestra-io/kestra/commit/bfd82e0b5))
- **ui:** Improve the topology tooltip label for adding task button ([#7656](https://github.com/kestra-io/kestra/pull/7656))
- **ui:** Properly sanitize markdown content before rendering ([#7662](https://github.com/kestra-io/kestra/pull/7662))
- **ui:** Make sure chart stacks are following the same order every time ([#7664](https://github.com/kestra-io/kestra/pull/7664))
- **ui:** Properly sanitize markdown content before rendering ([#7697](https://github.com/kestra-io/kestra/pull/7697))
- **ui:** Auto expand first element in execution overview cascaders ([#7715](https://github.com/kestra-io/kestra/pull/7715))
- **core:** Make registry unregister usable with immutable list ([9a56b763f](https://github.com/kestra-io/kestra/commit/9a56b763f))
- **ui:** Properly sanitize markdown content before rendering ([#7724](https://github.com/kestra-io/kestra/pull/7724))
- **ui:** Uniforming empty state for components ([#7737](https://github.com/kestra-io/kestra/pull/7737))
- **translations:** Localize to languages other than English ([#7739](https://github.com/kestra-io/kestra/pull/7739))
- **ui:** Use uniformed pagination component for custom dashboard tables ([#7744](https://github.com/kestra-io/kestra/pull/7744))
- **translations:** Localize to languages other than English ([#7746](https://github.com/kestra-io/kestra/pull/7746))
- **ui:** Remove single empty space between label key and value so it can be copied ([#7774](https://github.com/kestra-io/kestra/pull/7774))
- **ui:** Re-order namespace tabs ([#7778](https://github.com/kestra-io/kestra/pull/7778))
- **translations:** Localize to languages other than English ([#7780](https://github.com/kestra-io/kestra/pull/7780))
- **ui:** Respect line numbers prop as part of editor options ([#7781](https://github.com/kestra-io/kestra/pull/7781))
- **core:** Disable OTLP metrics on tests ([c60676052](https://github.com/kestra-io/kestra/commit/c60676052))
- Update ui-libs ([14ff4438f](https://github.com/kestra-io/kestra/commit/14ff4438f))
- **ui:** Add the ability to change word wrap and to copy the preview output content ([#7801](https://github.com/kestra-io/kestra/pull/7801))
- **translations:** Localize to languages other than English ([#7803](https://github.com/kestra-io/kestra/pull/7803))
- **translations:** Localize to languages other than English ([#7863](https://github.com/kestra-io/kestra/pull/7863))
- **ui:** Re-organize visuals for empty state component ([#7866](https://github.com/kestra-io/kestra/pull/7866))
- **ui:** Prevent node state history to be shown if there is no date present ([#7867](https://github.com/kestra-io/kestra/pull/7867))
- **core:** Add PluginVersioning interface and version for TaskRunner ([bed11f154](https://github.com/kestra-io/kestra/commit/bed11f154))
- **ui:** Re-organize visuals for empty state component ([#7875](https://github.com/kestra-io/kestra/pull/7875))
- **ui:** Complete refactor of yaml utils ([#7888](https://github.com/kestra-io/kestra/pull/7888))
- **ui:** Create flow button on welcome page to start product tour ([#7906](https://github.com/kestra-io/kestra/pull/7906))
- **translations:** Localize to languages other than English ([#7908](https://github.com/kestra-io/kestra/pull/7908))
- **ui:** Show loading skeletons on dashboard ([#7417](https://github.com/kestra-io/kestra/pull/7417))
- **ui:** Use the correct shadow on charts ([#7752](https://github.com/kestra-io/kestra/pull/7752))
- **ui:** Change display on gantt page for created & queued executions ([#7706](https://github.com/kestra-io/kestra/pull/7706))
- **ui:** Improve charts horizontal scrollbar ([#7508](https://github.com/kestra-io/kestra/pull/7508))
- **translations:** Localize to languages other than English ([#7909](https://github.com/kestra-io/kestra/pull/7909))
- **core:** Merge outputs only when necessary ([355e24c9d](https://github.com/kestra-io/kestra/commit/355e24c9d))
- **ui:** Properly sanitize execution errors markdown content before rendering ([#7914](https://github.com/kestra-io/kestra/pull/7914))
- **translations:** Localize to languages other than English ([#7915](https://github.com/kestra-io/kestra/pull/7915))
- **translations:** Localize to languages other than English ([#7918](https://github.com/kestra-io/kestra/pull/7918))
- **translations:** Localize to languages other than English ([#7929](https://github.com/kestra-io/kestra/pull/7929))
- **ui:** Remove the flow topology control button from image export ([#7937](https://github.com/kestra-io/kestra/pull/7937))
- **ui:** Introduce a refresh functionality to execution logs page ([#7946](https://github.com/kestra-io/kestra/pull/7946))
- Add jattach into our Docker image ([fe944ccc5](https://github.com/kestra-io/kestra/commit/fe944ccc5))
- Add GraalVM plugin ([43f1374aa](https://github.com/kestra-io/kestra/commit/43f1374aa))
- **ui:** Removing dynamic section of collapsible plugin properties ([#8008](https://github.com/kestra-io/kestra/pull/8008))
- **ui:** Highlight first item in global search bar autocomplete ([#8009](https://github.com/kestra-io/kestra/pull/8009))
- Refactor StorageInterfaceFactory to be a bean ([fe7c14c04](https://github.com/kestra-io/kestra/commit/fe7c14c04))
- **ui:** Add anchors to plugin documentation ([#8014](https://github.com/kestra-io/kestra/pull/8014))
- **translations:** Localize to languages other than English ([#8013](https://github.com/kestra-io/kestra/pull/8013))
- **ui:** Limit flow run dialog maximum height ([#7938](https://github.com/kestra-io/kestra/pull/7938))
- **ci:** Lower build-artifacts workflow so github release can use it ([2a002e953](https://github.com/kestra-io/kestra/commit/2a002e953))
- Upgrade to version 'v0.22.0-rc1-SNAPSHOT' ([8617eb0c7](https://github.com/kestra-io/kestra/commit/8617eb0c7))
- **ci:** Pass plugin version to docker workflow ([771e841d7](https://github.com/kestra-io/kestra/commit/771e841d7))
- **translations:** Localize to languages other than English ([#8071](https://github.com/kestra-io/kestra/pull/8071))
- **ui:** Improve saved search filtering functionality ([#8073](https://github.com/kestra-io/kestra/pull/8073))
- **ui:** Make app & dashboard editors re-sizable ([#8096](https://github.com/kestra-io/kestra/pull/8096))
- **ui:** Include labels of saved search filter on page reload ([#8099](https://github.com/kestra-io/kestra/pull/8099))
- **ui:** Pass custom height property to execution output debug editors ([#8100](https://github.com/kestra-io/kestra/pull/8100))
- **ui:** Handle editor blueprint loading problem ([#8113](https://github.com/kestra-io/kestra/pull/8113))
- **ui:** Amend file tree context menu link colors ([#8123](https://github.com/kestra-io/kestra/pull/8123))
- **ui:** Add padlock icon to secrets menu item ([#8129](https://github.com/kestra-io/kestra/pull/8129))
- Upgrade to version 'v0.22.0-rc2-SNAPSHOT' ([a88470886](https://github.com/kestra-io/kestra/commit/a88470886))
- **ui:** Show blueprint `id` field in case of missing title ([#8154](https://github.com/kestra-io/kestra/pull/8154))
- Disable tests that are too flaky ([822a3b438](https://github.com/kestra-io/kestra/commit/822a3b438))
- Upgrade to v0.22.0-rc3-SNAPSHOT ([08579cf55](https://github.com/kestra-io/kestra/commit/08579cf55))
- Version v0.22.0-rc4-SNAPSHOT ([ed58b7b5b](https://github.com/kestra-io/kestra/commit/ed58b7b5b))
- Upgrade to v0.22.0 ([c5f2901f7](https://github.com/kestra-io/kestra/commit/c5f2901f7))
### ✅ Tests
- **webserver:** Flaky ExecutionControllerTest for kill ([#7368](https://github.com/kestra-io/kestra/pull/7368))
### 🤖 CI
- Update workflow docker ([84a30d400](https://github.com/kestra-io/kestra/commit/84a30d400))
- Update workflow docker ([f96cbf1ad](https://github.com/kestra-io/kestra/commit/f96cbf1ad))
- Fix workflow docker ([fde739a3b](https://github.com/kestra-io/kestra/commit/fde739a3b))
- Fix workflow docker for all plugins ([d4d8e326e](https://github.com/kestra-io/kestra/commit/d4d8e326e))
- Fix release workflows ([e2b67f253](https://github.com/kestra-io/kestra/commit/e2b67f253))
- Cleanup ([d657f4827](https://github.com/kestra-io/kestra/commit/d657f4827))
- **docker:** Fixed version of qemu ([49fe36250](https://github.com/kestra-io/kestra/commit/49fe36250))
- **docker:** Revert fixed qemu version ([cfc0c9f9f](https://github.com/kestra-io/kestra/commit/cfc0c9f9f))
- **publish-docker:** Attempts with ubuntu 0.20 ([#7431](https://github.com/kestra-io/kestra/pull/7431))
- **publish-docker:** Attempts with command on qemu docker image ([a89ef7158](https://github.com/kestra-io/kestra/commit/a89ef7158))
- **test:** Force test if ref is a tag ([a020e3f3a](https://github.com/kestra-io/kestra/commit/a020e3f3a))
### ⚠️ Breaking Changes
### EE: Default tenant deprecation
Multi-tenancy was introduced in Kestra 0.13. For backward compatibility with older versions (≤0.12), you could use the concept of a default tenant, which imitated the multitenancy feature with the so-called “null”-tenant. One and a half years later, in Kestra 0.22, we are deprecating the default tenant functionality and plan to remove it in the future. We will provide a detailed migration guide for all customers who still use the default tenant. Until then, you can continue using `defaultTenant` by setting the corresponding configuration flag to `true`:
```yaml
kestra:
tenants:
enabled: true
defaultTenant: true
```
Note that in Kestra 0.22 and higher, `defaultTenant` is NOT enabled by default, so you must explicitly set that configuration option to `true` to keep using the default tenant.
Also, keep in mind that prior to Kestra 0.22, `tenants.enabled` was by default set to `false` and now they are enabled.
### EE: Azure log exporter
The log exporter plugin for Azure `io.kestra.plugin.ee.azure.LogExporter`, introduced in Kestra 0.21, got split into two `io.kestra.plugin.ee.azure.monitor.LogExporter` and `io.kestra.plugin.ee.azure.storage.LogExporter` to reflect that you can now export your log to Azure either using Azure Monitor or using Azure Blob Storage.
### EE: Enterprise Edition API changes
Before Kestra 0.22, the Service Account name had to be globally unique within the instance. As a result, attempting to create a Service Account `cicd` in a `dev` tenant would raise an error `"Username already exists"` if your `prod` tenant also has a Service Account with the name `cicd`.
To support multiple service accounts with the same name, weve renamed the `username` property to `name` in the JSON payload for the following REST API endpoint: `POST /api/v1{/tenant}/users/service-accounts{/id}`.
### EE: Too many failed login attempts now lock the account
To improve the security of your Enterprise Edition instance, we now automatically lock user accounts after a `threshold` number of failed login attempts made within `monitoring-window`. Both, the number of failed attempts, the monitoring window to track consecutive number of failed attempts and (soon) the duration of how long the user remains locked are configurable.
```yaml
security:
login:
failed-attempts:
threshold: 10
monitoring-window: PT15M # period to count failed attempts
# lockout-duration: PT24H # period the account remains locked — will be added in the next release
```
Note that this change is only relevant for users who leverage LDAP or basic authentication (not relevant for SSO-users). Superadmin can unlock the user manually by resetting their password from the user's detail page.
### Change to `readinessProbe` and `livenessProbe`
Before [this PR](https://github.com/kestra-io/helm-charts/pull/62/files), both probes pointed to `/health`. This caused Kubernetes to restart the pod when an external component was unavailable. To resolve this, we updated the value file to configure the liveness and readiness probes to use the health paths recommended by Micronaut:
- Liveness probe now points to `/health/liveness`
- Readiness probe now points to `/health/readiness`.
### Plugins using the `version` property
With the introduction of plugin versioning, we reserve the `version` keyword for internal use, allowing us to specify the Kestra plugin version. As a result, weve renamed the `version` property for a few plugins that already used it, incl. the following:
- `io.kestra.plugin.elasticsearch.Get` → renamed as `docVersion`
- `io.kestra.plugin.opensearch.Get` → renamed as `docVersion`
- `io.kestra.plugin.mqtt.RealtimeTrigger` → renamed as `mqttVersion`
- `io.kestra.plugin.mqtt.Trigger` → renamed as `mqttVersion`
- `io.kestra.plugin.serdes.parquet.IonToParquet` → renamed as `parquetVersion`
Note that your **custom plugins** will need an equivalent approach of renaming any plugin that uses the `version` property, as this is now a core property reserved for plugin management. If any of your custom plugins rely on a `version` property, they won't compile anymore unless you rename that property to a different name.
### Change in the default value for the `kv()` function
Before Kestra 0.22, the `kv()` function had the property `errorOnMissing` set to `false` by default. We changed it to be `true` by default. If you want to keep the previous behavior of returning `null` without an error when attempting to fetch non-existing KV-pairs, use the syntax `"{{ kv('NON_EXISTING_KV_PAIR', errorOnMissing=false) }}"`.
### ❤️ Contributors
- Loïc Mathieu ([@loicmathieu](https://github.com/loicmathieu))
- Barthélémy Ledoux <ledouxb@me.com>
- Nicolas K. <nk_mikmak@hotmail.com>
- Miloš Paunović ([@MilosPaunovic](https://github.com/MilosPaunovic))
- Florian Hussonnois ([@fhussonnois](https://github.com/fhussonnois))
- Brian.mulier ([@brian-mulier-p](https://github.com/brian-mulier-p))
- Roman Acevedo <roman.acevedo62@gmail.com>
- YannC <ycoornaert@kestra.io>
- Yuri <1969yuri1969@gmail.com>
- AJ Emerich <aemerich@kestra.io>
- Satvik Kushwaha ([@satvik2131](https://github.com/satvik2131))
- BenjoEK1337 ([@benjoEK1337](https://github.com/benjoEK1337))
- Piyush Bhaskar ([@Piyush-r-bhaskar](https://github.com/Piyush-r-bhaskar))
- Bart Ledoux <bledoux@kestra.io>
- Yuri1969 <1969yuri1969@gmail.com>
- Ludovic DEHON ([@tchiotludo](https://github.com/tchiotludo))
- Rajatsingh23 ([@rajatsingh23](https://github.com/rajatsingh23))
- Ash ([@Alessandra005](https://github.com/Alessandra005))
- Will Russell ([@wrussell1999](https://github.com/wrussell1999))
- Malay Dewangan ([@Malaydewangan09](https://github.com/Malaydewangan09))
- Anna Geller <anna.m.geller@gmail.com>
- Shruti Mantri <shruti1810@gmail.com>
- NKwiatkowski <nkwiatkowski@kestra.io>
- MilosPaunovic ([@MilosPaunovic](https://github.com/MilosPaunovic))
- Harshit Dhaduk <harshitdhaduk5831@gmail.com>
- Tanvir Ahmed ([@m-t-a97](https://github.com/m-t-a97))
- Malaydewangan09 <malaydewangan310@gmail.com>
- Đỗ Trọng Hải ([@hainenber](https://github.com/hainenber))
- AeSouid <aesouid@kestra.io>
- Adam Hirshson ([@Ahirshson02](https://github.com/Ahirshson02))
- Mathieu Gabelle ([@mgabelle](https://github.com/mgabelle))
- Aabhas Sao ([@aabhas-sao](https://github.com/aabhas-sao))
- Laibrez <laishabj@gmail.com>
- Eduardo Goncalvez ([@Edugre](https://github.com/Edugre))
- Shamar ([@Shamar12334](https://github.com/Shamar12334))
- Pravesh-Sudha ([@Pravesh-Sudha](https://github.com/Pravesh-Sudha))
- ByronBlaze <pg903@snu.edu.in>
- GitHub Action ([@Github-Action-Bot](https://github.com/Github-Action-Bot))
- Dheeraj_R_Gowda ([@Dheerajr444](https://github.com/Dheerajr444))
- 咬轮猫 <10928033@qq.com>
- Amartknez <amartknez98@gmail.com>
- Malay.worldref@gmail.com <malay@Malays-MacBook-Air.local>
- Karthik73965 ([@Karthik73965](https://github.com/Karthik73965))
- Brian-mulier-p ([@brian-mulier-p](https://github.com/brian-mulier-p))

8
Dockerfile.pr Normal file
View File

@@ -0,0 +1,8 @@
ARG KESTRA_DOCKER_BASE_VERSION=develop
FROM kestra/kestra:$KESTRA_DOCKER_BASE_VERSION
USER root
COPY --chown=kestra:kestra docker /
USER kestra

View File

@@ -17,6 +17,8 @@ VERSION := $(shell ./gradlew properties -q | awk '/^version:/ {print $$2}')
GIT_COMMIT := $(shell git rev-parse --short HEAD)
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
DATE := $(shell date --rfc-3339=seconds)
PLUGIN_GIT_DIR ?= $(pwd)/..
PLUGIN_JARS_DIR ?= $(pwd)/locals/plugins
DOCKER_IMAGE = kestra/kestra
DOCKER_PATH = ./
@@ -67,6 +69,7 @@ install-plugins:
[[ $$plugin =~ ^#.* ]] && continue; \
PLUGINS_PATH="${KESTRA_INSTALL_DIR}/plugins"; \
CURRENT_PLUGIN=$${plugin/LATEST/"${VERSION}"}; \
CURRENT_PLUGIN=$$(echo $$CURRENT_PLUGIN | cut -d':' -f2-); \
PLUGIN_FILE="$$PLUGINS_PATH/$$(echo $$CURRENT_PLUGIN | awk -F':' '{print $$2"-"$$3}').jar"; \
echo "Installing Kestra plugin $$CURRENT_PLUGIN > ${KESTRA_INSTALL_DIR}/plugins"; \
if [ -f "$$PLUGIN_FILE" ]; then \
@@ -86,7 +89,7 @@ build-docker: build-exec
--compress \
--rm \
-f ./Dockerfile \
--build-arg="APT_PACKAGES=python3 python3-venv python-is-python3 python3-pip nodejs npm curl zip unzip" \
--build-arg="APT_PACKAGES=python3 python3-venv python-is-python3 python3-pip nodejs npm curl zip unzip jattach" \
--build-arg="PYTHON_LIBRARIES=kestra" \
-t ${DOCKER_IMAGE}:${VERSION} ${DOCKER_PATH} || exit 1 ;
@@ -173,3 +176,72 @@ start-standalone-postgres: kill --private-start-standalone-postgres health
start-standalone-local: kill --private-start-standalone-local health
#checkout all plugins
clone-plugins:
@echo "Using PLUGIN_GIT_DIR: $(PLUGIN_GIT_DIR)"
@mkdir -p "$(PLUGIN_GIT_DIR)"
@echo "Fetching repository list from GitHub..."
@REPOS=$(gh repo list kestra-io -L 1000 --json name | jq -r .[].name | sort | grep "^plugin-") \
for repo in $$REPOS; do \
if [[ $$repo == plugin-* ]]; then \
if [ -d "$(PLUGIN_GIT_DIR)/$$repo" ]; then \
echo "Skipping: $$repo (Already cloned)"; \
else \
echo "Cloning: $$repo using SSH..."; \
git clone "git@github.com:kestra-io/$$repo.git" "$(PLUGIN_GIT_DIR)/$$repo"; \
fi; \
fi; \
done
@echo "Done!"
# Update all plugins jar
build-plugins:
@echo "🔍 Scanning repositories in '$(PLUGIN_GIT_DIR)'..."
@MASTER_REPOS=(); \
for repo in "$(PLUGIN_GIT_DIR)"/*; do \
if [ -d "$$repo/.git" ]; then \
branch=$$(git -C "$$repo" rev-parse --abbrev-ref HEAD); \
if [[ "$$branch" == "master" || "$$branch" == "main" ]]; then \
MASTER_REPOS+=("$$repo"); \
else \
echo "❌ Skipping: $$(basename "$$repo") (Not on master or main branch)"; \
fi; \
fi; \
done; \
\
# === STEP 2: Update Repos on Master or Main Branch === \
echo "⬇️ Updating repositories on master or main branch..."; \
for repo in "$${MASTER_REPOS[@]}"; do \
echo "🔄 Updating: $$(basename "$$repo")"; \
git -C "$$repo" pull --rebase; \
done; \
\
# === STEP 3: Build with Gradle === \
echo "⚙️ Building repositories with Gradle..."; \
for repo in "$${MASTER_REPOS[@]}"; do \
echo "🔨 Building: $$(basename "$$repo")"; \
gradle clean build -x test shadowJar -p "$$repo"; \
done; \
\
# === STEP 4: Copy Latest JARs (Ignoring javadoc & sources) === \
echo "📦 Organizing built JARs..."; \
mkdir -p "$(PLUGIN_JARS_DIR)"; \
for repo in "$${MASTER_REPOS[@]}"; do \
REPO_NAME=$$(basename "$$repo"); \
\
JARS=($$(find "$$repo" -type f -name "plugin-*.jar" ! -name "*-javadoc.jar" ! -name "*-sources.jar")); \
if [ $${#JARS[@]} -eq 0 ]; then \
echo "⚠️ Warning: No valid plugin JARs found for $$REPO_NAME"; \
continue; \
fi; \
\
for jar in "$${JARS[@]}"; do \
JAR_NAME=$$(basename "$$jar"); \
BASE_NAME=$$(echo "$$JAR_NAME" | sed -E 's/(-[0-9]+.*)?\.jar$$//'); \
rm -f "$(PLUGIN_JARS_DIR)/$$BASE_NAME"-[0-9]*.jar; \
cp "$$jar" "$(PLUGIN_JARS_DIR)/"; \
echo "✅ Copied JAR: $$JAR_NAME"; \
done; \
done; \
\
echo "🎉 Done! All master and main branch repos updated, built, and organized."

View File

@@ -24,6 +24,13 @@
<a href="https://www.youtube.com/@kestra-io"><img height="25" src="https://kestra.io/youtube.svg" alt="youtube" /></a> &nbsp;
</p>
<p align="center">
<a href="https://trendshift.io/repositories/2714" target="_blank">
<img src="https://trendshift.io/api/badge/repositories/2714" alt="kestra-io%2Fkestra | Trendshift" width="250" height="55"/>
</a>
<a href="https://www.producthunt.com/posts/kestra?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-kestra" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=612077&theme=light&period=daily&t=1740737506162" alt="Kestra - All&#0045;in&#0045;one&#0032;automation&#0032;&#0038;&#0032;orchestration&#0032;platform | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
</p>
<p align="center">
<a href="https://go.kestra.io/video/product-overview" target="_blank">
<img src="https://kestra.io/startvideo.png" alt="Get started in 4 minutes with Kestra" width="640px" />
@@ -47,7 +54,7 @@ Kestra is an open-source, event-driven orchestration platform that makes both **
- **Structure & Resilience**: tame chaos and bring resilience to your workflows with **namespaces**, **labels**, **subflows**, **retries**, **timeout**, **error handling**, **inputs**, **outputs** that generate artifacts in the UI, **variables**, **conditional branching**, **advanced scheduling**, **event triggers**, **backfills**, **dynamic tasks**, **sequential and parallel tasks**, and skip tasks or triggers when needed by setting the flag `disabled` to `true`.
🧑‍💻 The YAML definition gets automatically adjusted any time you make changes to a workflow from the UI or via an API call. Therefore, the orchestration logic is **always managed declaratively in code**, even if you modify your workflows in other ways (UI, CI/CD, Terraform, API calls).
🧑‍💻 The YAML definition gets automatically adjusted any time you make changes to a workflow from the UI or via an API call. Therefore, the orchestration logic is **always managed declaratively in code**, even if you modify your workflows in other ways (UI, CI/CD, Terraform, API calls).
<p align="center">
@@ -74,6 +81,27 @@ docker run --pull=always --rm -it -p 8080:8080 --user=root \
-v /tmp:/tmp kestra/kestra:latest server local
```
If you're on Windows and use PowerShell:
```powershell
docker run --pull=always --rm -it -p 8080:8080 --user=root `
-v "/var/run/docker.sock:/var/run/docker.sock" `
-v "C:/Temp:/tmp" kestra/kestra:latest server local
```
If you're on Windows and use Command Prompt (CMD):
```cmd
docker run --pull=always --rm -it -p 8080:8080 --user=root ^
-v "/var/run/docker.sock:/var/run/docker.sock" ^
-v "C:/Temp:/tmp" kestra/kestra:latest server local
```
If you're on Windows and use WSL (Linux-based environment in Windows):
```bash
docker run --pull=always --rm -it -p 8080:8080 --user=root \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "C:/Temp:/tmp" kestra/kestra:latest server local
```
Check our [Installation Guide](https://kestra.io/docs/installation) for other deployment options (Docker Compose, Podman, Kubernetes, AWS, GCP, Azure, and more).
Access the Kestra UI at [http://localhost:8080](http://localhost:8080) and start building your first flow!
@@ -178,7 +206,7 @@ Stay connected and get support:
We welcome contributions of all kinds!
- **Report Issues:** Found a bug or have a feature request? Open an [issue on GitHub](https://github.com/kestra-io/kestra/issues).
- **Contribute Code:** Check out our [Contributor Guide](https://kestra.io/docs/getting-started/contributing) for initial guidelines, and explore our [good first issues](https://go.kestra.io/contribute) for beginner-friendly tasks to tackle first.
- **Contribute Code:** Check out our [Contributor Guide](https://kestra.io/docs/getting-started/contributing) for initial guidelines, and explore our [good first issues](https://go.kestra.io/contributing) for beginner-friendly tasks to tackle first.
- **Develop Plugins:** Build and share plugins using our [Plugin Developer Guide](https://kestra.io/docs/plugin-developer-guide/).
- **Contribute to our Docs:** Contribute edits or updates to keep our [documentation](https://github.com/kestra-io/docs) top-notch.

33
SECURITY.md Normal file
View File

@@ -0,0 +1,33 @@
# Security Policy
## Supported Versions
We provide security updates for the following versions of Kestra:
- The `latest` release
- Up to two previous minor versions released as a backport upon customer request.
If you are using an unsupported version, we recommend upgrading to the `latest` version to receive security fixes.
## Reporting a Vulnerability
If you discover a security vulnerability in Kestra, please report it to us privately to ensure a responsible disclosure process. You can contact our security team at:
**security@kestra.io**
### Guidelines for Reporting
- Provide a detailed description of the issue, including steps to reproduce it if possible.
- Do not disclose the vulnerability publicly until we have confirmed and patched the issue.
- If you believe the issue has critical severity, please indicate so in your report to help us prioritize.
## Our Commitment
- We will acknowledge your report within **2 business days**.
- We will work to verify and address the issue as quickly as possible.
- Once the issue is resolved, we will notify you of the fix.
## Acknowledgments
We are happy to credit those who report vulnerabilities responsibly in our release notes, unless you prefer to remain anonymous. If you would like to be acknowledged, please include this in your report.
Thank you for helping to make Kestra more secure!

6
build-and-start-e2e-tests.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env sh
set -e
set -x
echo "Skipping because No E2E tests are available on this release branch"

View File

@@ -16,30 +16,28 @@ plugins {
id "java"
id 'java-library'
id "idea"
id "com.gradleup.shadow" version "8.3.5"
id "com.gradleup.shadow" version "8.3.6"
id "application"
// test
id "com.adarshr.test-logger" version "4.0.0"
id "org.sonarqube" version "5.1.0.4882"
id "org.sonarqube" version "6.0.1.5171"
id 'jacoco-report-aggregation'
// helper
id "com.github.ben-manes.versions" version "0.51.0"
id "com.github.ben-manes.versions" version "0.52.0"
// front
id 'org.siouan.frontend-jdk21' version '9.1.0' apply false
id 'com.github.node-gradle.node' version '7.1.0'
// release
id "io.github.gradle-nexus.publish-plugin" version "2.0.0"
id 'net.researchgate.release' version '3.0.2'
id "com.gorylenko.gradle-git-properties" version "2.4.2"
id 'net.researchgate.release' version '3.1.0'
id "com.gorylenko.gradle-git-properties" version "2.5.0"
id 'signing'
id 'ru.vyarus.pom' version '3.0.0' apply false
id 'ru.vyarus.github-info' version '2.0.0' apply false
id "com.vanniktech.maven.publish" version "0.33.0"
// OWASP dependency check
id "org.owasp.dependencycheck" version "11.1.0" apply false
id "org.owasp.dependencycheck" version "12.1.0" apply false
}
idea {
@@ -74,7 +72,7 @@ dependencies {
**********************************************************************************************************************/
allprojects {
if (it.name != 'platform') {
group "io.kestra"
group = "io.kestra"
java {
sourceCompatibility = targetJavaVersion
@@ -123,6 +121,7 @@ allprojects {
micronaut "io.micronaut.micrometer:micronaut-micrometer-registry-prometheus"
micronaut "io.micronaut:micronaut-http-client"
micronaut "io.micronaut.reactor:micronaut-reactor-http-client"
micronaut "io.micronaut.tracing:micronaut-tracing-opentelemetry-http"
// logs
implementation "org.slf4j:slf4j-api"
@@ -133,6 +132,9 @@ allprojects {
implementation group: 'org.slf4j', name: 'jcl-over-slf4j'
implementation group: 'org.fusesource.jansi', name: 'jansi'
// OTEL
implementation "io.opentelemetry:opentelemetry-exporter-otlp"
// jackson
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind'
@@ -192,24 +194,63 @@ subprojects {
testImplementation 'org.hamcrest:hamcrest'
testImplementation 'org.hamcrest:hamcrest-library'
testImplementation 'org.exparity:hamcrest-date'
testImplementation 'org.assertj:assertj-core'
}
def commonTestConfig = { Test t ->
// set Xmx for test workers
t.maxHeapSize = '4g'
// configure en_US default locale for tests
t.systemProperty 'user.language', 'en'
t.systemProperty 'user.country', 'US'
t.environment 'SECRET_MY_SECRET', "{\"secretKey\":\"secretValue\"}".bytes.encodeBase64().toString()
t.environment 'SECRET_NEW_LINE', "cGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2\nZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZl\neXJsb25n"
t.environment 'SECRET_WEBHOOK_KEY', "secretKey".bytes.encodeBase64().toString()
t.environment 'SECRET_NON_B64_SECRET', "some secret value"
t.environment 'SECRET_PASSWORD', "cGFzc3dvcmQ="
t.environment 'KESTRA_TEST1', "true"
t.environment 'KESTRA_TEST2', "Pass by env"
}
tasks.register('flakyTest', Test) { Test t ->
group = 'verification'
description = 'Runs tests tagged @Flaky but does not fail the build.'
useJUnitPlatform {
includeTags 'flaky'
}
ignoreFailures = true
reports {
junitXml.required = true
junitXml.outputPerTestCase = true
junitXml.mergeReruns = true
junitXml.includeSystemErrLog = true
junitXml.outputLocation = layout.buildDirectory.dir("test-results/flakyTest")
}
commonTestConfig(t)
}
test {
useJUnitPlatform()
useJUnitPlatform {
excludeTags 'flaky'
}
reports {
junitXml.required = true
junitXml.outputPerTestCase = true
junitXml.mergeReruns = true
junitXml.includeSystemErrLog = true
junitXml.outputLocation = layout.buildDirectory.dir("test-results/test")
}
commonTestConfig(it)
maxHeapSize = "4048m"
// configure en_US default locale for tests
systemProperty 'user.language', 'en'
systemProperty 'user.country', 'US'
environment 'SECRET_MY_SECRET', "{\"secretKey\":\"secretValue\"}".bytes.encodeBase64().toString()
environment 'SECRET_NEW_LINE', "cGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2\nZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZleXJsb25ncGFzc3dvcmR2ZXJ5dmVyeXZl\neXJsb25n"
environment 'SECRET_WEBHOOK_KEY', "secretKey".bytes.encodeBase64().toString()
environment 'SECRET_NON_B64_SECRET', "some secret value"
environment 'SECRET_PASSWORD', "cGFzc3dvcmQ="
environment 'KESTRA_TEST1', "true"
environment 'KESTRA_TEST2', "Pass by env"
finalizedBy(tasks.named('flakyTest'))
}
testlogger {
@@ -274,7 +315,7 @@ subprojects {
}
dependencies {
agent "org.aspectj:aspectjweaver:1.9.22.1"
agent "org.aspectj:aspectjweaver:1.9.23"
}
test {
@@ -406,6 +447,7 @@ distTar.dependsOn shadowJar
startScripts.dependsOn shadowJar
startShadowScripts.dependsOn jar
shadowJar.dependsOn 'ui:assembleFrontend'
shadowJar.dependsOn jar
/**********************************************************************************************************************\
* Executable Jar
@@ -467,114 +509,169 @@ tasks.register('runLocal', JavaExec) {
/**********************************************************************************************************************\
* Publish
**********************************************************************************************************************/
nexusPublishing {
repositoryDescription = "${project.group}:${rootProject.name}:${project.version}"
useStaging = !project.version.endsWith("-SNAPSHOT")
repositories {
sonatype {
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
}
subprojects {subProject ->
subprojects {
apply plugin: "maven-publish"
apply plugin: 'signing'
apply plugin: 'ru.vyarus.pom'
apply plugin: 'ru.vyarus.github-info'
if (subProject.name != 'jmh-benchmarks' && subProject.name != rootProject.name) {
apply plugin: 'signing'
apply plugin: "com.vanniktech.maven.publish"
javadoc {
options {
locale = 'en_US'
encoding = 'UTF-8'
addStringOption("Xdoclint:none", "-quiet")
}
}
tasks.register('sourcesJar', Jar) {
dependsOn = [':core:copyGradleProperties']
dependsOn = [':ui:assembleFrontend']
archiveClassifier.set('sources')
from sourceSets.main.allSource
}
sourcesJar.dependsOn ':core:copyGradleProperties'
sourcesJar.dependsOn ':ui:assembleFrontend'
tasks.register('javadocJar', Jar) {
archiveClassifier.set('javadoc')
from javadoc
}
tasks.register('testsJar', Jar) {
group = 'build'
description = 'Build the tests jar'
archiveClassifier.set('tests')
if (sourceSets.matching { it.name == 'test'}) {
from sourceSets.named('test').get().output
}
}
github {
user 'kestra-io'
license 'Apache'
repository 'kestra'
site 'https://kestra.io'
}
maven.pom {
description = 'The modern, scalable orchestrator & scheduler open source platform'
developers {
developer {
id = "tchiotludo"
name = "Ludovic Dehon"
javadoc {
options {
locale = 'en_US'
encoding = 'UTF-8'
addStringOption("Xdoclint:none", "-quiet")
}
}
}
publishing {
publications {
sonatypePublication(MavenPublication) {
version project.version
tasks.register('sourcesJar', Jar) {
dependsOn = [':core:copyGradleProperties']
dependsOn = [':ui:assembleFrontend']
archiveClassifier.set('sources')
from sourceSets.main.allSource
}
sourcesJar.dependsOn ':core:copyGradleProperties'
sourcesJar.dependsOn ':ui:assembleFrontend'
if (project.name.contains('cli')) {
groupId "io.kestra"
artifactId "kestra"
tasks.register('javadocJar', Jar) {
archiveClassifier.set('javadoc')
from javadoc
}
artifact shadowJar
artifact executableJar
} else if (project.name.contains('platform')){
groupId project.group
artifactId project.name
} else {
from components.java
tasks.register('testsJar', Jar) {
group = 'build'
description = 'Build the tests jar'
groupId project.group
artifactId project.name
archiveClassifier.set('tests')
if (sourceSets.matching { it.name == 'test'}) {
from sourceSets.named('test').get().output
}
}
artifact sourcesJar
artifact javadocJar
artifact testsJar
//These modules should not be published
def unpublishedModules = ["jdbc-mysql", "jdbc-postgres", "webserver"]
if (subProject.name in unpublishedModules){
return
}
mavenPublishing {
publishToMavenCentral(true)
signAllPublications()
coordinates(
"${rootProject.group}",
subProject.name == "cli" ? rootProject.name : subProject.name,
"${rootProject.version}"
)
pom {
name = project.name
description = "${project.group}:${project.name}:${rootProject.version}"
url = "https://github.com/kestra-io/${rootProject.name}"
licenses {
license {
name = "The Apache License, Version 2.0"
url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
}
}
developers {
developer {
id = "tchiotludo"
name = "Ludovic Dehon"
email = "ldehon@kestra.io"
}
}
scm {
connection = 'scm:git:'
url = "https://github.com/kestra-io/${rootProject.name}"
}
}
}
}
signing {
// only sign JARs that we publish to Sonatype
required { gradle.taskGraph.hasTask("publishSonatypePublicationPublicationToSonatypeRepository") }
sign publishing.publications.sonatypePublication
}
afterEvaluate {
publishing {
publications {
withType(MavenPublication).configureEach { publication ->
tasks.withType(GenerateModuleMetadata).configureEach {
// Suppression this validation error as we want to enforce the Kestra platform
suppressedValidationErrors.add('enforced-platform')
if (subProject.name == "platform") {
// Clear all artifacts except the BOM
publication.artifacts.clear()
}
}
}
}
}
if (subProject.name == 'cli') {
/* Make sure the special publication is wired *after* every plugin */
subProject.afterEvaluate {
/* 1. Remove the default java component so Gradle stops expecting
the standard cli-*.jar, sources, javadoc, etc. */
components.removeAll { it.name == "java" }
/* 2. Replace the publications artifacts with shadow + exec */
publishing.publications.withType(MavenPublication).configureEach { pub ->
pub.artifacts.clear()
// main shadow JAR built at root
pub.artifact(rootProject.tasks.named("shadowJar").get()) {
extension = "jar"
}
// executable ZIP built at root
pub.artifact(rootProject.tasks.named("executableJar").get().archiveFile) {
classifier = "exec"
extension = "zip"
}
pub.artifact(tasks.named("sourcesJar").get())
pub.artifact(tasks.named("javadocJar").get())
}
/* 3. Disable Gradle-module metadata for this publication to
avoid the “artifact removed from java component” error. */
tasks.withType(GenerateModuleMetadata).configureEach { it.enabled = false }
/* 4. Make every publish task in :cli wait for the two artifacts */
tasks.matching { it.name.startsWith("publish") }.configureEach {
dependsOn rootProject.tasks.named("shadowJar")
dependsOn rootProject.tasks.named("executableJar")
}
}
}
if (subProject.name != 'platform' && subProject.name != 'cli') {
// only if a test source set actually exists (avoids empty artifacts)
def hasTests = subProject.extensions.findByName('sourceSets')?.findByName('test') != null
if (hasTests) {
// wire the artifact onto every Maven publication of this subproject
publishing {
publications {
withType(MavenPublication).configureEach { pub ->
// keep the normal java component + sources/javadoc already configured
pub.artifact(subProject.tasks.named('testsJar').get())
}
}
}
// make sure publish tasks build the tests jar first
tasks.matching { it.name.startsWith('publish') }.configureEach {
dependsOn subProject.tasks.named('testsJar')
}
}
}
tasks.withType(GenerateModuleMetadata).configureEach {
// Suppression this validation error as we want to enforce the Kestra platform
suppressedValidationErrors.add('enforced-platform')
}
}
}
/**********************************************************************************************************************\
* Version
**********************************************************************************************************************/
@@ -589,4 +686,13 @@ release {
git {
requireBranch.set('develop')
}
// Dynamically set properties with default values
failOnSnapshotDependencies = (project.hasProperty('release.failOnSnapshotDependencies')
? project.property('release.failOnSnapshotDependencies').toBoolean()
: true)
pushReleaseVersionBranch = (project.hasProperty('release.pushReleaseVersionBranch')
? project.property('release.pushReleaseVersionBranch').toString()
: null)
}

View File

@@ -12,18 +12,9 @@ dependencies {
implementation 'ch.qos.logback.contrib:logback-json-classic'
implementation 'ch.qos.logback.contrib:logback-jackson'
// plugins
implementation 'org.eclipse.aether:aether-api'
implementation 'org.eclipse.aether:aether-spi'
implementation 'org.eclipse.aether:aether-util'
implementation 'org.eclipse.aether:aether-impl'
implementation 'org.eclipse.aether:aether-connector-basic'
implementation 'org.eclipse.aether:aether-transport-file'
implementation 'org.eclipse.aether:aether-transport-http'
implementation('org.apache.maven:maven-aether-provider') {
// sisu dependency injector is not used
exclude group: 'org.eclipse.sisu'
}
// OTLP metrics
implementation "io.micronaut.micrometer:micronaut-micrometer-registry-otlp"
// aether still use javax.inject
compileOnly 'javax.inject:javax.inject:1'
@@ -43,4 +34,7 @@ dependencies {
implementation project(":storage-local")
implementation project(":webserver")
//test
testImplementation "org.wiremock:wiremock-jetty12"
}

View File

@@ -46,6 +46,13 @@ public abstract class AbstractApiCommand extends AbstractCommand {
@Nullable
private HttpClientConfiguration httpClientConfiguration;
/**
* {@inheritDoc}
*/
protected boolean loadExternalPlugins() {
return false;
}
protected DefaultHttpClient client() throws URISyntaxException {
DefaultHttpClient defaultHttpClient = new DefaultHttpClient(server.toURI(), httpClientConfiguration != null ? httpClientConfiguration : new DefaultHttpClientConfiguration());
MessageBodyHandlerRegistry defaultHandlerRegistry = defaultHttpClient.getHandlerRegistry();

View File

@@ -4,16 +4,17 @@ import ch.qos.logback.classic.LoggerContext;
import com.google.common.collect.ImmutableMap;
import io.kestra.cli.commands.servers.ServerCommandInterface;
import io.kestra.cli.services.StartupHookInterface;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.plugins.PluginManager;
import io.kestra.core.plugins.PluginRegistry;
import io.kestra.webserver.services.FlowAutoLoaderService;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.yaml.YamlPropertySourceLoader;
import io.micronaut.core.annotation.Introspected;
import io.micronaut.http.uri.UriBuilder;
import io.micronaut.management.endpoint.EndpointDefaultConfiguration;
import io.micronaut.runtime.server.EmbeddedServer;
import jakarta.inject.Provider;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.utils.URIBuilder;
import io.kestra.core.utils.Rethrow;
import picocli.CommandLine;
@@ -26,10 +27,13 @@ import java.nio.file.Paths;
import java.text.MessageFormat;
import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Callable;
import jakarta.inject.Inject;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@CommandLine.Command(
@Command(
versionProvider = VersionProvider.class,
mixinStandardHelpOptions = true,
showDefaultValues = true
@@ -38,7 +42,7 @@ import jakarta.inject.Inject;
@Introspected
abstract public class AbstractCommand implements Callable<Integer> {
@Inject
private ApplicationContext applicationContext;
protected ApplicationContext applicationContext;
@Inject
private EndpointDefaultConfiguration endpointConfiguration;
@@ -49,22 +53,28 @@ abstract public class AbstractCommand implements Callable<Integer> {
@Inject
private io.kestra.core.utils.VersionProvider versionProvider;
@Inject
protected Provider<PluginRegistry> pluginRegistryProvider;
@Inject
protected Provider<PluginManager> pluginManagerProvider;
private PluginRegistry pluginRegistry;
@CommandLine.Option(names = {"-v", "--verbose"}, description = "Change log level. Multiple -v options increase the verbosity.", showDefaultValue = CommandLine.Help.Visibility.NEVER)
@Option(names = {"-v", "--verbose"}, description = "Change log level. Multiple -v options increase the verbosity.", showDefaultValue = CommandLine.Help.Visibility.NEVER)
private boolean[] verbose = new boolean[0];
@CommandLine.Option(names = {"-l", "--log-level"}, description = "Change log level (values: ${COMPLETION-CANDIDATES})")
@Option(names = {"-l", "--log-level"}, description = "Change log level (values: ${COMPLETION-CANDIDATES})")
private LogLevel logLevel = LogLevel.INFO;
@CommandLine.Option(names = {"--internal-log"}, description = "Change also log level for internal log")
@Option(names = {"--internal-log"}, description = "Change also log level for internal log")
private boolean internalLog = false;
@CommandLine.Option(names = {"-c", "--config"}, description = "Path to a configuration file")
@Option(names = {"-c", "--config"}, description = "Path to a configuration file")
private Path config = Paths.get(System.getProperty("user.home"), ".kestra/config.yml");
@CommandLine.Option(names = {"-p", "--plugins"}, description = "Path to plugins directory")
protected Path pluginsPath = System.getenv("KESTRA_PLUGINS_PATH") != null ? Paths.get(System.getenv("KESTRA_PLUGINS_PATH")) : null;
@Option(names = {"-p", "--plugins"}, description = "Path to plugins directory")
protected Path pluginsPath = Optional.ofNullable(System.getenv("KESTRA_PLUGINS_PATH")).map(Paths::get).orElse(null);
public enum LogLevel {
TRACE,
@@ -76,7 +86,7 @@ abstract public class AbstractCommand implements Callable<Integer> {
@Override
public Integer call() throws Exception {
Thread.currentThread().setName(this.getClass().getDeclaredAnnotation(CommandLine.Command.class).name());
Thread.currentThread().setName(this.getClass().getDeclaredAnnotation(Command.class).name());
startLogger();
sendServerLog();
if (this.startupHook != null) {
@@ -84,8 +94,14 @@ abstract public class AbstractCommand implements Callable<Integer> {
}
if (this.pluginsPath != null && loadExternalPlugins()) {
pluginRegistry = pluginRegistry();
pluginRegistry = pluginRegistryProvider.get();
pluginRegistry.registerIfAbsent(pluginsPath);
// PluginManager mus only be initialized if a registry is also instantiated
if (isPluginManagerEnabled()) {
PluginManager manager = pluginManagerProvider.get();
manager.start();
}
}
startWebserver();
@@ -102,8 +118,15 @@ abstract public class AbstractCommand implements Callable<Integer> {
return true;
}
protected PluginRegistry pluginRegistry() {
return KestraContext.getContext().getPluginRegistry(); // Lazy init
/**
* Specifies whether the {@link PluginManager} service must be initialized.
* <p>
* This method can be overridden by concrete commands.
*
* @return {@code true} if the {@link PluginManager} service must be initialized.
*/
protected boolean isPluginManagerEnabled() {
return true;
}
private static String message(String message, Object... format) {
@@ -157,7 +180,6 @@ abstract public class AbstractCommand implements Callable<Integer> {
logger.getName().startsWith("io.kestra") &&
!logger.getName().startsWith("io.kestra.ee.runner.kafka.services"))
)
|| logger.getName().startsWith("flow")
)
.forEach(
logger -> logger.setLevel(ch.qos.logback.classic.Level.valueOf(this.logLevel.name()))
@@ -183,9 +205,9 @@ abstract public class AbstractCommand implements Callable<Integer> {
if (this.endpointConfiguration.getPort().isPresent()) {
URI endpoint = null;
try {
endpoint = new URIBuilder(server.getURL().toURI())
.setPort(this.endpointConfiguration.getPort().get())
.setPath("/health")
endpoint = UriBuilder.of(server.getURL().toURI())
.port(this.endpointConfiguration.getPort().get())
.path("/health")
.build();
} catch (URISyntaxException e) {
e.printStackTrace();
@@ -207,10 +229,12 @@ abstract public class AbstractCommand implements Callable<Integer> {
return false;
}
protected void shutdownHook(Rethrow.RunnableChecked<Exception> run) {
protected void shutdownHook(boolean logShutdown, Rethrow.RunnableChecked<Exception> run) {
Runtime.getRuntime().addShutdownHook(new Thread(
() -> {
log.warn("Receiving shutdown ! Try to graceful exit");
if (logShutdown) {
log.warn("Receiving shutdown ! Try to graceful exit");
}
try {
run.run();
} catch (Exception e) {

View File

@@ -31,6 +31,12 @@ public abstract class AbstractValidateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the directory containing files to check")
protected Path directory;
/** {@inheritDoc} **/
@Override
protected boolean loadExternalPlugins() {
return local;
}
public static void handleException(ConstraintViolationException e, String resource) {
stdErr("\t@|fg(red) Unable to parse {0} due to the following error(s):|@", resource);
e.getConstraintViolations()

View File

@@ -88,11 +88,12 @@ public class App implements Callable<Integer> {
.environments(Environment.CLI);
CommandLine cmd = new CommandLine(mainClass, CommandLine.defaultFactory());
continueOnParsingErrors(cmd);
CommandLine.ParseResult parseResult = cmd.parseArgs(args);
List<CommandLine> parsedCommands = parseResult.asCommandLineList();
CommandLine commandLine = parsedCommands.get(parsedCommands.size() - 1);
CommandLine commandLine = parsedCommands.getLast();
Class<?> cls = commandLine.getCommandSpec().userObject().getClass();
if (AbstractCommand.class.isAssignableFrom(cls)) {
@@ -114,15 +115,17 @@ public class App implements Callable<Integer> {
.stream()
.filter(argSpec -> ((Field) argSpec.userObject()).getName().equals("serverPort"))
.findFirst()
.ifPresent(argSpec -> {
properties.put("micronaut.server.port", argSpec.getValue());
});
.ifPresent(argSpec -> properties.put("micronaut.server.port", argSpec.getValue()));
builder.properties(properties);
}
return builder.build();
}
private static void continueOnParsingErrors(CommandLine cmd) {
cmd.getCommandSpec().parser().collectErrors(true);
}
@SuppressWarnings("unchecked")
private static <T> T getPropertiesFromMethod(Class<?> cls, String methodName, Object instance) {
try {

View File

@@ -1,21 +1,18 @@
package io.kestra.cli.commands;
import io.kestra.cli.AbstractApiCommand;
import lombok.Builder;
import lombok.Value;
import lombok.extern.jackson.Jacksonized;
import picocli.CommandLine;
import java.nio.file.Path;
public abstract class AbstractServiceNamespaceUpdateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the namespace to update")
@CommandLine.Parameters(index = "0", description = "The namespace to update")
public String namespace;
@CommandLine.Parameters(index = "1", description = "the directory containing files for current namespace")
@CommandLine.Parameters(index = "1", description = "The directory containing flow files for current namespace")
public Path directory;
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "if missing should be deleted")
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "Whether missing should be deleted")
public boolean delete = false;
}

View File

@@ -8,7 +8,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "configs",
description = "handle configs",
description = "Manage configuration",
mixinStandardHelpOptions = true,
subcommands = {
ConfigPropertiesCommand.class,

View File

@@ -10,7 +10,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "properties",
description = {"Display actual configurations properties."}
description = {"Display current configuration properties."}
)
@Slf4j
public class ConfigPropertiesCommand extends AbstractCommand {

View File

@@ -10,7 +10,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "flow",
description = "handle flows",
description = "Manage flows",
mixinStandardHelpOptions = true,
subcommands = {
FlowValidateCommand.class,
@@ -18,6 +18,9 @@ import picocli.CommandLine;
FlowNamespaceCommand.class,
FlowDotCommand.class,
FlowExportCommand.class,
FlowUpdateCommand.class,
FlowUpdatesCommand.class,
FlowsSyncFromSourceCommand.class
}
)
@Slf4j

View File

@@ -15,12 +15,12 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "create",
description = "create a single flow",
description = "Create a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowCreateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the file containing the flow")
@CommandLine.Parameters(index = "0", description = "The file containing the flow")
public Path flowFile;
@SuppressWarnings("deprecation")

View File

@@ -10,17 +10,17 @@ import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
@CommandLine.Command(
name = "create",
description = "create a single flow",
name = "delete",
description = "Delete a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowDeleteCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the namespace of the flow")
@CommandLine.Parameters(index = "0", description = "The namespace of the flow")
public String namespace;
@CommandLine.Parameters(index = "1", description = "the id of the flow")
@CommandLine.Parameters(index = "1", description = "The ID of the flow")
public String id;
@SuppressWarnings("deprecation")

View File

@@ -15,14 +15,14 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "dot",
description = "generate a dot graph from a file"
description = "Generate a DOT graph from a file"
)
@Slf4j
public class FlowDotCommand extends AbstractCommand {
@Inject
private ApplicationContext applicationContext;
@CommandLine.Parameters(index = "0", description = "the flow file to display")
@CommandLine.Parameters(index = "0", description = "The flow file to display")
private Path file;
@Override

View File

@@ -12,12 +12,12 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "expand",
description = "deprecated - expand a flow"
description = "Deprecated - expand a flow"
)
@Deprecated
public class FlowExpandCommand extends AbstractCommand {
@CommandLine.Parameters(index = "0", description = "the flow file to expand")
@CommandLine.Parameters(index = "0", description = "The flow file to expand")
private Path file;
@Inject

View File

@@ -18,7 +18,7 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "export",
description = "export flows to a zip file",
description = "Export flows to a ZIP file",
mixinStandardHelpOptions = true
)
@Slf4j
@@ -29,10 +29,10 @@ public class FlowExportCommand extends AbstractApiCommand {
@Inject
private ApplicationContext applicationContext;
@CommandLine.Option(names = {"--namespace"}, description = "the namespace of flows to export")
@CommandLine.Option(names = {"--namespace"}, description = "The namespace of flows to export")
public String namespace;
@CommandLine.Parameters(index = "0", description = "the directory to export the file to")
@CommandLine.Parameters(index = "0", description = "The directory to export the ZIP file to")
public Path directory;
@Override

View File

@@ -27,19 +27,19 @@ import java.util.concurrent.TimeoutException;
@CommandLine.Command(
name = "test",
description = "test a flow"
description = "Test a flow"
)
@Slf4j
public class FlowTestCommand extends AbstractCommand {
@Inject
private ApplicationContext applicationContext;
@CommandLine.Parameters(index = "0", description = "the flow file to test")
@CommandLine.Parameters(index = "0", description = "The flow file to test")
private Path file;
@CommandLine.Parameters(
index = "1..*",
description = "the inputs to pass as key pair value separated by space, " +
description = "The inputs to pass as key pair value separated by space, " +
"for input type file, you need to pass an absolute path."
)
private List<String> inputs = new ArrayList<>();

View File

@@ -15,18 +15,18 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "update",
description = "update a single flow",
description = "Update a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowUpdateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the file containing the flow")
@CommandLine.Parameters(index = "0", description = "The file containing the flow")
public Path flowFile;
@CommandLine.Parameters(index = "1", description = "the namespace of the flow")
@CommandLine.Parameters(index = "1", description = "The namespace of the flow")
public String namespace;
@CommandLine.Parameters(index = "2", description = "the id of the flow")
@CommandLine.Parameters(index = "2", description = "The ID of the flow")
public String id;
@SuppressWarnings("deprecation")

View File

@@ -21,18 +21,21 @@ import java.util.List;
@CommandLine.Command(
name = "updates",
description = "create or update flows from a folder, and optionally delete the ones not present",
description = "Create or update flows from a folder, and optionally delete the ones not present",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowUpdatesCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the directory containing files")
@CommandLine.Parameters(index = "0", description = "The directory containing files")
public Path directory;
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "if missing should be deleted")
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "Whether missing should be deleted")
public boolean delete = false;
@CommandLine.Option(names = {"--namespace"}, description = "The parent namespace of the flows, if not set, every namespace are allowed.")
public String namespace;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
@@ -58,8 +61,12 @@ public class FlowUpdatesCommand extends AbstractApiCommand {
body = String.join("\n---\n", flows);
}
try(DefaultHttpClient client = client()) {
String namespaceQuery = "";
if (namespace != null) {
namespaceQuery = "&namespace=" + namespace;
}
MutableHttpRequest<String> request = HttpRequest
.POST(apiUri("/flows/bulk") + "?delete=" + delete, body).contentType(MediaType.APPLICATION_YAML);
.POST(apiUri("/flows/bulk") + "?allowNamespaceChild=true&delete=" + delete + namespaceQuery, body).contentType(MediaType.APPLICATION_YAML);
List<UpdateResult> updated = client.toBlocking().retrieve(
this.requestOptions(request),
@@ -80,4 +87,9 @@ public class FlowUpdatesCommand extends AbstractApiCommand {
return 0;
}
@Override
protected boolean loadExternalPlugins() {
return false;
}
}

View File

@@ -13,7 +13,7 @@ import java.util.List;
@CommandLine.Command(
name = "validate",
description = "validate a flow"
description = "Validate a flow"
)
public class FlowValidateCommand extends AbstractValidateCommand {
@Inject
@@ -39,7 +39,7 @@ public class FlowValidateCommand extends AbstractValidateCommand {
Flow flow = (Flow) object;
List<String> warnings = new ArrayList<>();
warnings.addAll(flowService.deprecationPaths(flow).stream().map(deprecation -> deprecation + " is deprecated").toList());
warnings.addAll(flowService.warnings(flow));
warnings.addAll(flowService.warnings(flow, this.tenantId));
return warnings;
},
(Object object) -> {

View File

@@ -0,0 +1,55 @@
package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractApiCommand;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.flows.FlowWithSource;
import io.kestra.core.repositories.FlowRepositoryInterface;
import io.kestra.core.serializers.YamlParser;
import jakarta.inject.Inject;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
@CommandLine.Command(
name = "syncFromSource",
description = "Update a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowsSyncFromSourceCommand extends AbstractApiCommand {
@Inject
private YamlParser yamlParser;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
super.call();
FlowRepositoryInterface repository = applicationContext.getBean(FlowRepositoryInterface.class);
List<FlowWithSource> persistedFlows = repository.findAllWithSource(tenantId);
int count = 0;
for (FlowWithSource persistedFlow : persistedFlows) {
// Ensure exactly one trailing newline. We need this new line
// because when we update a flow from its source,
// we don't update it if no change is detected.
// The goal here is to force an update from the source for every flows
String source = persistedFlow.getSource() + System.lineSeparator();
FlowWithSource flow = FlowWithSource.of(yamlParser.parse(source, Flow.class), source);
repository.update(flow, persistedFlow, source, flow);
stdOut("- %s.%s".formatted(flow.getNamespace(), flow.getId()));
count++;
}
stdOut("%s flow(s) successfully updated!".formatted(count));
return 0;
}
protected boolean loadExternalPlugins() {
return true;
}
}

View File

@@ -9,7 +9,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "namespace",
description = "handle namespace flows",
description = "Manage namespace flows",
mixinStandardHelpOptions = true,
subcommands = {
FlowNamespaceUpdateCommand.class,

View File

@@ -22,7 +22,7 @@ import java.util.List;
@CommandLine.Command(
name = "update",
description = "handle namespace flows",
description = "Update flows in namespace",
mixinStandardHelpOptions = true
)
@Slf4j
@@ -30,7 +30,7 @@ public class FlowNamespaceUpdateCommand extends AbstractServiceNamespaceUpdateCo
@Inject
public YamlParser yamlParser;
@CommandLine.Option(names = {"--override-namespaces"}, negatable = true, description = "replace namespace of all flows by the one provided")
@CommandLine.Option(names = {"--override-namespaces"}, negatable = true, description = "Replace namespace of all flows by the one provided")
public boolean override = false;
@SuppressWarnings("deprecation")

View File

@@ -11,7 +11,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "namespace",
description = "handle namespaces",
description = "Manage namespaces",
mixinStandardHelpOptions = true,
subcommands = {
NamespaceFilesCommand.class,

View File

@@ -9,7 +9,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "files",
description = "handle namespace files",
description = "Manage namespace files",
mixinStandardHelpOptions = true,
subcommands = {
NamespaceFilesUpdateCommand.class,

View File

@@ -17,21 +17,21 @@ import java.util.List;
@CommandLine.Command(
name = "update",
description = "update namespace files",
description = "Update namespace files",
mixinStandardHelpOptions = true
)
@Slf4j
public class NamespaceFilesUpdateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the namespace to update")
@CommandLine.Parameters(index = "0", description = "The namespace to update")
public String namespace;
@CommandLine.Parameters(index = "1", description = "the local directory containing files for current namespace")
@CommandLine.Parameters(index = "1", description = "The local directory containing files for current namespace")
public Path from;
@CommandLine.Parameters(index = "2", description = "the remote namespace path to upload files to", defaultValue = "/")
@CommandLine.Parameters(index = "2", description = "The remote namespace path to upload files to", defaultValue = "/")
public String to;
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "if missing should be deleted")
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "Whether missing should be deleted")
public boolean delete = false;
private static final String KESTRA_IGNORE_FILE = ".kestraignore";

View File

@@ -9,7 +9,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "kv",
description = "handle KV Store",
description = "Manage KV Store",
mixinStandardHelpOptions = true,
subcommands = {
KvUpdateCommand.class,

View File

@@ -18,28 +18,28 @@ import java.time.Duration;
@CommandLine.Command(
name = "update",
description = "update value for a KV Store key",
description = "Update value for a KV Store key",
mixinStandardHelpOptions = true
)
@Slf4j
public class KvUpdateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "the namespace to update")
@CommandLine.Parameters(index = "0", description = "The namespace to update")
public String namespace;
@CommandLine.Parameters(index = "1", description = "the key to update")
@CommandLine.Parameters(index = "1", description = "The key to update")
public String key;
@CommandLine.Parameters(index = "2", description = "the value to assign to the key. If the value is an object, it must be in JSON format. If the value must be read from file, use -f parameter.")
@CommandLine.Parameters(index = "2", description = "The value to assign to the key. If the value is an object, it must be in JSON format. If the value must be read from file, use -f parameter.")
public String value;
@Option(names = {"-e", "--expiration"}, description = "the duration after which the key should expire.")
@Option(names = {"-e", "--expiration"}, description = "The duration after which the key should expire.")
public String expiration;
@Option(names = {"-t", "--type"}, description = "the type of the value. Optional and useful to override the deduced type (eg. numbers, booleans or JSON as full string). Valid values: ${COMPLETION-CANDIDATES}.")
@Option(names = {"-t", "--type"}, description = "The type of the value. Optional and useful to override the deduced type (eg. numbers, booleans or JSON as full string). Valid values: ${COMPLETION-CANDIDATES}.")
public Type type;
@Option(names = {"-f", "--file-value"}, description = "the file from which to read the value to set. If this is provided, it will take precedence over any specified value.")
@Option(names = {"-f", "--file-value"}, description = "The file from which to read the value to set. If this is provided, it will take precedence over any specified value.")
public Path fileValue;
@Override

View File

@@ -1,31 +1,37 @@
package io.kestra.cli.commands.plugins;
import io.micronaut.configuration.picocli.PicocliRunner;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import io.kestra.cli.AbstractCommand;
import io.kestra.cli.App;
import picocli.CommandLine;
import io.micronaut.configuration.picocli.PicocliRunner;
import lombok.SneakyThrows;
import picocli.CommandLine.Command;
@CommandLine.Command(
@Command(
name = "plugins",
description = "handle plugins",
description = "Manage plugins",
mixinStandardHelpOptions = true,
subcommands = {
PluginInstallCommand.class,
PluginUninstallCommand.class,
PluginListCommand.class,
PluginDocCommand.class
PluginDocCommand.class,
PluginSearchCommand.class
}
)
@Slf4j
public class PluginCommand extends AbstractCommand {
@SneakyThrows
@Override
public Integer call() throws Exception {
super.call();
PicocliRunner.call(App.class, "plugins", "--help");
PicocliRunner.call(App.class, "plugins", "--help");
return 0;
}
@Override
protected boolean loadExternalPlugins() {
return false;
}
}

View File

@@ -1,9 +1,8 @@
package io.kestra.cli.commands.plugins;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.docs.DocumentationGenerator;
import io.kestra.core.docs.JsonSchemaGenerator;
import io.kestra.core.plugins.PluginRegistry;
import io.kestra.core.plugins.RegisteredPlugin;
import io.kestra.core.serializers.JacksonMapper;
@@ -21,13 +20,13 @@ import java.util.List;
@CommandLine.Command(
name = "doc",
description = "write documentation for all plugins currently installed"
description = "Generate documentation for all plugins currently installed"
)
public class PluginDocCommand extends AbstractCommand {
@Inject
private ApplicationContext applicationContext;
@CommandLine.Parameters(index = "0", description = "Path to write documentations files")
@CommandLine.Parameters(index = "0", description = "Path to write documentation files")
private Path output = Paths.get(System.getProperty("user.dir"), "docs");
@CommandLine.Option(names = {"--core"}, description = "Also write core tasks docs files")
@@ -36,7 +35,7 @@ public class PluginDocCommand extends AbstractCommand {
@CommandLine.Option(names = {"--icons"}, description = "Also write icon for each task")
private boolean icons = false;
@CommandLine.Option(names = {"--schema"}, description = "Also write json schema for each task")
@CommandLine.Option(names = {"--schema"}, description = "Also write JSON Schema for each task")
private boolean schema = false;
@Override
@@ -44,56 +43,70 @@ public class PluginDocCommand extends AbstractCommand {
super.call();
DocumentationGenerator documentationGenerator = applicationContext.getBean(DocumentationGenerator.class);
List<RegisteredPlugin> plugins = core ? pluginRegistry().plugins() : pluginRegistry().externalPlugins();
PluginRegistry registry = pluginRegistryProvider.get();
List<RegisteredPlugin> plugins = core ? registry.plugins() : registry.externalPlugins();
boolean hasFailures = false;
for (RegisteredPlugin registeredPlugin : plugins) {
documentationGenerator
.generate(registeredPlugin)
.forEach(s -> {
File file = Paths.get(output.toAbsolutePath().toString(), s.getPath()).toFile();
try {
documentationGenerator
.generate(registeredPlugin)
.forEach(s -> {
File file = Paths.get(output.toAbsolutePath().toString(), s.getPath()).toFile();
if (!file.getParentFile().exists()) {
//noinspection ResultOfMethodCallIgnored
file.getParentFile().mkdirs();
}
try {
com.google.common.io.Files
.asCharSink(
file,
Charsets.UTF_8
).write(s.getBody());
stdOut("Generate doc in: {0}", file);
if (s.getIcon() != null && this.icons) {
File iconFile = new File(
file.getParent(),
file.getName().substring(0, file.getName().lastIndexOf(".")) + ".svg"
);
com.google.common.io.Files
.asByteSink(iconFile)
.write(Base64.getDecoder().decode(s.getIcon().getBytes(StandardCharsets.UTF_8)));
stdOut("Generate icon in: {0}", iconFile);
if (!file.getParentFile().exists()) {
//noinspection ResultOfMethodCallIgnored
file.getParentFile().mkdirs();
}
if (this.schema && s.getSchema() != null) {
File jsonSchemaFile = new File(
file.getParent(),
file.getName().substring(0, file.getName().lastIndexOf(".")) + ".json"
);
try {
Files
.asCharSink(
file,
StandardCharsets.UTF_8
).write(s.getBody());
stdOut("Generate doc in: {0}", file);
com.google.common.io.Files
.asByteSink(jsonSchemaFile)
.write(JacksonMapper.ofJson().writeValueAsBytes(s.getSchema()));
stdOut("Generate json schema in: {0}", jsonSchemaFile);
if (s.getIcon() != null && this.icons) {
File iconFile = new File(
file.getParent(),
file.getName().substring(0, file.getName().lastIndexOf(".")) + ".svg"
);
Files
.asByteSink(iconFile)
.write(Base64.getDecoder().decode(s.getIcon().getBytes(StandardCharsets.UTF_8)));
stdOut("Generate icon in: {0}", iconFile);
}
if (this.schema && s.getSchema() != null) {
File jsonSchemaFile = new File(
file.getParent(),
file.getName().substring(0, file.getName().lastIndexOf(".")) + ".json"
);
Files
.asByteSink(jsonSchemaFile)
.write(JacksonMapper.ofJson().writeValueAsBytes(s.getSchema()));
stdOut("Generate json schema in: {0}", jsonSchemaFile);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
);
);
} catch (Error e) {
stdErr("Failure to generate documentation for plugin {0}: {1}", registeredPlugin.name(), e);
hasFailures = true;
}
}
return 0;
return hasFailures ? 1 : 0;
}
/** {@inheritDoc} **/
@Override
protected boolean isPluginManagerEnabled() {
return false;
}
}

View File

@@ -1,100 +1,133 @@
package io.kestra.cli.commands.plugins;
import io.kestra.core.contexts.MavenPluginRepositoryConfig;
import io.kestra.core.exceptions.KestraRuntimeException;
import io.kestra.core.plugins.LocalPluginManager;
import io.kestra.core.plugins.MavenPluginDownloader;
import io.kestra.core.plugins.PluginArtifact;
import io.kestra.core.plugins.PluginCatalogService;
import io.kestra.core.plugins.PluginManager;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.http.uri.UriBuilder;
import org.apache.commons.io.FilenameUtils;
import io.kestra.cli.AbstractCommand;
import io.kestra.cli.plugins.PluginDownloader;
import io.kestra.cli.plugins.RepositoryConfig;
import io.kestra.core.utils.IdUtils;
import org.apache.http.client.utils.URIBuilder;
import jakarta.inject.Provider;
import picocli.CommandLine;
import java.net.URI;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import jakarta.inject.Inject;
import picocli.CommandLine.Command;
import picocli.CommandLine.Parameters;
import picocli.CommandLine.Option;
import picocli.CommandLine.Spec;
import static io.kestra.core.utils.Rethrow.throwConsumer;
@CommandLine.Command(
@Command(
name = "install",
description = "install a plugin"
description = "Install plugins"
)
public class PluginInstallCommand extends AbstractCommand {
@CommandLine.Parameters(index = "0..*", description = "the plugins to install")
@Option(names = {"--locally"}, description = "Specifies if plugins must be installed locally. If set to false the installation depends on your Kestra configuration.")
boolean locally = true;
@Option(names = {"--all"}, description = "Install all available plugins")
boolean all = false;
@Parameters(index = "0..*", description = "Plugins to install. Represented as Maven artifact coordinates (i.e., <groupId>:<artifactId>:(<version>|LATEST)")
List<String> dependencies = new ArrayList<>();
@CommandLine.Option(names = {"--repositories"}, description = "url to additional maven repositories")
@Option(names = {"--repositories"}, description = "URL to additional Maven repositories")
private URI[] repositories;
@CommandLine.Spec
@Spec
CommandLine.Model.CommandSpec spec;
@Inject
private PluginDownloader pluginDownloader;
Provider<MavenPluginDownloader> mavenPluginRepositoryProvider;
@Inject
Provider<PluginCatalogService> pluginCatalogService;
@Override
public Integer call() throws Exception {
super.call();
if (this.pluginsPath == null) {
if (this.locally && this.pluginsPath == null) {
throw new CommandLine.ParameterException(this.spec.commandLine(), "Missing required options '--plugins' " +
"or environment variable 'KESTRA_PLUGINS_PATH"
);
}
if (!pluginsPath.toFile().exists()) {
if (!pluginsPath.toFile().mkdir()) {
throw new RuntimeException("Cannot create directory: " + pluginsPath.toFile().getAbsolutePath());
}
}
List<MavenPluginRepositoryConfig> repositoryConfigs = List.of();
if (repositories != null) {
Arrays.stream(repositories)
.forEach(throwConsumer(s -> {
URIBuilder uriBuilder = new URIBuilder(s);
RepositoryConfig.RepositoryConfigBuilder builder = RepositoryConfig.builder()
repositoryConfigs = Arrays.stream(repositories)
.map(uri -> {
MavenPluginRepositoryConfig.MavenPluginRepositoryConfigBuilder builder = MavenPluginRepositoryConfig
.builder()
.id(IdUtils.create());
if (uriBuilder.getUserInfo() != null) {
int index = uriBuilder.getUserInfo().indexOf(":");
builder.basicAuth(new RepositoryConfig.BasicAuth(
uriBuilder.getUserInfo().substring(0, index),
uriBuilder.getUserInfo().substring(index + 1)
String userInfo = uri.getUserInfo();
if (userInfo != null) {
String[] userInfoParts = userInfo.split(":");
builder = builder.basicAuth(new MavenPluginRepositoryConfig.BasicAuth(
userInfoParts[0],
userInfoParts[1]
));
uriBuilder.setUserInfo(null);
}
builder.url(uriBuilder.build().toString());
pluginDownloader.addRepository(builder.build());
}));
builder.url(UriBuilder.of(uri).userInfo(null).build().toString());
return builder.build();
}).toList();
}
List<URL> resolveUrl = pluginDownloader.resolve(dependencies);
stdOut("Resolved Plugin(s) with {0}", resolveUrl);
for (URL url: resolveUrl) {
Files.copy(
Paths.get(url.toURI()),
Paths.get(pluginsPath.toString(), FilenameUtils.getName(url.toString())),
StandardCopyOption.REPLACE_EXISTING
);
if (all) {
PluginCatalogService service = pluginCatalogService.get();
dependencies = service.get().stream().map(Objects::toString).toList();
}
stdOut("Successfully installed plugins {0} into {1}", dependencies, pluginsPath);
if (dependencies.isEmpty()) {
stdErr("Error: No plugin to install.");
return CommandLine.ExitCode.OK;
}
return 0;
final List<PluginArtifact> pluginArtifacts;
try {
pluginArtifacts = dependencies.stream().map(PluginArtifact::fromCoordinates).toList();
} catch (IllegalArgumentException e) {
stdErr(e.getMessage());
return CommandLine.ExitCode.USAGE;
}
try (final PluginManager pluginManager = getPluginManager()) {
List<PluginArtifact> installed;
if (all) {
installed = new ArrayList<>(pluginArtifacts.size());
for (PluginArtifact pluginArtifact : pluginArtifacts) {
try {
installed.add(pluginManager.install(pluginArtifact, repositoryConfigs, false, pluginsPath));
} catch (KestraRuntimeException e) {
String cause = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
stdErr("Failed to install plugin {0}. Cause: {1}", pluginArtifact, cause);
}
}
} else {
installed = pluginManager.install(pluginArtifacts, repositoryConfigs, false, pluginsPath);
}
List<URI> uris = installed.stream().map(PluginArtifact::uri).toList();
stdOut("Successfully installed plugins {0} into {1}", dependencies, uris);
return CommandLine.ExitCode.OK;
}
}
private PluginManager getPluginManager() {
return locally ? new LocalPluginManager(mavenPluginRepositoryProvider.get()) : this.pluginManagerProvider.get();
}
@Override

View File

@@ -1,22 +1,31 @@
package io.kestra.cli.commands.plugins;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.plugins.PluginRegistry;
import io.kestra.core.plugins.RegisteredPlugin;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import picocli.CommandLine.Spec;
import java.util.List;
@CommandLine.Command(
@Command(
name = "list",
description = "list all plugins already installed"
description = "List all plugins already installed"
)
public class PluginListCommand extends AbstractCommand {
@CommandLine.Spec
@Spec
CommandLine.Model.CommandSpec spec;
@CommandLine.Option(names = {"--core"}, description = "Also write core tasks plugins")
@Option(names = {"--core"}, description = "Also write core tasks plugins")
private boolean core = false;
@Inject
private PluginRegistry registry;
@Override
public Integer call() throws Exception {
super.call();
@@ -26,8 +35,9 @@ public class PluginListCommand extends AbstractCommand {
"or environment variable 'KESTRA_PLUGINS_PATH"
);
}
List<RegisteredPlugin> plugins = core ? pluginRegistry().plugins() : pluginRegistry().externalPlugins();
List<RegisteredPlugin> plugins = core ? registry.plugins() : registry.externalPlugins();
plugins.forEach(registeredPlugin -> stdOut(registeredPlugin.toString()));
return 0;

View File

@@ -0,0 +1,149 @@
package io.kestra.cli.commands.plugins;
import io.kestra.cli.AbstractCommand;
import io.micronaut.core.type.Argument;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import jakarta.inject.Inject;
import picocli.CommandLine.Command;
import picocli.CommandLine.Parameters;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
@Command(
name = "search",
description = "Search for available Kestra plugins"
)
public class PluginSearchCommand extends AbstractCommand {
@Inject
@Client("api")
private HttpClient httpClient;
private static final ObjectMapper MAPPER = new ObjectMapper();
private static final char SPACE = ' ';
@Parameters(index = "0", description = "Search term (optional)", defaultValue = "")
private String searchTerm;
@Override
public Integer call() throws Exception {
super.call();
try {
JsonNode root = fetchPlugins();
List<PluginInfo> plugins = findPlugins(root);
printResults(plugins);
return 0;
} catch (Exception e) {
stdOut("Error processing plugins: {0}", e.getMessage());
return 1;
}
}
private JsonNode fetchPlugins() throws Exception {
String response = httpClient.toBlocking()
.retrieve(
HttpRequest.GET("/v1/plugins")
.header("Accept", "application/json")
);
return MAPPER.readTree(response);
}
private List<PluginInfo> findPlugins(JsonNode root) {
String searchTermLower = searchTerm.toLowerCase();
List<PluginInfo> plugins = new ArrayList<>();
for (JsonNode plugin : root) {
if (matchesSearch(plugin, searchTermLower)) {
plugins.add(new PluginInfo(
plugin.path("name").asText(),
plugin.path("title").asText(),
plugin.path("group").asText(),
plugin.path("version").asText("")
));
}
}
plugins.sort((p1, p2) -> p1.name.compareToIgnoreCase(p2.name));
return plugins;
}
private boolean matchesSearch(JsonNode plugin, String term) {
if (term.isEmpty()) {
return true;
}
return plugin.path("name").asText().toLowerCase().contains(term) ||
plugin.path("title").asText().toLowerCase().contains(term) ||
plugin.path("group").asText().toLowerCase().contains(term);
}
private void printResults(List<PluginInfo> plugins) {
if (plugins.isEmpty()) {
stdOut("No plugins found{0}",
searchTerm.isEmpty() ? "" : " matching '" + searchTerm + "'");
return;
}
stdOut("\nFound {0} plugins{1}",
plugins.size(),
searchTerm.isEmpty() ? "" : " matching '" + searchTerm + "'"
);
printPluginsTable(plugins);
}
private void printPluginsTable(List<PluginInfo> plugins) {
int maxName = 4, maxTitle = 5, maxGroup = 5;
for (PluginInfo plugin : plugins) {
maxName = Math.max(maxName, plugin.name.length());
maxTitle = Math.max(maxTitle, plugin.title.length());
maxGroup = Math.max(maxGroup, plugin.group.length());
}
StringBuilder namePad = new StringBuilder(maxName);
StringBuilder titlePad = new StringBuilder(maxTitle);
StringBuilder groupPad = new StringBuilder(maxGroup);
stdOut("");
printRow(namePad, titlePad, groupPad, "NAME", "TITLE", "GROUP", "VERSION",
maxName, maxTitle, maxGroup);
for (PluginInfo plugin : plugins) {
printRow(namePad, titlePad, groupPad, plugin.name, plugin.title, plugin.group, plugin.version,
maxName, maxTitle, maxGroup);
}
stdOut("");
}
private void printRow(StringBuilder namePad, StringBuilder titlePad, StringBuilder groupPad,
String name, String title, String group, String version,
int maxName, int maxTitle, int maxGroup) {
stdOut("{0} {1} {2} {3}",
pad(namePad, name, maxName),
pad(titlePad, title, maxTitle),
pad(groupPad, group, maxGroup),
version
);
}
private String pad(StringBuilder sb, String str, int length) {
sb.setLength(0);
sb.append(str);
while (sb.length() < length) {
sb.append(SPACE);
}
return sb.toString();
}
private record PluginInfo(String name, String title, String group, String version) {}
@Override
protected boolean loadExternalPlugins() {
return false;
}
}

View File

@@ -0,0 +1,69 @@
package io.kestra.cli.commands.plugins;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.plugins.LocalPluginManager;
import io.kestra.core.plugins.MavenPluginDownloader;
import io.kestra.core.plugins.PluginArtifact;
import io.kestra.core.plugins.PluginManager;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import picocli.CommandLine;
import picocli.CommandLine.Parameters;
import picocli.CommandLine.Spec;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
@CommandLine.Command(
name = "uninstall",
description = "Uninstall plugins"
)
public class PluginUninstallCommand extends AbstractCommand {
@Parameters(index = "0..*", description = "The plugins to uninstall. Represented as Maven artifact coordinates (i.e., <groupId>:<artifactId>:(<version>|LATEST)")
List<String> dependencies = new ArrayList<>();
@Spec
CommandLine.Model.CommandSpec spec;
@Inject
Provider<MavenPluginDownloader> mavenPluginRepositoryProvider;
@Override
public Integer call() throws Exception {
super.call();
List<PluginArtifact> pluginArtifacts;
try {
pluginArtifacts = dependencies.stream().map(PluginArtifact::fromCoordinates).toList();
} catch (IllegalArgumentException e) {
stdErr(e.getMessage());
return CommandLine.ExitCode.USAGE;
}
final PluginManager pluginManager;
// If a PLUGIN_PATH is provided, then use the LocalPluginManager
if (pluginsPath != null) {
pluginManager = new LocalPluginManager(mavenPluginRepositoryProvider.get());
} else {
// Otherwise, we delegate to the configured plugin-manager.
pluginManager = this.pluginManagerProvider.get();
}
List<PluginArtifact> uninstalled = pluginManager.uninstall(
pluginArtifacts,
false,
pluginsPath
);
List<URI> uris = uninstalled.stream().map(PluginArtifact::uri).toList();
stdOut("Successfully uninstalled plugins {0} from {1}", dependencies, uris);
return CommandLine.ExitCode.OK;
}
@Override
protected boolean loadExternalPlugins() {
return false;
}
}

View File

@@ -1,12 +1,20 @@
package io.kestra.cli.commands.servers;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.contexts.KestraContext;
import jakarta.annotation.PostConstruct;
import picocli.CommandLine;
abstract public class AbstractServerCommand extends AbstractCommand implements ServerCommandInterface {
@CommandLine.Option(names = {"--port"}, description = "the port to bind")
@CommandLine.Option(names = {"--port"}, description = "The port to bind")
Integer serverPort;
@Override
public Integer call() throws Exception {
this.shutdownHook(true, () -> KestraContext.getContext().shutdown());
return super.call();
}
protected static int defaultWorkerThread() {
return Runtime.getRuntime().availableProcessors() * 4;
}

View File

@@ -1,7 +1,6 @@
package io.kestra.cli.commands.servers;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.models.ServerType;
import io.kestra.core.runners.ExecutorInterface;
import io.kestra.core.services.SkipExecutionService;
@@ -9,7 +8,6 @@ import io.kestra.core.services.StartExecutorService;
import io.kestra.core.utils.Await;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.util.Collections;
@@ -18,9 +16,8 @@ import java.util.Map;
@CommandLine.Command(
name = "executor",
description = "start an executor"
description = "Start the Kestra executor"
)
@Slf4j
public class ExecutorCommand extends AbstractServerCommand {
@Inject
private ApplicationContext applicationContext;
@@ -31,22 +28,22 @@ public class ExecutorCommand extends AbstractServerCommand {
@Inject
private StartExecutorService startExecutorService;
@CommandLine.Option(names = {"--skip-executions"}, split=",", description = "a list of execution identifiers to skip, separated by a coma; for troubleshooting purpose only")
@CommandLine.Option(names = {"--skip-executions"}, split=",", description = "The list of execution identifiers to skip, separated by a coma; for troubleshooting purpose only")
private List<String> skipExecutions = Collections.emptyList();
@CommandLine.Option(names = {"--skip-flows"}, split=",", description = "a list of flow identifiers (tenant|namespace|flowId) to skip, separated by a coma; for troubleshooting purpose only")
@CommandLine.Option(names = {"--skip-flows"}, split=",", description = "The list of flow identifiers (tenant|namespace|flowId) to skip, separated by a coma; for troubleshooting purpose only")
private List<String> skipFlows = Collections.emptyList();
@CommandLine.Option(names = {"--skip-namespaces"}, split=",", description = "a list of namespace identifiers (tenant|namespace) to skip, separated by a coma; for troubleshooting purpose only")
@CommandLine.Option(names = {"--skip-namespaces"}, split=",", description = "The list of namespace identifiers (tenant|namespace) to skip, separated by a coma; for troubleshooting purpose only")
private List<String> skipNamespaces = Collections.emptyList();
@CommandLine.Option(names = {"--skip-tenants"}, split=",", description = "a list of tenants to skip, separated by a coma; for troubleshooting purpose only")
@CommandLine.Option(names = {"--skip-tenants"}, split=",", description = "The list of tenants to skip, separated by a coma; for troubleshooting purpose only")
private List<String> skipTenants = Collections.emptyList();
@CommandLine.Option(names = {"--start-executors"}, split=",", description = "a list of Kafka Stream executors to start, separated by a command. Use it only with the Kafka queue, for debugging purpose.")
@CommandLine.Option(names = {"--start-executors"}, split=",", description = "The list of Kafka Stream executors to start, separated by a command. Use it only with the Kafka queue, for debugging purpose.")
private List<String> startExecutors = Collections.emptyList();
@CommandLine.Option(names = {"--not-start-executors"}, split=",", description = "a list of Kafka Stream executors to not start, separated by a command. Use it only with the Kafka queue, for debugging purpose.")
@CommandLine.Option(names = {"--not-start-executors"}, split=",", description = "The list of Kafka Stream executors to not start, separated by a command. Use it only with the Kafka queue, for debugging purpose.")
private List<String> notStartExecutors = Collections.emptyList();
@SuppressWarnings("unused")
@@ -66,13 +63,10 @@ public class ExecutorCommand extends AbstractServerCommand {
this.startExecutorService.applyOptions(startExecutors, notStartExecutors);
super.call();
this.shutdownHook(() -> KestraContext.getContext().shutdown());
ExecutorInterface executorService = applicationContext.getBean(ExecutorInterface.class);
executorService.run();
log.info("Executor started");
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -1,25 +1,30 @@
package io.kestra.cli.commands.servers;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.models.ServerType;
import io.kestra.core.runners.IndexerInterface;
import io.kestra.core.utils.Await;
import io.kestra.core.services.SkipExecutionService;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@CommandLine.Command(
name = "indexer",
description = "start an indexer"
description = "Start the Kestra indexer"
)
@Slf4j
public class IndexerCommand extends AbstractServerCommand {
@Inject
private ApplicationContext applicationContext;
@Inject
private SkipExecutionService skipExecutionService;
@CommandLine.Option(names = {"--skip-indexer-records"}, split=",", description = "a list of indexer record keys, separated by a coma; for troubleshooting purpose only")
private List<String> skipIndexerRecords = Collections.emptyList();
@SuppressWarnings("unused")
public static Map<String, Object> propertiesOverrides() {
@@ -30,14 +35,13 @@ public class IndexerCommand extends AbstractServerCommand {
@Override
public Integer call() throws Exception {
this.skipExecutionService.setSkipIndexerRecords(skipIndexerRecords);
super.call();
this.shutdownHook(() -> KestraContext.getContext().shutdown());
IndexerInterface indexer = applicationContext.getBean(IndexerInterface.class);
indexer.run();
log.info("Indexer started");
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -12,7 +12,7 @@ import java.util.Map;
@CommandLine.Command(
name = "local",
description = "start a local server"
description = "Start the local development server"
)
public class LocalCommand extends StandAloneCommand {
// @FIXME: Keep it for bug in micronaut that need to have inject on top level command to inject on abstract classe

View File

@@ -1,7 +1,6 @@
package io.kestra.cli.commands.servers;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.models.ServerType;
import io.kestra.core.schedulers.AbstractScheduler;
import io.kestra.core.utils.Await;
@@ -14,7 +13,7 @@ import java.util.Map;
@CommandLine.Command(
name = "scheduler",
description = "start an scheduler"
description = "Start the Kestra scheduler"
)
@Slf4j
public class SchedulerCommand extends AbstractServerCommand {
@@ -31,12 +30,10 @@ public class SchedulerCommand extends AbstractServerCommand {
@Override
public Integer call() throws Exception {
super.call();
this.shutdownHook(() -> KestraContext.getContext().shutdown());
AbstractScheduler scheduler = applicationContext.getBean(AbstractScheduler.class);
scheduler.run();
log.info("Scheduler started");
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -9,7 +9,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "server",
description = "handle servers",
description = "Manage servers",
mixinStandardHelpOptions = true,
subcommands = {
ExecutorCommand.class,

View File

@@ -12,7 +12,6 @@ import io.kestra.core.utils.Await;
import io.micronaut.context.ApplicationContext;
import jakarta.annotation.Nullable;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.io.File;
@@ -23,9 +22,8 @@ import java.util.Map;
@CommandLine.Command(
name = "standalone",
description = "start a standalone server"
description = "Start the standalone all-in-one server"
)
@Slf4j
public class StandAloneCommand extends AbstractServerCommand {
@CommandLine.Spec
CommandLine.Model.CommandSpec spec;
@@ -46,7 +44,7 @@ public class StandAloneCommand extends AbstractServerCommand {
@CommandLine.Option(names = {"-f", "--flow-path"}, description = "the flow path containing flow to inject at startup (when running with a memory flow repository)")
private File flowPath;
@CommandLine.Option(names = {"--worker-thread"}, description = "the number of worker threads, defaults to two times the number of available processors. Set it to 0 to avoid starting a worker.")
@CommandLine.Option(names = {"--worker-thread"}, description = "the number of worker threads, defaults to four times the number of available processors. Set it to 0 to avoid starting a worker.")
private int workerThread = defaultWorkerThread();
@CommandLine.Option(names = {"--skip-executions"}, split=",", description = "a list of execution identifiers to skip, separated by a coma; for troubleshooting purpose only")
@@ -61,6 +59,9 @@ public class StandAloneCommand extends AbstractServerCommand {
@CommandLine.Option(names = {"--skip-tenants"}, split=",", description = "a list of tenants to skip, separated by a coma; for troubleshooting purpose only")
private List<String> skipTenants = Collections.emptyList();
@CommandLine.Option(names = {"--skip-indexer-records"}, split=",", description = "a list of indexer record keys, separated by a coma; for troubleshooting purpose only")
private List<String> skipIndexerRecords = Collections.emptyList();
@CommandLine.Option(names = {"--no-tutorials"}, description = "Flag to disable auto-loading of tutorial flows.")
boolean tutorialsDisabled = false;
@@ -91,11 +92,12 @@ public class StandAloneCommand extends AbstractServerCommand {
this.skipExecutionService.setSkipFlows(skipFlows);
this.skipExecutionService.setSkipNamespaces(skipNamespaces);
this.skipExecutionService.setSkipTenants(skipTenants);
this.skipExecutionService.setSkipIndexerRecords(skipIndexerRecords);
this.startExecutorService.applyOptions(startExecutors, notStartExecutors);
KestraContext.getContext().injectWorkerConfigs(workerThread, null);
super.call();
this.shutdownHook(() -> KestraContext.getContext().shutdown());
if (flowPath != null) {
try {
@@ -124,8 +126,6 @@ public class StandAloneCommand extends AbstractServerCommand {
fileWatcher.startListeningFromConfig();
}
this.shutdownHook(standAloneRunner::close);
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -1,24 +1,25 @@
package io.kestra.cli.commands.servers;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.models.ServerType;
import io.kestra.core.runners.ExecutorInterface;
import io.kestra.core.runners.IndexerInterface;
import io.kestra.core.utils.Await;
import io.kestra.core.utils.ExecutorsUtils;
import io.kestra.core.services.SkipExecutionService;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import picocli.CommandLine.Option;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@CommandLine.Command(
name = "webserver",
description = "start the webserver"
description = "Start the Kestra webserver"
)
@Slf4j
public class WebServerCommand extends AbstractServerCommand {
@@ -30,11 +31,17 @@ public class WebServerCommand extends AbstractServerCommand {
@Inject
private ExecutorsUtils executorsUtils;
@Inject
private SkipExecutionService skipExecutionService;
@Option(names = {"--no-tutorials"}, description = "Flag to disable auto-loading of tutorial flows.")
boolean tutorialsDisabled = false;
private boolean tutorialsDisabled = false;
@Option(names = {"--no-indexer"}, description = "Flag to disable starting an embedded indexer.")
boolean indexerDisabled = false;
private boolean indexerDisabled = false;
@CommandLine.Option(names = {"--skip-indexer-records"}, split=",", description = "a list of indexer record keys, separated by a coma; for troubleshooting purpose only")
private List<String> skipIndexerRecords = Collections.emptyList();
@Override
public boolean isFlowAutoLoadEnabled() {
@@ -50,6 +57,8 @@ public class WebServerCommand extends AbstractServerCommand {
@Override
public Integer call() throws Exception {
this.skipExecutionService.setSkipIndexerRecords(skipIndexerRecords);
super.call();
// start the indexer
@@ -57,20 +66,11 @@ public class WebServerCommand extends AbstractServerCommand {
log.info("Starting an embedded indexer, this can be disabled by using `--no-indexer`.");
poolExecutor = executorsUtils.cachedThreadPool("webserver-indexer");
poolExecutor.execute(applicationContext.getBean(IndexerInterface.class));
shutdownHook(false, () -> poolExecutor.shutdown());
}
log.info("Webserver started");
this.shutdownHook(() -> {
this.close();
KestraContext.getContext().shutdown();
});
Await.until(() -> !this.applicationContext.isRunning());
return 0;
}
private void close() {
if (this.poolExecutor != null) {
this.poolExecutor.shutdown();
}
}
}

View File

@@ -7,7 +7,6 @@ import io.kestra.core.runners.Worker;
import io.kestra.core.utils.Await;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import picocli.CommandLine.Option;
@@ -16,18 +15,17 @@ import java.util.UUID;
@CommandLine.Command(
name = "worker",
description = "start a worker"
description = "Start the Kestra worker"
)
@Slf4j
public class WorkerCommand extends AbstractServerCommand {
@Inject
private ApplicationContext applicationContext;
@Option(names = {"-t", "--thread"}, description = "the max number of worker threads, defaults to two times the number of available processors")
@Option(names = {"-t", "--thread"}, description = "The max number of worker threads, defaults to four times the number of available processors")
private int thread = defaultWorkerThread();
@Option(names = {"-g", "--worker-group"}, description = "the worker group key, must match the regex [a-zA-Z0-9_-]+ (EE only)")
@Option(names = {"-g", "--worker-group"}, description = "The worker group key, must match the regex [a-zA-Z0-9_-]+ (EE only)")
private String workerGroupKey = null;
@SuppressWarnings("unused")
@@ -39,8 +37,11 @@ public class WorkerCommand extends AbstractServerCommand {
@Override
public Integer call() throws Exception {
KestraContext.getContext().injectWorkerConfigs(thread, workerGroupKey);
super.call();
this.shutdownHook(() -> KestraContext.getContext().shutdown());
if (this.workerGroupKey != null && !this.workerGroupKey.matches("[a-zA-Z0-9_-]+")) {
throw new IllegalArgumentException("The --worker-group option must match the [a-zA-Z0-9_-]+ pattern");
}
@@ -52,13 +53,6 @@ public class WorkerCommand extends AbstractServerCommand {
worker.run();
if (this.workerGroupKey != null) {
log.info("Worker started with {} thread(s) in group '{}'", this.thread, this.workerGroupKey);
}
else {
log.info("Worker started with {} thread(s)", this.thread);
}
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -12,7 +12,7 @@ import java.util.List;
@CommandLine.Command(
name = "reindex",
description = "reindex all records of a type: read them from the database then update them",
description = "Reindex all records of a type: read them from the database then update them",
mixinStandardHelpOptions = true
)
@Slf4j

View File

@@ -10,7 +10,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "sys",
description = "handle systems maintenance",
description = "Manage system maintenance mode",
mixinStandardHelpOptions = true,
subcommands = {
ReindexCommand.class,

View File

@@ -1,6 +1,5 @@
package io.kestra.cli.commands.sys.database;
import ch.qos.logback.classic.Level;
import io.kestra.cli.AbstractCommand;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;

View File

@@ -11,7 +11,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "template",
description = "handle templates",
description = "Manage templates",
mixinStandardHelpOptions = true,
subcommands = {
TemplateNamespaceCommand.class,

View File

@@ -19,7 +19,7 @@ import java.nio.file.Path;
@CommandLine.Command(
name = "export",
description = "export templates to a zip file",
description = "Export templates to a ZIP file",
mixinStandardHelpOptions = true
)
@Slf4j
@@ -31,10 +31,10 @@ public class TemplateExportCommand extends AbstractApiCommand {
@Inject
private ApplicationContext applicationContext;
@CommandLine.Option(names = {"--namespace"}, description = "the namespace of templates to export")
@CommandLine.Option(names = {"--namespace"}, description = "The namespace of templates to export")
public String namespace;
@CommandLine.Parameters(index = "0", description = "the directory to export the file to")
@CommandLine.Parameters(index = "0", description = "The directory to export the file to")
public Path directory;
@Override

View File

@@ -12,7 +12,7 @@ import java.util.Collections;
@CommandLine.Command(
name = "validate",
description = "validate a template"
description = "Validate a template"
)
@TemplateEnabled
public class TemplateValidateCommand extends AbstractValidateCommand {

View File

@@ -10,7 +10,7 @@ import picocli.CommandLine;
@CommandLine.Command(
name = "namespace",
description = "handle namespace templates",
description = "Manage namespace templates",
mixinStandardHelpOptions = true,
subcommands = {
TemplateNamespaceUpdateCommand.class,

View File

@@ -21,7 +21,7 @@ import jakarta.validation.ConstraintViolationException;
@CommandLine.Command(
name = "update",
description = "handle namespace templates",
description = "Update namespace templates",
mixinStandardHelpOptions = true
)
@Slf4j

View File

@@ -1,153 +0,0 @@
package io.kestra.cli.plugins;
import com.google.common.collect.ImmutableList;
import io.micronaut.context.annotation.Value;
import io.micronaut.core.annotation.Nullable;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.*;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.transport.file.FileTransporterFactory;
import org.eclipse.aether.transport.http.HttpTransporterFactory;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Singleton
@Slf4j
public class PluginDownloader {
private final List<RepositoryConfig> repositoryConfigs;
private final RepositorySystem system;
private final RepositorySystemSession session;
@Inject
public PluginDownloader(
List<RepositoryConfig> repositoryConfigs,
@Nullable @Value("${kestra.plugins.local-repository-path}") String localRepositoryPath
) {
this.repositoryConfigs = repositoryConfigs;
this.system = repositorySystem();
this.session = repositorySystemSession(system, localRepositoryPath);
}
public void addRepository(RepositoryConfig repositoryConfig) {
this.repositoryConfigs.add(repositoryConfig);
}
public List<URL> resolve(List<String> dependencies) throws MalformedURLException, ArtifactResolutionException, VersionRangeResolutionException {
List<RemoteRepository> repositories = remoteRepositories();
List<ArtifactResult> artifactResults = resolveArtifacts(repositories, dependencies);
List<URL> localUrls = resolveUrls(artifactResults);
log.debug("Resolved Plugin {} with {}", dependencies, localUrls);
return localUrls;
}
private List<RemoteRepository> remoteRepositories() {
return repositoryConfigs
.stream()
.map(repositoryConfig -> {
var build = new RemoteRepository.Builder(
repositoryConfig.getId(),
"default",
repositoryConfig.getUrl()
);
if (repositoryConfig.getBasicAuth() != null) {
var authenticationBuilder = new AuthenticationBuilder();
authenticationBuilder.addUsername(repositoryConfig.getBasicAuth().getUsername());
authenticationBuilder.addPassword(repositoryConfig.getBasicAuth().getPassword());
build.setAuthentication(authenticationBuilder.build());
}
return build.build();
})
.toList();
}
private static RepositorySystem repositorySystem() {
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
locator.addService(TransporterFactory.class, FileTransporterFactory.class);
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
return locator.getService(RepositorySystem.class);
}
private RepositorySystemSession repositorySystemSession(RepositorySystem system, String localRepositoryPath) {
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
if (localRepositoryPath == null) {
try {
final String tempDirectory = Files.createTempDirectory(this.getClass().getSimpleName().toLowerCase())
.toAbsolutePath()
.toString();
localRepositoryPath = tempDirectory;
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
FileUtils.deleteDirectory(new File(tempDirectory));
} catch (IOException e) {
throw new RuntimeException(e);
}
}));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
LocalRepository localRepo = new LocalRepository(localRepositoryPath);
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
return session;
}
private List<ArtifactResult> resolveArtifacts(List<RemoteRepository> repositories, List<String> dependencies) throws ArtifactResolutionException, VersionRangeResolutionException {
List<ArtifactResult> results = new ArrayList<>(dependencies.size());
for (String dependency: dependencies) {
var artifact = new DefaultArtifact(dependency);
var version = system.resolveVersionRange(session, new VersionRangeRequest(artifact, repositories, null));
var artifactRequest = new ArtifactRequest(
new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), "jar", version.getHighestVersion().toString()),
repositories,
null
);
var artifactResult = system.resolveArtifact(session, artifactRequest);
results.add(artifactResult);
}
return results;
}
private List<URL> resolveUrls(List<ArtifactResult> artifactResults) throws MalformedURLException {
ImmutableList.Builder<URL> urls = ImmutableList.builder();
for (ArtifactResult artifactResult : artifactResults) {
URL url;
url = artifactResult.getArtifact().getFile().toPath().toUri().toURL();
urls.add(url);
}
return urls.build();
}
}

View File

@@ -1,30 +0,0 @@
package io.kestra.cli.plugins;
import io.micronaut.context.annotation.EachProperty;
import io.micronaut.context.annotation.Parameter;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@EachProperty("kestra.plugins.repositories")
@Getter
@AllArgsConstructor
@Builder
public class RepositoryConfig {
String id;
String url;
BasicAuth basicAuth;
@Getter
@AllArgsConstructor
public static class BasicAuth {
private String username;
private String password;
}
public RepositoryConfig(@Parameter String id) {
this.id = id;
}
}

View File

@@ -7,6 +7,7 @@ import io.kestra.core.models.validations.ModelValidator;
import io.kestra.core.repositories.FlowRepositoryInterface;
import io.kestra.core.serializers.YamlParser;
import io.kestra.core.services.FlowListenersInterface;
import io.kestra.core.services.PluginDefaultService;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.annotation.Value;
import io.micronaut.scheduling.io.watch.FileWatchConfiguration;
@@ -36,6 +37,9 @@ public class FileChangedEventListener {
@Inject
private FlowRepositoryInterface flowRepositoryInterface;
@Inject
private PluginDefaultService pluginDefaultService;
@Inject
private YamlParser yamlParser;
@@ -64,7 +68,7 @@ public class FileChangedEventListener {
public void startListeningFromConfig() throws IOException, InterruptedException {
if (fileWatchConfiguration != null && fileWatchConfiguration.isEnabled()) {
this.flowFilesManager = new LocalFlowFileWatcher(flowRepositoryInterface);
this.flowFilesManager = new LocalFlowFileWatcher(flowRepositoryInterface, pluginDefaultService);
List<Path> paths = fileWatchConfiguration.getPaths();
this.setup(paths);
@@ -107,7 +111,6 @@ public class FileChangedEventListener {
} else {
log.info("File watching is disabled.");
}
}
public void startListening(List<Path> paths) throws IOException, InterruptedException {
@@ -118,60 +121,64 @@ public class FileChangedEventListener {
WatchKey key;
while ((key = watchService.take()) != null) {
for (WatchEvent<?> watchEvent : key.pollEvents()) {
WatchEvent.Kind<?> kind = watchEvent.kind();
Path entry = (Path) watchEvent.context();
try {
WatchEvent.Kind<?> kind = watchEvent.kind();
Path entry = (Path) watchEvent.context();
if (entry.toString().endsWith(".yml") || entry.toString().endsWith(".yaml")) {
if (entry.toString().endsWith(".yml") || entry.toString().endsWith(".yaml")) {
if (kind == StandardWatchEventKinds.ENTRY_CREATE || kind == StandardWatchEventKinds.ENTRY_MODIFY) {
if (kind == StandardWatchEventKinds.ENTRY_CREATE || kind == StandardWatchEventKinds.ENTRY_MODIFY) {
Path filePath = ((Path) key.watchable()).resolve(entry);
if (Files.isDirectory(filePath)) {
loadFlowsFromFolder(filePath);
} else {
Path filePath = ((Path) key.watchable()).resolve(entry);
if (Files.isDirectory(filePath)) {
loadFlowsFromFolder(filePath);
} else {
try {
String content = Files.readString(filePath, Charset.defaultCharset());
try {
String content = Files.readString(filePath, Charset.defaultCharset());
Optional<Flow> flow = parseFlow(content, entry);
if (flow.isPresent()) {
if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
// Check if we already have a file with the given path
if (flows.stream().anyMatch(flowWithPath -> flowWithPath.getPath().equals(filePath.toString()))) {
Optional<FlowWithPath> previous = flows.stream().filter(flowWithPath -> flowWithPath.getPath().equals(filePath.toString())).findFirst();
// Check if Flow from file has id/namespace updated
if (previous.isPresent() && !previous.get().uidWithoutRevision().equals(flow.get().uidWithoutRevision())) {
flows.removeIf(flowWithPath -> flowWithPath.getPath().equals(filePath.toString()));
flowFilesManager.deleteFlow(previous.get().getTenantId(), previous.get().getNamespace(), previous.get().getId());
Optional<Flow> flow = parseFlow(content, entry);
if (flow.isPresent()) {
if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
// Check if we already have a file with the given path
if (flows.stream().anyMatch(flowWithPath -> flowWithPath.getPath().equals(filePath.toString()))) {
Optional<FlowWithPath> previous = flows.stream().filter(flowWithPath -> flowWithPath.getPath().equals(filePath.toString())).findFirst();
// Check if Flow from file has id/namespace updated
if (previous.isPresent() && !previous.get().uidWithoutRevision().equals(flow.get().uidWithoutRevision())) {
flows.removeIf(flowWithPath -> flowWithPath.getPath().equals(filePath.toString()));
flowFilesManager.deleteFlow(previous.get().getTenantId(), previous.get().getNamespace(), previous.get().getId());
flows.add(FlowWithPath.of(flow.get(), filePath.toString()));
}
} else {
flows.add(FlowWithPath.of(flow.get(), filePath.toString()));
}
} else {
flows.add(FlowWithPath.of(flow.get(), filePath.toString()));
}
} else {
flows.add(FlowWithPath.of(flow.get(), filePath.toString()));
flowFilesManager.createOrUpdateFlow(flow.get(), content);
log.info("Flow {} from file {} has been created or modified", flow.get().getId(), entry);
}
flowFilesManager.createOrUpdateFlow(flow.get(), content);
log.info("Flow {} from file {} has been created or modified", flow.get().getId(), entry);
} catch (NoSuchFileException e) {
log.error("File not found: {}", entry, e);
} catch (IOException e) {
log.error("Error reading file: {}", entry, e);
}
} catch (NoSuchFileException e) {
log.error("File not found: {}", entry, e);
} catch (IOException e) {
log.error("Error reading file: {}", entry, e);
}
} else {
Path filePath = ((Path) key.watchable()).resolve(entry);
flows.stream()
.filter(flow -> flow.getPath().equals(filePath.toString()))
.findFirst()
.ifPresent(flowWithPath -> {
flowFilesManager.deleteFlow(flowWithPath.getTenantId(), flowWithPath.getNamespace(), flowWithPath.getId());
this.flows.removeIf(fwp -> fwp.uidWithoutRevision().equals(flowWithPath.uidWithoutRevision()));
});
}
} else {
Path filePath = ((Path) key.watchable()).resolve(entry);
flows.stream()
.filter(flow -> flow.getPath().equals(filePath.toString()))
.findFirst()
.ifPresent(flowWithPath -> {
flowFilesManager.deleteFlow(flowWithPath.getTenantId(), flowWithPath.getNamespace(), flowWithPath.getId());
this.flows.removeIf(fwp -> fwp.uidWithoutRevision().equals(flowWithPath.uidWithoutRevision()));
});
}
} catch (Exception e) {
log.error("Unexpected error while watching flows", e);
}
}
key.reset();
@@ -230,7 +237,8 @@ public class FileChangedEventListener {
private Optional<Flow> parseFlow(String content, Path entry) {
try {
Flow flow = yamlParser.parse(content, Flow.class);
modelValidator.validate(flow);
FlowWithSource withPluginDefault = pluginDefaultService.injectDefaults(FlowWithSource.of(flow, content));
modelValidator.validate(withPluginDefault);
return Optional.of(flow);
} catch (ConstraintViolationException e) {
log.warn("Error while parsing flow: {}", entry, e);

View File

@@ -3,32 +3,36 @@ package io.kestra.cli.services;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.flows.FlowWithSource;
import io.kestra.core.repositories.FlowRepositoryInterface;
import io.micronaut.context.annotation.Requires;
import io.kestra.core.services.PluginDefaultService;
import lombok.extern.slf4j.Slf4j;
@Requires(property = "micronaut.io.watch.enabled", value = "true")
@Slf4j
public class LocalFlowFileWatcher implements FlowFilesManager {
private FlowRepositoryInterface flowRepositoryInterface;
private final FlowRepositoryInterface flowRepository;
private final PluginDefaultService pluginDefaultService;
public LocalFlowFileWatcher(FlowRepositoryInterface flowRepositoryInterface) {
this.flowRepositoryInterface = flowRepositoryInterface;
public LocalFlowFileWatcher(FlowRepositoryInterface flowRepository, PluginDefaultService pluginDefaultService) {
this.flowRepository = flowRepository;
this.pluginDefaultService = pluginDefaultService;
}
@Override
public FlowWithSource createOrUpdateFlow(Flow flow, String content) {
return flowRepositoryInterface.findById(null, flow.getNamespace(), flow.getId())
.map(previous -> flowRepositoryInterface.update(flow, previous, content, flow))
.orElseGet(() -> flowRepositoryInterface.create(flow, content, flow));
FlowWithSource withDefault = pluginDefaultService.injectDefaults(FlowWithSource.of(flow, content));
return flowRepository.findById(null, flow.getNamespace(), flow.getId())
.map(previous -> flowRepository.update(flow, previous, content, withDefault))
.orElseGet(() -> flowRepository.create(flow, content, withDefault));
}
@Override
public void deleteFlow(FlowWithSource toDelete) {
flowRepositoryInterface.findByIdWithSource(toDelete.getTenantId(), toDelete.getNamespace(), toDelete.getId()).ifPresent(flowRepositoryInterface::delete);
log.error("Flow {} has been deleted", toDelete.getId());
flowRepository.findByIdWithSource(toDelete.getTenantId(), toDelete.getNamespace(), toDelete.getId()).ifPresent(flowRepository::delete);
log.info("Flow {} has been deleted", toDelete.getId());
}
@Override
public void deleteFlow(String tenantId, String namespace, String id) {
flowRepositoryInterface.findByIdWithSource(tenantId, namespace, id).ifPresent(flowRepositoryInterface::delete);
log.error("Flow {} has been deleted", id);
flowRepository.findByIdWithSource(tenantId, namespace, id).ifPresent(flowRepository::delete);
log.info("Flow {} has been deleted", id);
}
}

View File

@@ -1,6 +1,9 @@
micronaut:
application:
name: kestra
# Disable Micronaut Open Telemetry
otel:
enabled: false
router:
static-resources:
swagger:
@@ -12,6 +15,9 @@ micronaut:
static:
paths: classpath:static
mapping: /static/**
root:
paths: classpath:root
mapping: /**
server:
max-request-size: 10GB
multipart:
@@ -37,6 +43,7 @@ micronaut:
exclusions:
- /ui/.+
- /health
- /health/.+
- /prometheus
http-version: HTTP_1_1
caches:
@@ -70,6 +77,13 @@ micronaut:
type: scheduled
core-pool-size: 1
# Disable OpenTelemetry metrics by default, users that need it must enable it and configure the collector URL.
metrics:
export:
otlp:
enabled: false
# url: http://localhost:4318/v1/metrics
jackson:
serialization:
writeDatesAsTimestamps: false
@@ -134,6 +148,11 @@ kestra:
initial-delay: 1h
fixed-delay: 1h
retention: 7d
types:
- type : io.kestra.core.models.executions.LogEntry
retention: 1h
- type: io.kestra.core.models.executions.MetricEntry
retention: 1h
plugins:
repositories:
@@ -159,6 +178,9 @@ kestra:
metrics:
prefix: kestra
traces:
root: DISABLED
server:
basic-auth:
enabled: false
@@ -193,3 +215,12 @@ kestra:
prefixes:
- system.
- internal.
otel:
exclusions:
- /ping
- /metrics
- /health
- /env
- /prometheus
propagators: tracecontext, baggage

View File

@@ -45,4 +45,20 @@ class AppTest {
assertThat(out.toString(), startsWith("Usage: kestra server " + serverType));
}
}
@Test
void missingRequiredParamsPrintHelpInsteadOfException() {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setErr(new PrintStream(out));
final String[] argsWithMissingParams = new String[]{"flow", "namespace", "update"};
try (ApplicationContext ctx = App.applicationContext(App.class, argsWithMissingParams)) {
new CommandLine(App.class, new MicronautFactory(ctx)).execute(argsWithMissingParams);
assertThat(out.toString(), startsWith("Missing required parameters: "));
assertThat(out.toString(), containsString("Usage: kestra flow namespace update "));
assertThat(out.toString(), not(containsString("MissingParameterException: ")));
}
}
}

View File

@@ -5,6 +5,7 @@ import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import io.micronaut.runtime.server.EmbeddedServer;
import org.junit.jupiter.api.Test;
import org.junitpioneer.jupiter.RetryingTest;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
@@ -15,7 +16,7 @@ import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.StringContains.containsString;
class FlowCreateOrUpdateCommandTest {
@Test
@RetryingTest(5) // flaky on CI but cannot be reproduced even with 100 repetitions
void runWithDelete() {
URL directory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("flows");
ByteArrayOutputStream out = new ByteArrayOutputStream();

View File

@@ -27,7 +27,7 @@ class FlowDotCommandTest {
Integer call = PicocliRunner.call(FlowDotCommand.class, ctx, args);
assertThat(call, is(0));
assertThat(out.toString(), containsString("\"root.date\"[shape=box,label=\"date\"];"));
assertThat(out.toString(), containsString("\"root.date\"[shape=box];"));
}
}
}

View File

@@ -32,6 +32,8 @@ class FlowExportCommandTest {
// we use the update command to add flows to extract
String[] updateArgs = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -44,6 +46,8 @@ class FlowExportCommandTest {
// then we export them
String[] exportArgs = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",

View File

@@ -28,6 +28,8 @@ class FlowUpdatesCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -41,6 +43,8 @@ class FlowUpdatesCommandTest {
out.reset();
args = new String[]{
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -70,6 +74,8 @@ class FlowUpdatesCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -84,6 +90,8 @@ class FlowUpdatesCommandTest {
// no "delete" arg should behave as no-delete
args = new String[]{
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -96,6 +104,8 @@ class FlowUpdatesCommandTest {
out.reset();
args = new String[]{
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -109,6 +119,35 @@ class FlowUpdatesCommandTest {
}
}
@Test
void invalidWithNamespace() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setErr(new PrintStream(out));
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
EmbeddedServer embeddedServer = ctx.getBean(EmbeddedServer.class);
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--namespace",
"io.kestra.cli",
"--delete",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("Invalid entity: flow.namespace: io.kestra.outsider_quattro_-1 - flow namespace is invalid"));
}
}
@Test
void helper() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("helper");
@@ -121,6 +160,8 @@ class FlowUpdatesCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",

View File

@@ -0,0 +1,58 @@
package io.kestra.cli.commands.flows;
import static org.assertj.core.api.Assertions.assertThat;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import io.micronaut.runtime.server.EmbeddedServer;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.net.URL;
import org.junit.jupiter.api.Test;
class FlowsSyncFromSourceCommandTest {
@Test
void updateAllFlowsFromSource() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
EmbeddedServer embeddedServer = ctx.getBean(EmbeddedServer.class);
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--delete",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString()).contains("successfully updated !");
out.reset();
args = new String[]{
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word"
};
PicocliRunner.call(FlowsSyncFromSourceCommand.class, ctx, args);
assertThat(out.toString()).contains("4 flow(s) successfully updated!");
assertThat(out.toString()).contains("- io.kestra.outsider.quattro");
assertThat(out.toString()).contains("- io.kestra.cli.second");
assertThat(out.toString()).contains("- io.kestra.cli.third");
assertThat(out.toString()).contains("- io.kestra.cli.first");
}
}
}

View File

@@ -46,6 +46,8 @@ class TemplateValidateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",

View File

@@ -31,6 +31,8 @@ class NamespaceFilesUpdateCommandTest {
String to = "/some/directory";
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -61,6 +63,8 @@ class NamespaceFilesUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -90,6 +94,8 @@ class NamespaceFilesUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",

View File

@@ -28,6 +28,8 @@ class KvUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -54,6 +56,8 @@ class KvUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -80,6 +84,8 @@ class KvUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -108,6 +114,8 @@ class KvUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -134,6 +142,8 @@ class KvUpdateCommandTest {
embeddedServer.start();
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",
@@ -167,6 +177,8 @@ class KvUpdateCommandTest {
Files.write(file.toPath(), "{\"some\":\"json\",\"from\":\"file\"}".getBytes());
String[] args = {
"--plugins",
"/tmp", // pass this arg because it can cause failure
"--server",
embeddedServer.getURL().toString(),
"--user",

View File

@@ -0,0 +1,27 @@
package io.kestra.cli.commands.plugins;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.StringContains.containsString;
class PluginCommandTest {
@Test
void shouldGetHelps() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
PicocliRunner.call(PluginCommand.class, ctx);
assertThat(out.toString(), containsString("Usage: kestra plugins"));
}
}
}

View File

@@ -9,7 +9,6 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
@@ -17,7 +16,7 @@ import static org.hamcrest.Matchers.*;
class PluginInstallCommandTest {
@Test
void fixedVersion() throws IOException {
void shouldInstallPluginLocallyGivenFixedVersion() throws IOException {
Path pluginsPath = Files.createTempDirectory(PluginInstallCommandTest.class.getSimpleName());
pluginsPath.toFile().deleteOnExit();
@@ -28,12 +27,12 @@ class PluginInstallCommandTest {
List<Path> files = Files.list(pluginsPath).toList();
assertThat(files.size(), is(1));
assertThat(files.getFirst().getFileName().toString(), is("plugin-notifications-0.6.0.jar"));
assertThat(files.getFirst().getFileName().toString(), is("io_kestra_plugin__plugin-notifications__0_6_0.jar"));
}
}
@Test
void latestVersion() throws IOException {
void shouldInstallPluginLocallyGivenLatestVersion() throws IOException {
Path pluginsPath = Files.createTempDirectory(PluginInstallCommandTest.class.getSimpleName());
pluginsPath.toFile().deleteOnExit();
@@ -44,13 +43,13 @@ class PluginInstallCommandTest {
List<Path> files = Files.list(pluginsPath).toList();
assertThat(files.size(), is(1));
assertThat(files.getFirst().getFileName().toString(), startsWith("plugin-notifications"));
assertThat(files.getFirst().getFileName().toString(), startsWith("io_kestra_plugin__plugin-notifications__"));
assertThat(files.getFirst().getFileName().toString(), not(containsString("LATEST")));
}
}
@Test
void rangeVersion() throws IOException {
void shouldInstallPluginLocallyGivenRangeVersion() throws IOException {
Path pluginsPath = Files.createTempDirectory(PluginInstallCommandTest.class.getSimpleName());
pluginsPath.toFile().deleteOnExit();
@@ -62,7 +61,7 @@ class PluginInstallCommandTest {
List<Path> files = Files.list(pluginsPath).toList();
assertThat(files.size(), is(1));
assertThat(files.getFirst().getFileName().toString(), is("storage-s3-0.12.1.jar"));
assertThat(files.getFirst().getFileName().toString(), is("io_kestra_storage__storage-s3__0_12_1.jar"));
}
}
}

View File

@@ -4,7 +4,6 @@ import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
@@ -25,7 +24,7 @@ class PluginListCommandTest {
private static final String PLUGIN_TEMPLATE_TEST = "plugin-template-test-0.18.0-SNAPSHOT.jar";
@Test
void run() throws IOException, URISyntaxException {
void shouldListPluginsInstalledLocally() throws IOException, URISyntaxException {
Path pluginsPath = Files.createTempDirectory(PluginListCommandTest.class.getSimpleName());
pluginsPath.toFile().deleteOnExit();

View File

@@ -0,0 +1,105 @@
package io.kestra.cli.commands.plugins;
import com.github.tomakehurst.wiremock.junit5.WireMockTest;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Map;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
@WireMockTest(httpPort = 28181)
class PluginSearchCommandTest {
private ByteArrayOutputStream outputStreamCaptor;
private final PrintStream originalOut = System.out;
@BeforeEach
void setUp() {
outputStreamCaptor = new ByteArrayOutputStream();
System.setOut(new PrintStream(outputStreamCaptor));
}
@AfterEach
void tearDown() {
System.setOut(originalOut);
}
@Test
void searchWithExactMatch() {
stubFor(get(urlEqualTo("/v1/plugins"))
.willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBody("""
[
{
"name": "plugin-notifications",
"title": "Notifications",
"group": "io.kestra.plugin",
"version": "0.6.0"
},
{
"name": "plugin-scripts",
"title": "Scripts",
"group": "io.kestra.plugin",
"version": "0.5.0"
}
]
""")));
try (ApplicationContext ctx = ApplicationContext.builder(Environment.CLI, Environment.TEST)
.properties(Map.of("micronaut.http.services.api.url", "http://localhost:28181"))
.start()) {
String[] args = {"notifications"};
PicocliRunner.call(PluginSearchCommand.class, ctx, args);
String output = outputStreamCaptor.toString().trim();
assertThat(output, containsString("Found 1 plugins matching 'notifications'"));
assertThat(output, containsString("plugin-notifications"));
assertThat(output, not(containsString("plugin-scripts")));
}
}
@Test
void searchWithEmptyQuery() {
stubFor(get(urlEqualTo("/v1/plugins"))
.willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBody("""
[
{
"name": "plugin-notifications",
"title": "Notifications",
"group": "io.kestra.plugin",
"version": "0.6.0"
},
{
"name": "plugin-scripts",
"title": "Scripts",
"group": "io.kestra.plugin",
"version": "0.5.0"
}
]
""")));
try (ApplicationContext ctx = ApplicationContext.builder(Environment.CLI, Environment.TEST)
.properties(Map.of("micronaut.http.services.api.url", "http://localhost:28181"))
.start()) {
String[] args = {""};
PicocliRunner.call(PluginSearchCommand.class, ctx, args);
String output = outputStreamCaptor.toString().trim();
assertThat(output, containsString("Found 2 plugins"));
assertThat(output, containsString("plugin-notifications"));
assertThat(output, containsString("plugin-scripts"));
}
}
}

View File

@@ -0,0 +1,131 @@
package io.kestra.cli.services;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.repositories.FlowRepositoryInterface;
import io.kestra.core.utils.Await;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.*;
import org.junitpioneer.jupiter.RetryingTest;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
import static io.kestra.core.utils.Rethrow.throwRunnable;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
@MicronautTest(environments = {"test", "file-watch"}, transactional = false)
class FileChangedEventListenerTest {
public static final String FILE_WATCH = "build/file-watch";
@Inject
private FileChangedEventListener fileWatcher;
@Inject
private FlowRepositoryInterface flowRepository;
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
private final AtomicBoolean started = new AtomicBoolean(false);
@BeforeAll
static void setup() throws IOException {
if (!Files.exists(Path.of(FILE_WATCH))) {
Files.createDirectories(Path.of(FILE_WATCH));
}
}
@AfterAll
static void tearDown() throws IOException {
if (Files.exists(Path.of(FILE_WATCH))) {
FileUtils.deleteDirectory(Path.of(FILE_WATCH).toFile());
}
}
@BeforeEach
void beforeEach() throws Exception {
if (started.compareAndSet(false, true)) {
executorService.execute(throwRunnable(() -> fileWatcher.startListeningFromConfig()));
}
}
@RetryingTest(5) // Flaky on CI but always pass locally
void test() throws IOException, TimeoutException {
// remove the flow if it already exists
flowRepository.findByIdWithSource(null, "io.kestra.tests.watch", "myflow").ifPresent(flow -> flowRepository.delete(flow));
// create a basic flow
String flow = """
id: myflow
namespace: io.kestra.tests.watch
tasks:
- id: hello
type: io.kestra.plugin.core.log.Log
message: Hello World! 🚀
""";
Files.write(Path.of(FILE_WATCH + "/myflow.yaml"), flow.getBytes());
Await.until(
() -> flowRepository.findById(null, "io.kestra.tests.watch", "myflow").isPresent(),
Duration.ofMillis(100),
Duration.ofSeconds(10)
);
Flow myflow = flowRepository.findById(null, "io.kestra.tests.watch", "myflow").orElseThrow();
assertThat(myflow.getTasks(), hasSize(1));
assertThat(myflow.getTasks().getFirst().getId(), is("hello"));
assertThat(myflow.getTasks().getFirst().getType(), is("io.kestra.plugin.core.log.Log"));
// delete the flow
Files.delete(Path.of(FILE_WATCH + "/myflow.yaml"));
Await.until(
() -> flowRepository.findById(null, "io.kestra.tests.watch", "myflow").isEmpty(),
Duration.ofMillis(100),
Duration.ofSeconds(10)
);
}
@RetryingTest(5) // Flaky on CI but always pass locally
void testWithPluginDefault() throws IOException, TimeoutException {
// remove the flow if it already exists
flowRepository.findByIdWithSource(null, "io.kestra.tests.watch", "pluginDefault").ifPresent(flow -> flowRepository.delete(flow));
// create a flow with plugin default
String pluginDefault = """
id: pluginDefault
namespace: io.kestra.tests.watch
tasks:
- id: helloWithDefault
type: io.kestra.plugin.core.log.Log
pluginDefaults:
- type: io.kestra.plugin.core.log.Log
values:
message: Hello World!
""";
Files.write(Path.of(FILE_WATCH + "/plugin-default.yaml"), pluginDefault.getBytes());
Await.until(
() -> flowRepository.findById(null, "io.kestra.tests.watch", "pluginDefault").isPresent(),
Duration.ofMillis(100),
Duration.ofSeconds(10)
);
Flow pluginDefaultFlow = flowRepository.findById(null, "io.kestra.tests.watch", "pluginDefault").orElseThrow();
assertThat(pluginDefaultFlow.getTasks(), hasSize(1));
assertThat(pluginDefaultFlow.getTasks().getFirst().getId(), is("helloWithDefault"));
assertThat(pluginDefaultFlow.getTasks().getFirst().getType(), is("io.kestra.plugin.core.log.Log"));
// delete both files
Files.delete(Path.of(FILE_WATCH + "/plugin-default.yaml"));
Await.until(
() -> flowRepository.findById(null, "io.kestra.tests.watch", "pluginDefault").isEmpty(),
Duration.ofMillis(100),
Duration.ofSeconds(10)
);
}
}

View File

@@ -0,0 +1,12 @@
micronaut:
io:
watch:
enabled: true
paths:
- build/file-watch
kestra:
repository:
type: memory
queue:
type: memory

76
codecov.yml Normal file
View File

@@ -0,0 +1,76 @@
component_management:
individual_components:
- component_id: cli
name: Cli
paths:
- cli/**
- component_id: core
name: Core
paths:
- core/**
- component_id: e2e-tests
name: End to End
paths:
- e2e-tests/**
- component_id: jdbc
name: Jdbc
paths:
- jdbc/**
- component_id: jdbc-h2
name: Jdbc H2
paths:
- jdbc-h2/**
- component_id: jdbc-mysql
name: Jdbc Mysql
paths:
- jdbc-mysql/**
- component_id: jdbc-postgres
name: Jdbc Postgres
paths:
- jdbc-postgres/**
- component_id: model
name: Model
paths:
- model/**
- component_id: processor
name: Processor
paths:
- processor/**
- component_id: repository-memory
name: Repository Memory
paths:
- repository-memory/**
- component_id: runner-memory
name: Runner Memory
paths:
- runner-memory/**
- component_id: script
name: Script
paths:
- script/**
- component_id: storage-local
name: Storage Local
paths:
- storage-local/**
- component_id: tests
name: Tests
paths:
- tests/**
- component_id: ui
name: Ui
paths:
- ui/**
- component_id: webserver
name: Webserver
paths:
- webserver/**
flag_management:
default_rules:
carryforward: true
statuses:
- type: project
target: 80%
threshold: 1%
- type: patch
target: 90%

View File

@@ -36,6 +36,15 @@ dependencies {
implementation group: 'de.focus-shift', name: 'jollyday-jaxb'
implementation 'nl.basjes.gitignore:gitignore-reader'
implementation group: 'dev.failsafe', name: 'failsafe'
implementation 'com.github.ben-manes.caffeine:caffeine'
api 'org.apache.httpcomponents.client5:httpclient5'
// plugins
implementation 'org.apache.maven.resolver:maven-resolver-impl'
implementation 'org.apache.maven.resolver:maven-resolver-supplier'
implementation 'org.apache.maven.resolver:maven-resolver-connector-basic'
implementation 'org.apache.maven.resolver:maven-resolver-transport-file'
implementation 'org.apache.maven.resolver:maven-resolver-transport-http'
// scheduler
implementation group: 'com.cronutils', name: 'cron-utils'
@@ -64,4 +73,8 @@ dependencies {
testImplementation "io.micronaut:micronaut-http-client"
testImplementation "io.micronaut:micronaut-http-server-netty"
testImplementation "io.micronaut:micronaut-management"
testImplementation "org.testcontainers:testcontainers:1.20.6"
testImplementation "org.testcontainers:junit-jupiter:1.20.6"
testImplementation "org.bouncycastle:bcpkix-jdk18on:1.80"
}

View File

@@ -0,0 +1,92 @@
package io.kestra.core.cache;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Policy;
import com.github.benmanes.caffeine.cache.stats.CacheStats;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Function;
/**
* A No-Op implementation of a Caffeine Cache.
* Useful to disable caching but still use a cache to avoid if/else chains
*/
public class NoopCache<K, V> implements Cache<K, V> {
private static final ConcurrentMap<?, ?> EMPTY_MAP = new ConcurrentHashMap<>(0);
@Override
public @Nullable V getIfPresent(K key) {
return null;
}
@Override
public V get(K key, Function<? super K, ? extends V> mappingFunction) {
return mappingFunction.apply(key);
}
@Override
public Map<K, @NonNull V> getAllPresent(Iterable<? extends K> keys) {
return Collections.emptyMap();
}
@Override
public Map<K, @NonNull V> getAll(Iterable<? extends K> keys, Function<? super Set<? extends K>, ? extends Map<? extends K, ? extends @NonNull V>> mappingFunction) {
return Collections.emptyMap();
}
@Override
public void put(K key, @NonNull V value) {
// just do nothing
}
@Override
public void putAll(Map<? extends K, ? extends @NonNull V> map) {
// just do nothing
}
@Override
public void invalidate(K key) {
// just do nothing
}
@Override
public void invalidateAll(Iterable<? extends K> keys) {
// just do nothing
}
@Override
public void invalidateAll() {
// just do nothing
}
@Override
public long estimatedSize() {
return 0;
}
@Override
public CacheStats stats() {
return CacheStats.empty();
}
@Override
public ConcurrentMap<K, @NonNull V> asMap() {
return (ConcurrentMap<K, V>) EMPTY_MAP;
}
@Override
public void cleanUp() {
// just do nothing
}
@Override
public Policy<K, @NonNull V> policy() {
throw new UnsupportedOperationException();
}
}

Some files were not shown because too many files have changed in this diff Show More