Compare commits

...

1254 Commits

Author SHA1 Message Date
Florian Hussonnois
86aec88de4 chore(version): update to version 'v0.21.0-rc1-SNAPSHOT' 2025-01-31 15:54:24 +01:00
Bart Ledoux
f609d57a0c build: prevent corepack crash 2025-01-31 15:54:24 +01:00
Bart Ledoux
f3852a3c24 build: try and fix FE CI 2025-01-31 15:54:24 +01:00
GitHub Action
804ff6a81c chore(translations): auto generate values for languages other than english 2025-01-31 13:52:51 +01:00
Miloš Paunović
7869f90edd feat(ui): add finally block to no code editor (#7123) 2025-01-31 13:52:45 +01:00
Florian Hussonnois
2b72306b3d fix(ci): update scripts/workflows for plugins 2025-01-31 12:10:30 +01:00
Florian Hussonnois
f0d5d4b93f ci: fix workflow docker for all plugins 2025-01-31 11:45:45 +01:00
Florian Hussonnois
4e4ab80b2f ci: fix workflow docker 2025-01-31 11:45:31 +01:00
Florian Hussonnois
c33d08afda ci: update workflow docker 2025-01-31 11:45:17 +01:00
Florian Hussonnois
a246ac38f5 ci: update workflow docker 2025-01-31 11:45:07 +01:00
Florian Hussonnois
7bdaa81dee fix(ui): fix missing param kind for blueprint in flow editor (#7087)
fix: #7087
2025-01-31 11:44:11 +01:00
Miloš Paunović
6a1d831849 feat(ui): allow task re-ordering from no code editor (#7120) 2025-01-31 10:56:16 +01:00
Loïc Mathieu
95d2d1dfa3 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:48:11 +01:00
Loïc Mathieu
d12dd179c2 fix(core): subflow labels must not be overriden by parent flow ones 2025-01-31 09:47:59 +01:00
Loïc Mathieu
ceda5eb8ee fix(core): subflow validation didn't work anymore 2025-01-30 16:17:59 +01:00
Miloš Paunović
1301aaac76 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:37:09 +01:00
AJ Emerich
5f7468a9a4 fix(docs): remove custom dashboard website component
https://github.com/kestra-io/kestra/issues/7085
2025-01-30 12:16:30 +01:00
Miloš Paunović
aa24c888a3 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:42:37 +01:00
Loïc Mathieu
c792d9b6ea 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:57 +01:00
Loïc Mathieu
a921b95404 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:57 +01:00
Miloš Paunović
e46df069a9 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:33:11 +01:00
Loïc Mathieu
c08f4f24ca fix(script): AbstractExecScript.injectDefaults should throw IllegalVariableEvaluationException 2025-01-30 09:58:45 +01:00
Miloš Paunović
67b3937824 chore(ui): move apps link in left menu just below the flows (#7063) 2025-01-30 09:25:16 +01:00
Miloš Paunović
17e1623342 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 09:25:01 +01:00
Loïc Mathieu
d12fbf05b0 fix(core): restartForEachItem() is flaky
With this test change, running 100 tests with MySQL pass!
2025-01-29 17:11:14 +01:00
YannC
efa2d44e76 feat(webserver): if no date provided for dashboard, then use default timewindow 2025-01-29 16:37:27 +01:00
YannC
acdb46cea0 fix(ui): dynamic format date
close #7015
2025-01-29 16:37:21 +01:00
Loïc Mathieu
c1807516f5 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:52:10 +01:00
brian.mulier
ab796dff93 feat(ui): don't show deprecated tasks in the plugins list
closes #4526
2025-01-29 15:49:23 +01:00
Loïc Mathieu
2d98f909de fix(cli): flow watcher should compute plugin defaults
fixes #6908
2025-01-29 15:42:55 +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
brian.mulier
87cfb67dc9 fix(ui): custom bar chart was not grouping things properly 2024-12-03 11:20:16 +01:00
Loïc Mathieu
c2a28dadb5 feat(core): flow SLA is in beta 2024-12-03 09:11:27 +01:00
brian.mulier
3673a1700c fix(ui): breadcrumb on custom dashboards edit redirects to home 2024-12-02 19:41:25 +01:00
brian.mulier
971f9eef4e fix(ui): better responsiveness & layouts for custom dashboards 2024-12-02 19:32:48 +01:00
brian.mulier
c6503235e6 fix(ui): wrong Y axis name for bar charts 2024-12-02 19:10:03 +01:00
brian.mulier
8246a90b8a fix(ui): show durations properly in custom dashboards legends + better responsiveness 2024-12-02 19:02:59 +01:00
YannC
c41e2b8cb2 fix(CI): translations CI fixes 2024-12-02 18:03:19 +01:00
Loïc Mathieu
582d296169 fix(core): missing Precondition id didn't fail valdiation
Fixes #6247
2024-12-02 17:45:25 +01:00
brian.mulier
6f12b7e344 fix(ui): display durations properly in custom dashboards 2024-12-02 16:18:42 +01:00
brian.mulier
7e7706912f fix(ui): better tooltip for custom dashboards 2024-12-02 15:39:01 +01:00
Loïc Mathieu
7842679fec fix(jdbc): executionCount only on start date 2024-12-02 15:34:18 +01:00
Loïc Mathieu
0ade17ab22 fix(ui): force run icon disabling 2024-12-02 15:34:18 +01:00
Loïc Mathieu
a5741aa424 fix(core): subflow output computation 2024-12-02 14:59:36 +01:00
brian.mulier
4db76e31bd fix(*): handle table pagination 2024-12-02 14:05:43 +01:00
Miloš Paunović
7ac0f3cbd1 chore(ui): properly add comparator values to selected filters from url query parameters (#6239) 2024-12-02 13:46:40 +01:00
Florian Hussonnois
e506f7400b fix(core): add plugin types for apps in returned plugin docs 2024-12-02 10:13:01 +01:00
Miloš Paunović
9c58d7bb5b chore(ui): limit the width of filter dropdown (#6227) 2024-12-02 09:47:03 +01:00
Anna Geller
d066c17564 fix: attempt to fix formatting 2024-11-30 03:12:35 +01:00
Miloš Paunović
389a1561e9 chore(ui): add default first option for filters (#6216) 2024-11-29 22:38:25 +01:00
Miloš Paunović
0e3ff20120 chore(ui): tweak the size of the chart legends (#6215) 2024-11-29 22:31:47 +01:00
Loïc Mathieu
42f721fdec fix(core): subflow outputs (#6214) 2024-11-29 19:51:10 +01:00
brian.mulier
c78fe6455a fix(ui): restore error handling 2024-11-29 17:52:05 +01:00
Bart Ledoux
070ab119a7 refactor: remove console log 2024-11-29 16:52:29 +01:00
Ludovic DEHON
3f20b46dcb fix(ui): avoid blinking on button based on the execution status
relate to #5983
2024-11-29 16:46:00 +01:00
Loïc Mathieu
68e113c306 feat(core): implements equals() and hashCode() for Property 2024-11-29 15:07:25 +01:00
Loïc Mathieu
06474c0e9c feat(core): dymamic timeout and delay in the Pause task
Fixes #5338
2024-11-29 15:07:25 +01:00
Loïc Mathieu
a8577ab9f9 fix(core): deserialize duration from a float string 2024-11-29 15:07:25 +01:00
Loïc Mathieu
ec022c9145 fix(core): makes Subflow labels dynamic (again)
Fixes #6203
2024-11-29 15:06:41 +01:00
YannC
b332b0adea feat(core): Missing RegisteredPlugin (#6189)
* feat(core): Missing RegisteredPlugin

* fix: pebble task template

* feat(ui): allow to override documentation intro
2024-11-29 15:01:56 +01:00
brian.mulier
d0b3f1f078 fix(jdbc): avoid NPE in daily stats by providing start & end dates fallbacks
closes kestra-io/kestra-ee#2326
2024-11-29 14:48:20 +01:00
brian.mulier
b55ad0a752 fix(core): change default Pie chart display to DONUT 2024-11-29 14:17:17 +01:00
brian.mulier
4b6aef7d7d fix(ui): allow save default dashboard upon creation even without change 2024-11-29 14:15:51 +01:00
Miloš Paunović
b93b834998 fix(ui): prevent unnecessary endpoint calls on custom dashboard (#6201) 2024-11-29 14:01:58 +01:00
Anna Geller
9f66f39404 docs: update basics.md 2024-11-29 13:55:33 +01:00
Miloš Paunović
a5328b23cc fix(ui): properly parse date parameters from url and pass on the endpoints (#6200) 2024-11-29 13:28:27 +01:00
MilosPaunovic
6fa7eebecb fix(ci): generate translation checkouts with sha instead of branch 2024-11-29 13:23:35 +01:00
Barthélémy Ledoux
a6804ccfa7 fix: remove-some-js-warnings (#6195)
* remove some warnings

* remove last warning on plugins

* fix required alt
2024-11-29 11:54:20 +01:00
GitHub Action
8293a0f671 chore(translations): auto generate values for languages other than english 2024-11-29 10:36:07 +00:00
brian-mulier-p
4943f9ab6a feat(*): introduce custom dashboards (#6144)
closes kestra-io/kestra-ee#1711

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-29 11:35:01 +01:00
Bart Ledoux
8212106048 fix: avoid errors when flow has no inputs 2024-11-29 11:33:28 +01:00
Miloš Paunović
a3beb58db8 fix(ui): pass flow id as parameter for dashboard (#6194) 2024-11-29 10:23:14 +01:00
phuc
f6492156df Rename the printContext() pebble function to fetchContext() 2024-11-29 10:20:49 +01:00
phuc
7302fe52d7 Rename the printContext() pebble function to fetchContext() 2024-11-29 10:20:49 +01:00
Miloš Paunović
5cc80f1080 chore(ui): trigger filter search on text values (#6193) 2024-11-29 10:06:33 +01:00
Anna Geller
8eaa9630e7 docs: flow trigger example 2024-11-29 00:13:36 +01:00
Ludovic DEHON
2c6a9136dc fix(ui): button size on the trigger page 2024-11-29 00:10:50 +01:00
Ludovic DEHON
f4afecab1b fix(ui): input number range color
close #6168
2024-11-28 23:53:24 +01:00
Ludovic DEHON
2c6d4d66ec fix(ui): dashboard in progress status size 2024-11-28 23:27:12 +01:00
Ludovic DEHON
3bb80a4a79 feat(ui): add icon on filter bars 2024-11-28 23:27:12 +01:00
Barthélémy Ledoux
bb7b0beade fix: inputs for apps and select with expressions (#6188)
* remove two vue warnings

* remove a third warning

* remove warning oops

* use the inputs coming back from validate

* fix build

* better watching

* augment the timeout and comment why
2024-11-28 23:08:44 +01:00
Ludovic DEHON
96079cc1ae fix(ui): better layout for labels filters 2024-11-28 22:37:17 +01:00
brian.mulier
505b31e67e fix(core): add isInitialized() public boolean method to know if RunContext has everything injected 2024-11-28 20:56:08 +01:00
brian.mulier
4f87cbad55 fix(tests): typo in SLA assertion test 2024-11-28 20:26:43 +01:00
yuri
50b22cd755 fix(ui): amend file preview encoding (#6186) 2024-11-28 20:11:07 +01:00
brian.mulier
f59b9b7721 fix(ui): remove "starred" translation 2024-11-28 19:57:12 +01:00
Ludovic DEHON
3cb5db0898 fix(ui): dotted layout alt is not required 2024-11-28 19:55:49 +01:00
Ludovic DEHON
eadd9cfb94 feat(ui): add a hamburger dropdown component 2024-11-28 19:20:47 +01:00
Ludovic DEHON
82a6c7ffe4 fix(ui): prevent rollover on status
close #6174
2024-11-28 19:20:47 +01:00
Loïc Mathieu
8152b2559c feat(core): rename EXECUTION_CONDITION SLA to EXECUTION_ASSERTION (#6187) 2024-11-28 18:54:40 +01:00
Loïc Mathieu
d55b7f4330 fix(core): Property.of() with arbitrary objects 2024-11-28 18:37:34 +01:00
Loïc Mathieu
13425326dd Revert "feat(core): remove the execution state from the scheduler (#1588)"
This reverts commit f7d3d0bcd4.
2024-11-28 18:24:52 +01:00
Miloš Paunović
fb976124c1 fix(ui): improve filter behaviours (#6179) 2024-11-28 17:11:18 +01:00
Loïc Mathieu
eb6e82b77a fix(core): compilation issue 2024-11-28 16:02:00 +01:00
Ludovic DEHON
3a63ce623a chore(ui): suppress some console warning 2024-11-28 15:38:38 +01:00
Ludovic DEHON
a651aff60d fix(ui): hide useless columns on temporal view 2024-11-28 15:38:18 +01:00
Ludovic DEHON
c1d3418932 fix(ui): revert bar on the execution > logs page
close #6092
2024-11-28 15:18:00 +01:00
Ludovic DEHON
230675bdd7 fix(ui): state in dark are using the wrong color
cssVariable function don't manage overriden vars in dark
2024-11-28 15:01:59 +01:00
Ludovic DEHON
abaa6732c6 fix(ui): overview logs are not displayed when only one is available 2024-11-28 15:01:59 +01:00
Barthélémy Ledoux
c21f16335b feat(InputsForm): delay watchers until flow, execution & default values are set (#6151) 2024-11-28 14:45:34 +01:00
Loïc Mathieu
6e41898efd fix(core): use local time in Multiple condition TimeWindow 2024-11-28 14:42:45 +01:00
Loïc Mathieu
694cbf2f8a chore(deps): dependency updates 2024-11-28 14:25:06 +01:00
Loïc Mathieu
054ef83bca fix(core): local time format
Fixes #5734
2024-11-28 14:04:39 +01:00
Loïc Mathieu
ff522b699d fix(core): don't return a new window for exceeded deadline
Fixes https://github.com/kestra-io/kestra-ee/issues/2276
2024-11-28 13:59:13 +01:00
Anna Geller
8d12451f2f fix: include offset in preconditions 2024-11-28 13:00:46 +01:00
Ludovic DEHON
51e0a2afc4 fix(ui): table header are not visible enough
also change the bg color of the body in white

close #6097
2024-11-28 11:24:35 +01:00
Barthélémy Ledoux
c5a4540ba3 fix guided tour.Move the execute panel down a bit (#6164) 2024-11-28 11:18:57 +01:00
Barthélémy Ledoux
d2065c7875 feat(ui): Cascader to use CSS ellipsis instead of truncated label (#6161) 2024-11-28 11:18:21 +01:00
Barthélémy Ledoux
e9bbddecaa fix(ui): use grid instead of flex for plugins alignment (#6157) 2024-11-28 11:17:59 +01:00
YannC
ff99d1392a feat(ui): Implemented all state colors and design from Figma 2024-11-28 10:51:58 +01:00
Anna Geller
76815bb99b Quick win, missing "s" in Bookmarks (#6152)
* Update en.json

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

---------

Co-authored-by: GitHub Action <actions@github.com>
2024-11-28 02:46:29 +01:00
ben8t
b6bafbad3b Rename starred to bookmark (#6145)
* [refactor] rename starred to bookmark

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

* rename stared store into bookmark

* fix: update bookmarks buttons

---------

Co-authored-by: GitHub Action <actions@github.com>
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-27 21:49:26 +01:00
Bart Ledoux
975a86bb2f fix: add initial 3rd call to validate for apps 2024-11-27 17:19:49 +01:00
brian.mulier
1a51e369e1 fix(core): avoid infinite loop for SLA 2024-11-27 16:58:13 +01:00
Loïc Mathieu
7426ac4d09 fix(core): flow trigger dependencies
Fixes #6100
2024-11-27 16:00:11 +01:00
Bart Ledoux
45f56938e7 fix: darken the green color
https://github.com/kestra-io/kestra-ee/issues/2253
2024-11-27 14:31:45 +01:00
Miloš Paunović
1ee9fc7813 feat(ui): improve keyboard selection of new filters (#6147) 2024-11-27 13:23:51 +01:00
Anna Geller
621645c563 Update generate_translations.yml 2024-11-27 11:22:22 +01:00
Anna Geller
45be21f3a2 Revert "#5518 skip updating own translation (#5868)"
This reverts commit 29ef8afa6e.
2024-11-27 11:00:07 +01:00
Bart Ledoux
cefa9c3c5e fix: update "light" icon with less dark gray 2024-11-27 10:46:53 +01:00
Barthélémy Ledoux
bf5714417c feat: plugin layout is now dotted (#6143)
* feat: plugin layout is now dotted

* update icons for dotted layouts
2024-11-27 10:37:23 +01:00
Miloš Paunović
f064f64df0 chore(ui): trigger search on removal of single filter (#6142) 2024-11-27 09:16:24 +01:00
Miloš Paunović
90bc2bac89 chore(ui): trigger filter once the whole selection is there (#6141) 2024-11-27 08:58:08 +01:00
Barthélémy Ledoux
8518413b8c fix(ui): update background color in DottedLayout component (#6128) 2024-11-26 21:52:05 +01:00
Anna Geller
5fdaabd849 docs: flow trigger example for preconditions incl. timezone offset info and fix SLA 2024-11-26 19:10:22 +01:00
Barthélémy Ledoux
fceddf5225 fix: the validation of booleans (#6124)
Co-authored-by: GitHub Action <actions@github.com>
2024-11-26 17:38:07 +01:00
YannC
1707b1ee70 fix(core): LocalFileWatcher correctly load existing flow in folder
close #6122
2024-11-26 16:42:53 +01:00
YannC
654d30e10e fix(controller): Return failing file/flow when doing flow import (#6090)
close #6042
2024-11-26 15:43:46 +01:00
YannC
bf10a5fdee feat(ui): better banner color 2024-11-26 15:34:43 +01:00
Loïc Mathieu
3f2a306ce3 fix(core): use OffsetTIme in TimeWindow
Fixes https://github.com/kestra-io/kestra-ee/issues/2263
2024-11-26 15:02:37 +01:00
YannC
a8de86d16f feat(ui): allows to copy id from Id tooltip 2024-11-26 14:13:38 +01:00
YannC
f73fa74153 feat(ui): tag light color 2024-11-26 14:13:22 +01:00
Barthélémy Ledoux
c74073d38a fix: debounce validation of data (#6051) 2024-11-26 14:10:05 +01:00
Bart Ledoux
e9f9118b12 remove duplicate rule 2024-11-26 12:09:29 +01:00
Barthélémy Ledoux
22a8732073 refactor: replace BlueprintsLayout to reuse DottedLayout (#6095) 2024-11-26 12:04:32 +01:00
Barthélémy Ledoux
b187641101 fix: treat undefined boolean as undefined instead of false (#6086) 2024-11-26 12:03:38 +01:00
Loïc Mathieu
631cecc451 chore(core): FlowServiceTest.findByNamespacePrefix() is flaky 2024-11-26 11:48:32 +01:00
Loïc Mathieu
3fea922734 feat(core): check for system label at validation time 2024-11-26 11:44:23 +01:00
Loïc Mathieu
91cf66616f fix(ui): only display exception error for FAILED exceptions
Fixes #6098
2024-11-26 11:22:11 +01:00
Loïc Mathieu
0685214d12 fix(core): wait for error logs in the Pebble function
Fixes #6083
2024-11-26 11:05:33 +01:00
Ludovic DEHON
ccf14b86ad fix(ui): keep multiple line on the logs
close #5649
2024-11-26 10:07:48 +01:00
Ludovic DEHON
7a37db396e chore(ui): remove unneeded translations 2024-11-26 10:02:30 +01:00
Loïc Mathieu
7e8226f148 feat(core): allow accessing Worker thread count 2024-11-26 09:19:28 +01:00
Ludovic DEHON
82dbb4319a feat(ui): better error message on overview header (#6105)
close #6029
2024-11-26 09:01:29 +01:00
Anna Geller
775fac4e63 fix: wording 2024-11-25 22:17:48 +01:00
Barthélémy Ledoux
8b53a2b4ba refactor: move toast to typescript + composition API (#6079) 2024-11-25 20:54:20 +01:00
Bart Ledoux
8a072c1e24 add custom validation for required booleans 2024-11-25 17:27:02 +01:00
YannC
43dfd9e388 fix(controller): handle recoverMissedScheduled property of triggers (#6084)
close #6027
2024-11-25 17:13:43 +01:00
YannC
dc324184b1 fix(ui): issue on trigger list when no cron 2024-11-25 16:49:46 +01:00
Loïc Mathieu
4e0b6308bd feat(core): flow SLA
Fixes #5857
2024-11-25 16:05:45 +01:00
Loïc Mathieu
9f4dbd8134 fix(core): serialize duration as strings in Property
Fixes #5615
2024-11-25 16:02:44 +01:00
Loïc Mathieu
550aa4538b Revert "fix(core): serialize duration as strings"
This reverts commit 557eb8185f.
2024-11-25 16:02:44 +01:00
101
b019909e9c refactor(*): unify instanceof usage to pattern matching style 2024-11-25 15:13:06 +01:00
YannC
159d8277cd fix(ui): link css 2024-11-25 15:07:51 +01:00
YannC
7e156c85d0 fix(ui): better code color visiblity in light theme 2024-11-25 12:28:12 +01:00
YannC
49c557df0b fix(ui): more visible tag 2024-11-25 12:24:02 +01:00
Loïc Mathieu
75310bd4a4 fix(webserver): set labels now sends all labels
So we need to check if a system label didn't exist and fail if it's the case.

Fixes #5992
2024-11-25 12:15:01 +01:00
Barthélémy Ledoux
8fb7214a98 fix: remove full reactive on context info bar (#6069) 2024-11-25 11:41:21 +01:00
Ruturaj Dhakane
1a24b4b1b0 fix(ui): curl message warning was not clear enough (#6068) 2024-11-25 08:56:36 +01:00
Miloš Paunović
66196425e0 chore(ui): remove obsolete define props import (#6074) 2024-11-25 08:29:29 +01:00
Loïc Mathieu
39d2919043 feat(core): set Data property to not dynamic 2024-11-22 21:53:29 +01:00
Loïc Mathieu
c50a3b4929 fix(core): use pattern inseatd of format in the JSON Schema
Fixes #6037
2024-11-22 21:53:29 +01:00
Ludovic DEHON
300d986f5f fix(ui): avoid dashboard blinking on flow create 2024-11-22 21:44:30 +01:00
Loïc Mathieu
6aafbf3849 fix(platform): force all Jackson libs indivudually 2024-11-22 17:24:29 +01:00
Bart Ledoux
d185e67a01 fix: update light mode dots layout 2024-11-22 17:08:26 +01:00
Ludovic DEHON
529caf843f fix(ui): failed to change class name on menu collapse 2024-11-22 16:45:27 +01:00
Barthélémy Ledoux
72c3f33b80 feat(ui): restore red marker show new blog posts (#6054) 2024-11-22 16:31:59 +01:00
Loïc Mathieu
34fa6ce910 feat(jdbc): Improve execution queued performance
Add date inside the index to speed up order by in case there are a lot of execution queued.
Skip locked records when selecting them as if there is a locked records it means you need to pop the next one.
2024-11-22 16:13:41 +01:00
Ludovic DEHON
88628baa08 fix(ui): global search background wrong background 2024-11-22 15:53:34 +01:00
Ludovic DEHON
89258319e8 fix(ui): dialog header title layout 2024-11-22 15:46:56 +01:00
Ludovic DEHON
06a4bcc878 feat(ui): fix create execution layout 2024-11-22 15:40:53 +01:00
Ludovic DEHON
83c3d700da fix(ui): error message should be next to the good input
close #6039
2024-11-22 14:53:27 +01:00
Ludovic DEHON
74a3e767f9 feat(ui): use default styled scrollbar 2024-11-22 09:20:33 +01:00
Ludovic DEHON
db21982504 fix(ui): better layout for side bar 2024-11-22 09:20:33 +01:00
Miloš Paunović
c6c8b7fc4e chore(deps): regular dependency update (#6044) 2024-11-21 19:50:25 +01:00
Miloš Paunović
503fe1be54 chore(ui): improve log to file display of the preview and download buttons (#6043) 2024-11-21 19:25:27 +01:00
Kratos
0de24c4448 feat(core): Add displayName to flow level outputs(backend) (#5605) 2024-11-21 19:23:28 +01:00
Barthélémy Ledoux
4431d1f321 Add translations for context bar buttons (#6038)
Co-authored-by: GitHub Action <actions@github.com>
2024-11-21 16:50:33 +01:00
Loïc Mathieu
56a2d80ed9 fix(core): only add the errorLogs() function if a repository is configured 2024-11-21 16:17:58 +01:00
Barthélémy Ledoux
1748ebbf04 fix curl url (#6036) 2024-11-21 16:04:02 +01:00
GitHub Action
92237d2383 chore(translations): auto generate values for languages other than english 2024-11-21 14:52:43 +00:00
YannC
5b7469ab82 fix(ui): missing translation 2024-11-21 15:52:14 +01:00
Loïc Mathieu
b69723b453 feat(core): rename all conditons to not ends with Condition 2024-11-21 14:50:17 +01:00
GitHub Action
c5bef87355 chore(translations): auto generate values for languages other than english 2024-11-21 12:56:44 +00:00
YannC
449b9ca148 feat(): Rework user invitation (#5853)
* feat(*): align with EE

* feat(ui): polishing UI

* feat(ui): removed stripe

* fix(): UI polishing
2024-11-21 13:56:16 +01:00
Loïc Mathieu
78f5ff2b7b feat(*): add namespace as a parameter of the internal storage 2024-11-21 12:09:07 +01:00
Barthélémy Ledoux
62fd5599e2 fix: after context docs, some light fixes and cleanup (#6030) 2024-11-21 10:46:25 +01:00
Loïc Mathieu
5ad0fc3dc3 feat(core): add errorLogs() Pebble function 2024-11-21 09:37:18 +01:00
GitHub Action
e4fd9b7cef chore(translations): auto generate values for languages other than english 2024-11-21 09:37:18 +01:00
Loïc Mathieu
d88dee66c3 feat(*): exception error from logs 2024-11-21 09:37:18 +01:00
Barthélémy Ledoux
783904c6a9 fix(docs): open in a new window + light mode (#6026)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-20 23:00:07 +01:00
Ludovic DEHON
9b1980a053 feat(tasks): support allowFailed on http.Download tasks
close #6025
2024-11-20 22:28:48 +01:00
techwithsatish
00a0dfed88 fix(ui): amend typo in documentation (#6023) 2024-11-20 20:27:41 +01:00
Mohammed Viqar Ahmed
29ef8afa6e #5518 skip updating own translation (#5868)
* CONTRIBUTING.md : addind node options variable

* chore(ui): improve wording of contribution guide

* #5518 : fix to skip updating own translation

* #5518 : updating code comments

* Update ui/src/translations/generate_translations.py

---------

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
Co-authored-by: Anna Geller <anna.m.geller@gmail.com>
2024-11-20 18:56:51 +01:00
GitHub Action
acdc9ef46e chore(translations): auto generate values for languages other than english 2024-11-20 16:08:23 +00:00
Barthélémy Ledoux
855c42b3e2 feat: in app contextual docs (#5906)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: GitHub Action <actions@github.com>
2024-11-20 17:07:43 +01:00
Florian Hussonnois
bb6b134731 fix(ui): hide navbar on error in fullscreen 2024-11-20 14:43:10 +01:00
Miloš Paunović
45d5820358 fix(ui): handle time values as execution chart x axis label (#6019) 2024-11-20 13:29:45 +01:00
YannC
f71e9d30f6 fix(): better comparison of triggers (#6018) 2024-11-20 11:26:43 +01:00
Loïc Mathieu
38ca24a287 feat(core): add a path traversal guard to the fileURI Pebble function 2024-11-20 11:05:42 +01:00
Barthélémy Ledoux
d5726e84e3 fix: "jump to" does not load (#5995)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-20 11:00:51 +01:00
asharan2buff
6e1b910d58 feat(): fileURI() Pebble Function 2024-11-20 10:15:14 +01:00
Florian Hussonnois
88db8bedd5 chore(core): add utility methods for exception 2024-11-20 09:57:22 +01:00
Ludovic DEHON
bfa02fe6ef fix(plugins): allow big archive size on docker runner
see https://issues.apache.org/jira/browse/COMPRESS-194
2024-11-19 22:29:16 +01:00
Florian Hussonnois
6fc4f251d0 chore(core): refactor LogRepositoryInterface to allow access with no permission check 2024-11-19 18:00:45 +01:00
Anna Geller
21692f7199 docs: add info about run context 2024-11-19 16:27:37 +01:00
Shruti Mantri
0bae3a88ac feat: replace EachParallel with ForEach (#5979)
* feat: replace EachParallel with ForEach

* Update core/src/main/java/io/kestra/plugin/core/execution/Count.java

---------

Co-authored-by: Will Russell <wrussell@kestra.io>
2024-11-19 11:32:53 +00:00
GitHub Action
5906b03c6e chore(translations): auto generate values for languages other than english 2024-11-19 10:31:05 +00:00
Miloš Paunović
ffa92d4888 feat(ui): introduce new filtering system (#5988) 2024-11-19 11:30:31 +01:00
dependabot[bot]
0c17a728c2 chore(deps): bump org.projectlombok:lombok from 1.18.34 to 1.18.36
Bumps [org.projectlombok:lombok](https://github.com/projectlombok/lombok) from 1.18.34 to 1.18.36.
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown)
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.34...v1.18.36)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-19 10:35:13 +01:00
dependabot[bot]
97e147e3ec chore(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.6.3 to 4.7.0.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.6.3...v4.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-19 10:34:59 +01:00
Anna Geller
ee79911f16 Merge branch 'develop' of https://github.com/kestra-io/kestra into develop 2024-11-18 18:52:43 +01:00
Anna Geller
aac1bbafed docs: clarify that KV pairs are not inherited https://github.com/kestra-io/docs/issues/1745 2024-11-18 18:52:35 +01:00
Shruti Mantri
66d5d4b209 feat: replace EachSequential with ForEach (#5978) 2024-11-18 17:51:03 +00:00
techwithsatish
fc7d63013c chore(ui): amend link label in documentation (#5977) 2024-11-18 18:44:45 +01:00
dependabot[bot]
ae56485cf6 chore(deps): bump cross-spawn from 7.0.3 to 7.0.6 in /ui (#5976)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 18:41:31 +01:00
dependabot[bot]
f20c20782f chore(deps): bump net.thisptr:jackson-jq from 1.0.1 to 1.1.0
Bumps [net.thisptr:jackson-jq](https://github.com/eiiches/jackson-jq) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/eiiches/jackson-jq/releases)
- [Commits](https://github.com/eiiches/jackson-jq/compare/1.0.1...1.1.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-11-18 18:24:59 +01:00
dependabot[bot]
72b9077a41 chore(deps): bump flyingSaucerVersion from 9.10.2 to 9.11.0
Bumps `flyingSaucerVersion` from 9.10.2 to 9.11.0.

Updates `org.xhtmlrenderer:flying-saucer-core` from 9.10.2 to 9.11.0
- [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.10.2...v9.11.0)

Updates `org.xhtmlrenderer:flying-saucer-pdf` from 9.10.2 to 9.11.0
- [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.10.2...v9.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 18:24:45 +01:00
dependabot[bot]
1bc33cd4a9 chore(deps): bump org.siouan.frontend-jdk21 from 9.0.0 to 9.1.0
Bumps org.siouan.frontend-jdk21 from 9.0.0 to 9.1.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 18:23:30 +01:00
dependabot[bot]
6c6d5a39e2 chore(deps): bump codecov/codecov-action from 4 to 5
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 18:22:40 +01:00
Miloš Paunović
a5730e2ba8 fix(ui): properly check if result list is empty before showing empty state component (#5972) 2024-11-18 14:30:42 +01:00
Loïc Mathieu
3957daa156 fix(coe): missing call to allowedTrigger from kv Pebble Function 2024-11-18 13:16:43 +01:00
Loïc Mathieu
481385d554 fix(core): preconditions evaluation can NPE 2024-11-18 12:33:52 +01:00
Miloš Paunović
4db0caa32a fix(ui): pass with credentials as true to follow endpoints (#5968) 2024-11-18 12:26:18 +01:00
Loïc Mathieu
5f3aee911e feat(core): refactor flow trigger
Fixes #5856
2024-11-18 09:58:12 +01:00
sophiakkm
20defee309 feat(ui): implement local search for kv store (#5963)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-11-18 09:53:15 +01:00
GitHub Action
842113ec89 chore(translations): auto generate values for languages other than english 2024-11-18 08:20:23 +00:00
Miloš Paunović
19d181c229 chore(ui): show additional columns to better describe triggers (#5964) 2024-11-18 09:19:57 +01:00
yuri
c697628915 chore(ui): introduce component for filter labels (#5947)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-17 21:48:10 +01:00
Manoj Balaraj
eeaf015ee7 fix(ui): amend pebble expression in execution outputs debug section (#5943)
Co-authored-by: manu2931 <manojb912@gmai.com>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-17 20:39:03 +01:00
MilosPaunovic
d7e4159a4a fix(ui): check if element exists before amending the size of it 2024-11-17 20:26:52 +01:00
tlrznf46
05ecf97a59 chore(ui): implement local sort functionality for namespace kv store listing (#5952)
Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-11-17 20:20:51 +01:00
Aabhas Sao
df11f71c6a chore(ui): amend filter placeholder color (#5950)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-17 20:04:40 +01:00
Miloš Paunović
c52e4bf560 fix(ui): hide input validation success icon from flow run dialog (#5953) 2024-11-17 19:20:07 +01:00
Ian Cheng
1809e0c877 chore(ui): make filter absolute date label in humanly readable format(#5944)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-16 12:00:47 +01:00
yuri
70ac9a7c2a chore(ui): prevent duplicate values in filter recent items (#5941) 2024-11-16 11:44:01 +01:00
GitHub Action
65ccb7cb2b chore(translations): auto generate values for languages other than english 2024-11-16 10:16:52 +00:00
Satvik Kushwaha
53e94838c5 chore(ui): render trigger flow warning as markdown in dialog (#5933)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-16 11:16:11 +01:00
Will Russell
f3edfbce8c fix(docs): depreciated examples 2024-11-15 17:39:08 +00:00
Florian Hussonnois
6af900dcc9 feat(ui): allow to not show toast on server error response 2024-11-15 16:52:18 +01:00
Florian Hussonnois
ca5f439946 fix(ui): add errors to all validation methods 2024-11-15 16:52:18 +01:00
Piyush Bhaskar
3ef4299d2e chore(ui): showing tags on a single blueprint page (#5914)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-15 15:17:01 +01:00
Saipavan Lingamallu
f155209b5f chore(ui): improve description section of editing metadata drawer (#5858)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-15 14:45:25 +01:00
benjo.sinanovic
46b1d377dd feat(core): Implement fileSize() function 2024-11-15 14:40:40 +01:00
Loïc Mathieu
5607cab9c1 fix(ui): add missing toIon and fromIon Pebble function and filter 2024-11-15 14:16:40 +01:00
Florian Hussonnois
208d9882cf fix(ui): fix FilePreview when configs not loaded 2024-11-15 11:31:17 +01:00
GitHub Action
70a8979952 chore(translations): auto generate values for languages other than english 2024-11-15 08:20:41 +00:00
Miloš Paunović
09c644f563 chore(ui): add new filter comparators and amend existing options to use them (#5923) 2024-11-15 09:20:08 +01:00
Miloš Paunović
e6af98f7cd fix(ui): amend the expansion of execution fields (#5922) 2024-11-15 08:56:27 +01:00
Florian Hussonnois
364acc3473 feat(core): refactor ExecutionLogService 2024-11-15 08:47:28 +01:00
YannC
fb34f7b6c9 feat(ui): display input error (#5919)
close #5515
2024-11-14 22:47:50 +01:00
MilosPaunovic
cf615e8291 chore(ui): make the tooltip positioning default 2024-11-14 14:21:26 +01:00
Loïc Mathieu
6f45659eed fix(core): retry flaky test InputsTest.shouldNotLogSecretInput() 2024-11-14 11:46:08 +01:00
Barthélémy Ledoux
ffec86fb20 fix(ui): disable sidebar version tooltip when no commitId or collapsed (#5910)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-14 11:37:36 +01:00
Manoj Balaraj
796cb690fb chore(ui): properly refresh gantt view after replaying the execution (#5829) 2024-11-14 09:14:04 +01:00
yuri
fa6a434f73 fix(ui): make whole gantt task row clickable (#5863) 2024-11-14 08:41:29 +01:00
yuri
183c659011 fix(ui): change usage of method which is not widely supported (#5864) 2024-11-14 08:35:09 +01:00
RyanVem
9a402e2ca9 feat(ui): add cancel button to execution resume dialog (#5859)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-13 21:08:35 +01:00
GitHub Action
4e675f2a13 chore(translations): auto generate values for languages other than english 2024-11-13 19:57:49 +00:00
Ian Cheng
67b329747f feat(ui): add right click actions to editor tabs (#5869)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-13 20:56:55 +01:00
yuri
e404ff759c chore(ui): prevent prop type mismatch (#5908) 2024-11-13 20:22:37 +01:00
Will Russell
d7e61544d6 fix(docs): runner -> taskRunner 2024-11-13 16:55:54 +00:00
Florian Hussonnois
ccfe00dba4 feat(core): add support for AppPluginInterface 2024-11-13 16:42:36 +01:00
Shivang
cfd267749f chore(ui): align margins and padding throughout the product (#5887)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-13 15:52:21 +01:00
GitHub Action
5a93181273 chore(translations): auto generate values for languages other than english 2024-11-13 14:17:14 +00:00
Piyush Bhaskar
0e2328ce08 chore(ui): improve visual for no data component (#5900)
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-11-13 15:16:42 +01:00
GitHub Action
c7a3ffa59e chore(translations): auto generate values for languages other than english 2024-11-13 13:47:25 +00:00
Miloš Paunović
7f05c72ae5 feat(ui): add page settings dropdown to filters (#5905) 2024-11-13 14:46:52 +01:00
Loïc Mathieu
dcab506ca1 fix(core): multiple condition test is flaky 2024-11-13 14:34:37 +01:00
YannC
f0843ed23a fix(ui): display the correct key (#5886) 2024-11-13 13:28:05 +01:00
Loïc Mathieu
8da06c6c99 fix(core): flaky tests 2024-11-13 12:56:47 +01:00
Miloš Paunović
76be65c23f chore(deps): regular dependency update (#5899) 2024-11-13 11:05:40 +01:00
GitHub Action
b753ae0971 chore(translations): auto generate values for languages other than english 2024-11-13 09:53:01 +00:00
Miloš Paunović
802b7b9329 feat(ui): add relative and absolute dates as filtering options (#5898) 2024-11-13 10:52:21 +01:00
dependabot[bot]
b97db33d3a chore(deps): bump kafkaVersion from 3.8.1 to 3.9.0
Bumps `kafkaVersion` from 3.8.1 to 3.9.0.

Updates `org.apache.kafka:kafka-clients` from 3.8.1 to 3.9.0

Updates `org.apache.kafka:kafka-streams` from 3.8.1 to 3.9.0

Updates `org.apache.kafka:kafka-streams-test-utils` from 3.8.1 to 3.9.0

---
updated-dependencies:
- dependency-name: org.apache.kafka:kafka-clients
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.kafka:kafka-streams
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.kafka:kafka-streams-test-utils
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-12 15:39:12 +01:00
dependabot[bot]
a2acaa4dd4 chore(deps): bump opensearchRestVersion from 2.17.1 to 2.18.0
Bumps `opensearchRestVersion` from 2.17.1 to 2.18.0.

Updates `org.opensearch.client:opensearch-rest-client` from 2.17.1 to 2.18.0
- [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.17.1...2.18.0)

Updates `org.opensearch.client:opensearch-rest-high-level-client` from 2.17.1 to 2.18.0
- [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.17.1...2.18.0)

---
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>
2024-11-12 15:38:49 +01:00
Loïc Mathieu
e3de0d2b4d chore: small refacto on the ShaBaseFilter 2024-11-12 15:36:38 +01:00
dependabot[bot]
d68d77766d chore(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.16.0 to 2.17.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.16.0...v2.17.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-11-12 15:06:49 +01:00
dependabot[bot]
7ab7d1089c chore(deps): bump rlespinasse/github-slug-action from 4 to 5
Bumps [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) from 4 to 5.
- [Release notes](https://github.com/rlespinasse/github-slug-action/releases)
- [Commits](https://github.com/rlespinasse/github-slug-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: rlespinasse/github-slug-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-12 14:48:21 +01:00
Miloš Paunović
a14e759e3c chore(ui): filter functionality improvements (#5882) 2024-11-12 14:12:05 +01:00
hashimzs
fb61339170 fix(core): refactor sha filters and add tests for each filter 2024-11-12 13:36:25 +01:00
SayedQassim
795d9a6085 fix(core): add implemntation for md5, sha1, and sha512 filters (#5436) 2024-11-12 13:36:25 +01:00
yuri1969
f23de228c5 fix(build): fix Gradle task listing
The `gradle tasks` command was broken by subprojects with no `test`
source set.
2024-11-12 09:23:06 +01:00
GitHub Action
a60e3680a8 chore(translations): auto generate values for languages other than english 2024-11-11 20:16:22 +00:00
Ruturaj Dhakane
1f26637f29 feat(ui): allow selection of default tab on flow execution (#5850) 2024-11-11 21:15:46 +01:00
Piyush Bhaskar
cad7e2592d chore(ui): make visual for no data custom kestra one (#5855) 2024-11-11 13:53:49 +01:00
GitHub Action
0370913d26 chore(translations): auto generate values for languages other than english 2024-11-09 09:53:45 +00:00
Anna Geller
67ff2ed94e fix: ui text for no data (#5865)
* fix: ui text for no data

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

---------

Co-authored-by: GitHub Action <actions@github.com>
2024-11-09 10:53:17 +01:00
GitHub Action
5bffa46f84 chore(translations): auto generate values for languages other than english 2024-11-08 18:15:12 +01:00
Loïc Mathieu
25da8d13e0 feat(core,ui,webserver): force run executions
Part-of: #4260
2024-11-08 18:15:12 +01:00
Barthélémy Ledoux
c69d8bb60e fix: set title when favoriting a flow & clean URL parameters that change (#5839)
* fix: when faving a flow it should have its title by default

* remove parameters that switch automatically at load

* fix: when loading dashboard dates come from url

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-08 14:55:47 +01:00
Pranay Raycha
1abf41c54a chore(ui): improve namespace listing items padding (#5852) 2024-11-08 11:08:18 +01:00
Barthélémy Ledoux
8353869a4e fix: extends the background of blueprint page (#5841)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-08 09:52:18 +01:00
Will Russell
36fa4eed1c fix: add new line for create flow example 2024-11-07 17:10:49 +00:00
Anna Geller
5f66e9748e fix(docs): add keyboard shortcuts info to the top 2024-11-07 17:08:54 +01:00
GitHub Action
914cc8bd62 chore(translations): auto generate values for languages other than english 2024-11-07 15:39:49 +00:00
Miloš Paunović
fce9525713 feat(ui): filters overhaul (#5844) 2024-11-07 16:35:35 +01:00
Loïc Mathieu
8a32913714 feat(core): allow filtering on labels for ExecutionsCondition
Fixes #5836
2024-11-07 15:34:39 +01:00
Loïc Mathieu
5f6e04ea0b feat(jdbc): add a where clause when fetching max offset
Also some refactoring to reduce code duplication
2024-11-07 15:34:08 +01:00
Barthélémy Ledoux
4423052e58 feat: editable favorites and full search query in their url (#5828)
* feat(ui): enhance BookmarkLink component with edit and delete functionality

* fix(ui): use the full URL as href for favorites

* add some accessibility

* foxus the field when editing starts

* avoid closing starred box when editing

* fix case sensitive issue

* change the index in localstorage to clean all conflicts

* fix: sidebar needs radius and margins

* lighten star color

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-07 13:53:31 +01:00
Miloš Paunović
4f889e716e fix(ui): amend black charts on sync with system theme option (#5835) 2024-11-07 12:14:32 +01:00
Piyush Bhaskar
08e8e7d020 chore(ui): change namespaces icon (#5827) 2024-11-07 10:56:49 +01:00
brian.mulier
60b47d761c fix(jdbc): proper handling of multiple condition window condition 2024-11-07 09:56:51 +01:00
Prajyot
e7b47e8427 fixes: #5744 UI Execution Overview doesn't correctly handle errors caused by wrong output types 2024-11-07 09:04:01 +01:00
Loïc Mathieu
71183077b0 feat(core): rename the new mutliple conditions 2024-11-06 17:52:03 +01:00
Loïc Mathieu
a01de0054b feat(core): multiple condition refactoring and doc improvements 2024-11-06 17:52:03 +01:00
Loïc Mathieu
66f4d7b0e5 feat(core): deprecate the MultipleCondition condition 2024-11-06 17:52:03 +01:00
Loïc Mathieu
4e300bec53 chore(core,webserver): discard not-used completed part and reads in an IO thread 2024-11-06 17:39:47 +01:00
Loïc Mathieu
f4c4b3a98c chore(webserver): ensure all input streams are closed 2024-11-06 17:39:47 +01:00
Loïc Mathieu
6af6ef9578 fix(core): If in a flowable task
Fixes #5812
2024-11-06 17:25:08 +01:00
GitHub Action
ee5c0dd403 chore(translations): auto generate values for languages other than english 2024-11-06 17:01:24 +01:00
Loïc Mathieu
183e001e0b feat(core): workerGroup fallback
Fixes #2041
2024-11-06 17:01:24 +01:00
Loïc Mathieu
f87ba547fd fix(ui): error widget must be present only when there is an error 2024-11-06 17:01:24 +01:00
Barthélémy Ledoux
36e4b5d98a fix(ui): add optional chaining to router getRoutes in LeftMenu component (#5821)
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-06 16:25:57 +01:00
Barthélémy Ledoux
02e986ba54 feat(styles): add custom styles for plain tags in element-plus (#5804)
* feat(styles): add custom styles for plain tags in element-plus

* fix light mode

* typo about body -> html dark

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-11-06 14:19:05 +01:00
Anna Geller
9b6b76e43e docs: clarify SLA and examples (#5813) 2024-11-06 13:31:33 +01:00
Miloš Paunović
b1d48df2c4 chore(ui): making sure we have proper coloring of the charts (#5811) 2024-11-06 12:14:28 +01:00
Manoj Balaraj
26557a5d5c fix(ui): introduce preview/download buttons for file inputs on execution overview (#5778) 2024-11-06 11:24:47 +01:00
msravikrishna
56bc4f749e chore(ui): improve ion file content preview (#5781) 2024-11-06 11:13:21 +01:00
GitHub Action
6cb06044f3 chore(translations): auto generate values for languages other than english 2024-11-06 10:01:49 +00:00
Piyush Bhaskar
0f97d721ac chore(ui): amend padding on multiple executions delete confirmation (#5777) 2024-11-06 11:01:04 +01:00
Loïc Mathieu
4259466b0f feat(core): make EncryptedString looks like a String
An EncryptedString is an implementation detail of a string encrypted. It is only used on outputs and will be automatically decrypted.
To hide this implementation detail, we replace it with String in the JSON Schema.
Fixes #5527
2024-11-06 09:53:28 +01:00
Miloš Paunović
4cda597bcd chore(deps): regular dependency update (#5802) 2024-11-06 08:50:35 +01:00
YannC
b79b1cb422 fix(core): Namespace file changes for git tasks (#5784) 2024-11-05 19:20:49 +01:00
Will Russell
681466c7f6 fix: tutorial-flows -> tutorialFlows 2024-11-05 17:15:02 +00:00
Loïc Mathieu
453fbc5eed feat: add starred pages (#5761) (#5772)
* feat: add starred pages (#5761)

* store page title and breadcrumb in vuex

* refactor leftmenu with composition API

* last fixes

* extract menu in a composable for inheritance replacement

* feat: add starred pages (no dashboard)

* keep "generateMenu" because of hack

* add comment about what function is expected

* cleanup and style

* fix starring when no breadcrumbs

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

* add hover message to get full title

* remove extra class that was not used

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: GitHub Action <actions@github.com>

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

* move sidebar out of leftmenu

* remove composable

* fix build

* silence eslint

* remove jank when hovering collapsed left menu

* adjust position and width of arrow

* rearchitecture of the feature with bookmarkLink as a component

* make dashboard starrable

* remove not-starrable since not used anymore

---------

Co-authored-by: Barthélémy Ledoux <ledouxb@me.com>
Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: GitHub Action <actions@github.com>
2024-11-05 16:05:28 +01:00
GitHub Action
43369ac370 chore(translations): auto generate values for languages other than english 2024-11-05 14:26:39 +01:00
Loïc Mathieu
9d5501c5fd feat(*): Unqueue queued execution
Part-of: #4260
2024-11-05 14:26:39 +01:00
Loïc Mathieu
f6dbe4f033 chore(webserver): refactor *ByQuery methods 2024-11-05 14:26:39 +01:00
Will Russell
dcc23b9c08 fix: config to camelCase 2024-11-05 10:27:48 +00:00
GitHub Action
b86cc2ecf5 chore(translations): auto generate values for languages other than english 2024-11-05 08:35:16 +00:00
MilosPaunovic
b137ab234c chore(ui): add missing translation key 2024-11-05 09:34:41 +01:00
Akash Verma
d1c1ed9765 chore(ui): amend alignment of logs on executions page(#5774) 2024-11-05 08:18:12 +01:00
YannC
2bb08003cb fix(ui): encode filename when downloading it (#5760)
close #5589
2024-11-04 19:21:59 +01:00
YannC
e1cf8d8d87 fix(core): Windows path issues (#5763) 2024-11-04 18:27:51 +01:00
Loïc Mathieu
f2620bc8d6 Revert "feat: add starred pages (#5761)"
This reverts commit 8c83df51e4.
2024-11-04 17:18:39 +01:00
Loïc Mathieu
a6cffa77a4 feat(ui): support "true" or true as the value of the readOnly label 2024-11-04 15:53:36 +01:00
Loïc Mathieu
7fa9d86c5e feat(core): don't reset multiple conditions on successful evaluation
Fixes #325
2024-11-04 15:12:53 +01:00
Loïc Mathieu
cf26cc321f fix(core): don't call MultipleConditionStorage.getOrCreate() twice 2024-11-04 15:12:53 +01:00
Loïc Mathieu
7ae080c31a feat(webserver): document that the taskrun endpont is only available with Elasticsearch
Fixes https://github.com/kestra-io/kestra-ee/issues/2067
2024-11-04 15:12:29 +01:00
GitHub Action
76c963f24f chore(translations): auto generate values for languages other than english 2024-11-04 13:40:13 +00:00
Barthélémy Ledoux
8c83df51e4 feat: add starred pages (#5761)
* store page title and breadcrumb in vuex

* refactor leftmenu with composition API

* last fixes

* extract menu in a composable for inheritance replacement

* feat: add starred pages (no dashboard)

* keep "generateMenu" because of hack

* add comment about what function is expected

* cleanup and style

* fix starring when no breadcrumbs

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

* add hover message to get full title

* remove extra class that was not used

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: GitHub Action <actions@github.com>
2024-11-04 14:39:43 +01:00
dependabot[bot]
f6fdb65674 chore(deps): bump kafkaVersion from 3.7.1 to 3.8.1
Bumps `kafkaVersion` from 3.7.1 to 3.8.1.

Updates `org.apache.kafka:kafka-clients` from 3.7.1 to 3.8.1

Updates `org.apache.kafka:kafka-streams` from 3.7.1 to 3.8.1

Updates `org.apache.kafka:kafka-streams-test-utils` from 3.7.1 to 3.8.1

---
updated-dependencies:
- dependency-name: org.apache.kafka:kafka-clients
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.kafka:kafka-streams
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.kafka:kafka-streams-test-utils
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 13:16:58 +01:00
Loïc Mathieu
e8ddd81d7e feat(core): Flow Trigger SLA 2024-11-04 12:47:13 +01:00
Loïc Mathieu
85aada820e fix(core): replay an execution with a dynamic task
Fixes #5284
2024-11-04 11:49:43 +01:00
Miloš Paunović
a5d913ffb4 chore(ui): amend typo 2024-11-04 11:49:21 +01:00
YannC
9895f78a5c fix(ui): lint error 2024-11-04 10:49:27 +01:00
Loïc Mathieu
e7afddefc6 fix(core): redo the If fix 2024-11-04 10:47:27 +01:00
dependabot[bot]
7b132a9581 chore(deps): bump bouncycastleVersion from 1.78.1 to 1.79
Bumps `bouncycastleVersion` from 1.78.1 to 1.79.

Updates `org.bouncycastle:bcprov-jdk18on` from 1.78.1 to 1.79
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html)
- [Commits](https://github.com/bcgit/bc-java/commits)

Updates `org.bouncycastle:bcpg-jdk18on` from 1.78.1 to 1.79
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html)
- [Commits](https://github.com/bcgit/bc-java/commits)

---
updated-dependencies:
- dependency-name: org.bouncycastle:bcprov-jdk18on
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.bouncycastle:bcpg-jdk18on
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 10:27:01 +01:00
dependabot[bot]
7291ddec0c chore(deps): bump com.gradleup.shadow from 8.3.3 to 8.3.5
Bumps [com.gradleup.shadow](https://github.com/GradleUp/shadow) from 8.3.3 to 8.3.5.
- [Release notes](https://github.com/GradleUp/shadow/releases)
- [Commits](https://github.com/GradleUp/shadow/compare/8.3.3...8.3.5)

---
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>
2024-11-04 10:26:39 +01:00
Miloš Paunović
0b327ef42a chore(test): exposing function to clear the editor during automated tests 2024-11-04 10:24:31 +01:00
Akash Verma
c1eb434234 chore(ui): avoid overflow on bulk select table actions (#5742) 2024-11-04 09:39:23 +01:00
Malay Dewangan
c9f5817d27 feat(core): support flow label values to be of data types different than string (#5726)
* feat: support flow label values to be of data types different than strings

* test: add tests

* fix: fix runtime label test

* fix: fix runtime label test
2024-11-04 09:38:37 +01:00
dependabot[bot]
b7de16a264 chore(deps): bump org.owasp.dependencycheck from 11.0.0 to 11.1.0
Bumps org.owasp.dependencycheck from 11.0.0 to 11.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>
2024-11-04 09:28:57 +01:00
dependabot[bot]
547525ab18 chore(deps): bump mikepenz/action-junit-report from 4 to 5
Bumps [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) from 4 to 5.
- [Release notes](https://github.com/mikepenz/action-junit-report/releases)
- [Commits](https://github.com/mikepenz/action-junit-report/compare/v4...v5)

---
updated-dependencies:
- dependency-name: mikepenz/action-junit-report
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 09:28:16 +01:00
dependabot[bot]
7cfcc91dac chore(deps): bump com.fasterxml.jackson:jackson-bom
Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.18.0 to 2.18.1.
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.18.0...jackson-bom-2.18.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 09:28:06 +01:00
Manoj Balaraj
46b6f23ccd feat(ui): expand the first output by default (#5747) 2024-11-04 09:27:55 +01:00
Ludovic DEHON
6e58b3fe18 refactor(core): move YamlFlowParser to YamlParser
since it's already able to handle all types with generic
2024-11-04 08:19:23 +01:00
GitHub Action
93ff17a0ca chore(translations): auto generate values for languages other than english 2024-11-03 11:24:43 +00:00
Anna Geller
b892c7c8ee docs: better handle trigger.XYZ resolution when hitting Execute button (#5749)
* docs: better handle trigger.XYZ resolution when hitting Execute button

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

---------

Co-authored-by: GitHub Action <actions@github.com>
2024-11-03 12:24:13 +01:00
Anna Geller
824dc0b513 docs: small README fixes 2024-11-03 12:00:32 +01:00
Ludovic DEHON
e32f492e31 fix(ui): capture pageleave in posthog 2024-11-01 23:47:35 +01:00
Anna Geller
b3ab60772d fix: clean up issue templates 2024-11-01 16:36:13 +01:00
Anna Geller
3fad62ed74 fix: bug issue template 2024-11-01 16:32:19 +01:00
Loïc Mathieu
0de62200a4 fix(core): FetchTest is flaky as logs are indexed async 2024-10-31 16:20:30 +01:00
Loïc Mathieu
1953aa90b2 fix(core): save the If evaluation condition in the output
This avoids re-evaluation on each child task run which can be an issue if the taskrun modify something that is part of the condition.

Fixes #5437
2024-10-31 16:20:30 +01:00
Malay Dewangan
66698d580d fix: Ensure strict typing for input defaults to prevent runtime errors (#5604)
* fix: Ensure strict typing for input defaults to prevent runtime errors

* fix: Ensure strict typing for other input defaults to prevent runtime errors

* test: add unit tests

* fix: update test cases
2024-10-31 14:33:32 +01:00
Vivek Gangwani
b85d7f0624 chore(ui): improve stack trace output on light mode (#5738) 2024-10-31 14:23:11 +01:00
Mradul Vishwakarma
2946db29d0 chore(ui): improve empty states (#5739) 2024-10-31 14:17:28 +01:00
Miloš Paunović
512c20d22d chore(deps): regular dependency update (#5732) 2024-10-31 09:47:45 +01:00
Mradul Vishwakarma
73051f5efd chore(ui): amend execute button overflow (#5690) 2024-10-31 09:36:24 +01:00
Miloš Paunović
98a1f916fb chore(test): add data-test-id attribute to inputs form 2024-10-31 09:03:33 +01:00
brian.mulier
50f539e91f fix(ui): prevent duplicate input validations + avoid error spamming + send boolean inputs properly
closes #5731
2024-10-30 21:13:24 +01:00
Loïc Mathieu
6103b48aa2 feat(core): render properties via the run context 2024-10-30 17:31:39 +01:00
brian.mulier
e969425dba fix: better log display and combine temporal & taskruns view log navigation handling 2024-10-30 13:32:53 +01:00
Loïc Mathieu
730b2cac39 feat(core): MultipleConditon deadline
Fixes #5706
2024-10-30 12:23:58 +01:00
Loïc Mathieu
18cf3f4aa4 feat(core): new ExecutionFilters condition 2024-10-30 12:16:37 +01:00
Loïc Mathieu
4550aa9b15 feat(*): change system label prefix to use a dot
Fixes #5708
2024-10-30 11:53:26 +01:00
brian.mulier
9d809e8b53 fix: gantt view was no longer fetching logs 2024-10-30 11:05:12 +01:00
Ganesh Kumar C
80b1024942 fix(ui): amend chart coloring on theme changes (#5709) 2024-10-29 18:29:17 +01:00
Sachin
8445857204 fix(ui): log navigation is now working in temporal view (#5685)
closes #5215
2024-10-29 14:43:05 +01:00
Barthélémy Ledoux
880ede0eae feat: update design of blueprint header (#5652)
* add nvmrc to fix version of node

* update layout of blueprints

* adjust css

* support light mode

* fix build process

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

* restore the translation files

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

* fix layout of tabs when using type card

* fix gradients of icons

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

* adjust spaces

* adjust width on oss

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
Co-authored-by: GitHub Action <actions@github.com>
2024-10-29 14:27:24 +01:00
Vivek Gangwani
a354a69780 feat(ui): added error message and stacktrace to the execution overview (#5703) 2024-10-29 11:58:42 +01:00
dependabot[bot]
becaf149f6 chore(deps): bump flyingSaucerVersion from 9.9.4 to 9.10.2
Bumps `flyingSaucerVersion` from 9.9.4 to 9.10.2.

Updates `org.xhtmlrenderer:flying-saucer-core` from 9.9.4 to 9.10.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.9.4...v9.10.2)

Updates `org.xhtmlrenderer:flying-saucer-pdf` from 9.9.4 to 9.10.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.9.4...v9.10.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-29 10:34:38 +01:00
Loïc Mathieu
52dcc5f119 feat(core): new FlowFilters condition
Part-of: #1543
2024-10-29 09:58:28 +01:00
yuri
df8606aa50 chore(build): make Gradle less noisy (#5700)
* Fix Idea-reported problems

* Minimize Gradle 9.0-related warnings

* Migrate Shadow plugin

The plugin ID `com.github.johnrengelman.shadow` is no longer maintained.
See: https://github.com/GradleUp/shadow/issues/908

* Make Shadow JAR-related task incremental
2024-10-29 09:47:46 +01:00
Loïc Mathieu
04b70d6845 feat: add OpenSearch plugin 2024-10-29 09:34:35 +01:00
Ludovic DEHON
b4f72ccf34 chore: remove useless files 2024-10-29 09:26:54 +01:00
Shivansh Sharma
6227a4c4b3 chore(ui): move save button on settings page to header (#5697) 2024-10-29 08:46:16 +01:00
GitHub Action
16e1757c94 chore(translations): auto generate values for languages other than english 2024-10-29 07:29:56 +00:00
Shivansh Sharma
8e33b27675 chore(ui): rename create button to create flow on main dashboard (#5689) 2024-10-29 08:29:33 +01:00
Ludovic DEHON
389ca0edfb chore(cicd): fix jacoco xml report path 2024-10-28 23:42:56 +01:00
Loïc Mathieu
557eb8185f fix(core): serialize duration as strings
Fixes #5615

Since Jackson 2.10, to serialize duration as string we need to switch WRITE_DURATIONS_AS_TIMESTAMPS off as it no longuer use WRITE_DATES_AS_TIMESTAMPS.
I tested and an old flow with a duration as timestamp is still readable so this is a backward compatible change.

But for the State duration, we still need to serialize it as a number as the database expect a number
2024-10-28 15:57:51 +01:00
Rudhra Bharathy G
c20e105c10 chore(ui): add option for editor theme to sync with system (#5669) 2024-10-28 13:53:57 +01:00
Prajyot
10374a114c chore(ui): show empty state if there are no flows (#5667) 2024-10-28 13:44:39 +01:00
Loïc Mathieu
eff39944d9 feat(core): add the system_correlationId label on all executions
Fixes #5644
2024-10-28 12:32:00 +01:00
Shivansh Sharma
de0d3bdff1 chore(ui): improve initial blueprints loading(#5683) 2024-10-28 12:04:55 +01:00
Shivansh Sharma
c17e09d9e6 chore(ui): improve initial topology loading (#5671) 2024-10-28 11:59:54 +01:00
GitHub Action
a73890447e chore(translations): auto generate values for languages other than english 2024-10-28 10:42:52 +00:00
Vivek Gangwani
caed09a496 feat(ui): create reusable empty state component (#5664) 2024-10-28 11:41:59 +01:00
Loïc Mathieu
62dbea3291 feat(core): simplify multiple condition window
Fixes #5656
2024-10-28 10:44:22 +01:00
dependabot[bot]
67aee4eddf chore(deps): bump org.owasp.dependencycheck from 10.0.4 to 11.0.0
Bumps org.owasp.dependencycheck from 10.0.4 to 11.0.0.

---
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>
2024-10-28 09:39:30 +01:00
Loïc Mathieu
33d079fc62 feat(core): add methods to render properties into the run context 2024-10-28 09:26:45 +01:00
Ludovic DEHON
3ae4c48ec7 chore(cicd): use a non branch version for test artifact 2024-10-25 23:12:55 +02:00
Loïc Mathieu
791ced866b feat(core): refactor labels handling
Fixes https://github.com/kestra-io/kestra-ee/issues/2001
2024-10-25 14:20:21 +02:00
Loïc Mathieu
2b72a824e0 feat(core): system_readOnly label
Part-of: https://github.com/kestra-io/kestra-ee/issues/1867
2024-10-25 14:20:21 +02:00
Loïc Mathieu
da0091349c fix(jdbc): JdbcExecutor must be tolerant of flow topology issue 2024-10-25 14:20:21 +02:00
Malay Dewangan
f93f5c67a5 fix(core): return flow outputs in execution API response when wait=true (#5531) 2024-10-25 10:02:54 +02:00
brian.mulier
d7200e305f fix(deps): fixed apache httpclient5 version to avoid breaking docker 2024-10-24 16:42:40 +02:00
Loïc Mathieu
c14bf3c437 chore: use an NVD API Key for vulnerability check 2024-10-24 14:27:01 +02:00
MITHIN DEV
67dde3a9c3 chore(ui): improve task run label coloring (#5642) 2024-10-24 14:25:26 +02:00
Loïc Mathieu
805bdbe4da chore: use an NVD API Key for vulnerability check 2024-10-24 14:19:21 +02:00
GitHub Action
2c7804fa82 chore(translations): auto generate values for languages other than english 2024-10-24 11:53:20 +00:00
Ganesh Kumar C
56d849ff9b feat(ui): add global save button to settings page (#5602) 2024-10-24 13:52:50 +02:00
Mradul Vishwakarma
d33d6a7983 feat(ui): only show columns with data on triggers page (#5555) 2024-10-24 13:40:58 +02:00
Loïc Mathieu
e84b27267f fix(ui): don't show the info alert when no info
Fixes #5640
2024-10-24 13:08:41 +02:00
Miloš Paunović
f8f763b80e fix(ui): prevent validation errors showing if inputs are empty (#5648) 2024-10-24 12:27:07 +02:00
Loïc Mathieu
bd60c0621a feat(ui): add error.message and error.stackTrace to autocomplete
Fixes #5641
2024-10-24 10:49:42 +02:00
AbdurRahman2004
31f1e78a6b chore(ui): amend table link colors on main dashboard (#5638) 2024-10-23 23:11:19 +02:00
Abhishek Khairnar
339c4008bb fix: code block appearance (#5636) 2024-10-23 17:38:01 +02:00
Loïc Mathieu
336f89a799 feat(core): use an info block for alias documentation
Part-of: #4753
2024-10-23 17:16:56 +02:00
GitHub Action
91f176051a chore(translations): auto generate values for languages other than english 2024-10-23 14:00:41 +00:00
Loïc Mathieu
59141f3dbd feat(cli,core,webserver): move alias to informative notice (#5616)
* feat(*): move alias to informative notice

Part-of: #4753

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

* Update ui/src/translations/en.json

Co-authored-by: Anna Geller <anna.m.geller@gmail.com>

* 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>
2024-10-23 16:00:20 +02:00
Sarthak Pandey
bff706c064 chore(ui): rename twitter to x in readme file (#5628) 2024-10-23 15:44:25 +02:00
Nikhil Sinha
b99d9d4526 feat(core): new sleep task
close #4879 
Co-authored-by: YannC <ycoornaert@kestra.io>
2024-10-23 15:36:41 +02:00
YannC
d3ccf4f5ac fix(core): fix FileWatcher loading flow from local file 2024-10-23 15:24:55 +02:00
Loïc Mathieu
9162353f2e chore: upgrade frontend-jdk17:8.0.1 to frontend-jdk21:9.0.0
Closes #5622
2024-10-23 14:30:23 +02:00
dependabot[bot]
67d3e2f20a chore(deps): bump org.opensearch.client:opensearch-java
Bumps [org.opensearch.client:opensearch-java](https://github.com/opensearch-project/opensearch-java) from 2.14.0 to 2.16.0.
- [Release notes](https://github.com/opensearch-project/opensearch-java/releases)
- [Changelog](https://github.com/opensearch-project/opensearch-java/blob/v2.16.0/CHANGELOG.md)
- [Commits](https://github.com/opensearch-project/opensearch-java/compare/v2.14.0...v2.16.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-10-23 14:30:06 +02:00
dependabot[bot]
fc62197f5a chore(deps): bump org.jooq:jooq from 3.19.13 to 3.19.14
Bumps org.jooq:jooq from 3.19.13 to 3.19.14.

---
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-10-23 14:18:56 +02:00
Loïc Mathieu
c4614664bd feat(core,jdbc): add message protection metric 2024-10-23 14:04:03 +02:00
dependabot[bot]
9598eac6aa chore(deps): bump com.microsoft.playwright:playwright
Bumps [com.microsoft.playwright:playwright](https://github.com/microsoft/playwright-java) from 1.47.0 to 1.48.0.
- [Release notes](https://github.com/microsoft/playwright-java/releases)
- [Commits](https://github.com/microsoft/playwright-java/compare/v1.47.0...v1.48.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-10-23 13:08:29 +02:00
Abhishek Khairnar
a885a3200f chore(ui): add background color to every namespace on listing (#5603) 2024-10-23 12:56:28 +02:00
MilosPaunovic
3ac423c390 chore(deps): remove default reviewer from dependabot pull requests 2024-10-23 12:29:38 +02:00
Miloš Paunović
b4a7200cbf chore(deps): regular dependency update (#5618) 2024-10-23 12:26:15 +02:00
dependabot[bot]
2627cab68b chore(deps-dev): bump @typescript-eslint/parser in /ui (#5613)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.9.0 to 8.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.11.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  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-10-23 12:05:29 +02:00
dependabot[bot]
2622c0ad38 chore(deps): bump posthog-js from 1.169.0 to 1.174.3 in /ui (#5612)
Bumps [posthog-js](https://github.com/PostHog/posthog-js) from 1.169.0 to 1.174.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.169.0...v1.174.3)

---
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-10-23 12:04:54 +02:00
dependabot[bot]
574f236837 chore(deps): bump element-plus from 2.8.5 to 2.8.6 in /ui (#5610)
Bumps [element-plus](https://github.com/element-plus/element-plus) from 2.8.5 to 2.8.6.
- [Release notes](https://github.com/element-plus/element-plus/releases)
- [Changelog](https://github.com/element-plus/element-plus/blob/dev/CHANGELOG.en-US.md)
- [Commits](https://github.com/element-plus/element-plus/compare/2.8.5...2.8.6)

---
updated-dependencies:
- dependency-name: element-plus
  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>
2024-10-23 12:04:25 +02:00
dependabot[bot]
0197886a33 chore(deps-dev): bump eslint-plugin-vue from 9.29.0 to 9.29.1 in /ui (#5609)
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.29.0 to 9.29.1.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.29.0...v9.29.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  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>
2024-10-23 12:04:06 +02:00
dependabot[bot]
c958d50f6d chore(deps-dev): bump vite from 5.4.9 to 5.4.10 in /ui (#5608)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.9 to 5.4.10.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.10/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.10/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  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>
2024-10-23 12:03:38 +02:00
MilosPaunovic
75d45f80d2 feat(ui): filter only labels on execution list 2024-10-23 12:00:48 +02:00
MilosPaunovic
03da8f1764 feat(ui): filter execution list to ignore labels containing hidden prefixes 2024-10-23 12:00:48 +02:00
Loïc Mathieu
3924f56b70 feat(cli,webserver): hidden labels 2024-10-23 12:00:48 +02:00
MilosPaunovic
29d2a2bf85 chore(ui): use proper translation key 2024-10-23 11:18:02 +02:00
YannC
b399907016 fix(core): encode filename (#5593)
close #5589
2024-10-22 16:05:45 +02:00
Loïc Mathieu
30dab4f027 feat(core,webserver): correlation ID
Automatically set the 'system_correlationId' label to the parent execution id for all child, recursively.
This label is the only one that can be set once when starting an execution.
2024-10-22 15:35:13 +02:00
Loïc Mathieu
a136988946 feat(core): system labels
System labels are labels starting with 'system_', they cannot be set by a user but only Kestra itself.
2024-10-22 15:35:13 +02:00
brian.mulier
ffe7e6760e fix(webserver): remove useless call for flow auto loader 2024-10-22 13:38:21 +02:00
MilosPaunovic
345f799fc1 chore(ci): revert improvement of translation automation 2024-10-22 12:45:00 +02:00
Karthik D
45369bd7d9 chore(ci): improve translation automation (#5558) 2024-10-22 12:37:57 +02:00
Saipavan Lingamallu
8ebadb8559 chore(ui): improve secondary button hover state (#5565) 2024-10-22 12:14:57 +02:00
Abhishek Khairnar
25e86a1ad4 chore(ui): improve markdown table design (#5564) 2024-10-22 12:02:24 +02:00
Anna Geller
6ecf64d8bd fix: flow trigger docs (#5592)
* Update Flow.java

* Update Flow.java
2024-10-22 11:11:48 +02:00
MilosPaunovic
1c4aa3aaf4 chore(ui): align empty state handling for namespace execution chart 2024-10-22 10:36:21 +02:00
GitHub Action
3fa1b85fb0 chore(translations): auto generate values for languages other than english 2024-10-22 08:34:31 +00:00
Hisham Akmal
f45e934573 feat(ui): enhance empty state handling for tables and charts (#5557) 2024-10-22 10:34:10 +02:00
brian.mulier
dd48ad869c feat(webserver): call versioned endpoints for fetching blueprints 2024-10-21 17:55:49 +02:00
Loïc Mathieu
56ea2836f6 feat(core): add validation to the retry objects
Fixes #2840
2024-10-21 16:49:29 +02:00
Loïc Mathieu
004b7a0d8e fix(core): serialize default inputs
Fixes https://github.com/kestra-io/kestra-ee/issues/1887
2024-10-21 13:19:08 +02:00
YannC
7ec19fc77c fix(core): Recovered method in flow service for plugins (#5571) 2024-10-21 11:57:17 +02:00
Barthélémy Ledoux
5ada1a2752 build: fix dev for arm64 & prettier (#5574)
* build: fix dev env for arm64

* add global prettierignore

---------

Co-authored-by: Bart Ledoux <bledoux@kestra.io>
2024-10-21 11:20:40 +02:00
yuri1969
0e8fd14780 feat(docs): improve warningOnStdErr info clarity 2024-10-21 10:09:12 +02:00
yuri1969
bc9c43612a chore(core): remove trailing whitespace 2024-10-21 10:09:00 +02:00
dependabot[bot]
77529e7017 chore(deps): bump andrcuns/allure-publish-action from 2.7.1 to 2.8.0
Bumps [andrcuns/allure-publish-action](https://github.com/andrcuns/allure-publish-action) from 2.7.1 to 2.8.0.
- [Release notes](https://github.com/andrcuns/allure-publish-action/releases)
- [Commits](https://github.com/andrcuns/allure-publish-action/compare/v2.7.1...v2.8.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-10-21 09:14:49 +02:00
dependabot[bot]
a6a5e43dc0 chore(deps): bump aquasecurity/trivy-action from 0.27.0 to 0.28.0
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.27.0 to 0.28.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.27.0...0.28.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-10-21 09:14:40 +02:00
Ahmad Midlaj B
d7075e5fba fix(ui): standardize font size in filter forms (#5553) 2024-10-21 08:58:26 +02:00
Ganesh Kumar C
7bfc1ebbe4 feat(ui): add sync with system theme option(#5554) 2024-10-21 08:35:59 +02:00
Rafael Floriano
1f850fb845 chore(ui): increase the width of the scrollbar for file explorer (#5552) 2024-10-21 08:15:33 +02:00
Sharad Kushwaha
4fbf1977be chore(ui): compress plugins page background header image (#5559) 2024-10-21 08:09:57 +02:00
Loïc Mathieu
48da2a746c fix(core): ResumeTest didn't pass anymore
As we cannot anymore pause in one branch and continue in the other
2024-10-18 16:50:24 +02:00
GitHub Action
416e2a1ffd chore(translations): auto generate values for languages other than english 2024-10-18 16:50:24 +02:00
Loïc Mathieu
7c665c76be feat(*): pause a running execution manually
Fixes #1937
2024-10-18 16:50:24 +02:00
brian.mulier
a438f9c0dc fix(tests): uppercases in metadata keys to make sure case is kept upon retrieval
part of kestra-io/storage-minio#95
2024-10-18 16:18:11 +02:00
Loïc Mathieu
7783846d25 fix(webserver): don't load the flow too early so a user with only EXECUTION permission can access execution files
Fixes https://github.com/kestra-io/kestra/issues/4958
2024-10-18 15:23:18 +02:00
brian.mulier
85c9892ff9 fix(ui): code blocks had wrong indent
closes #5504
2024-10-18 14:23:19 +02:00
Loïc Mathieu
0f6b501895 fix(core): decrypt additional render variables
Fixes https://github.com/kestra-io/plugin-kubernetes/issues/150
2024-10-18 14:22:29 +02:00
brian.mulier
2767eebcd0 fix(core): better error message in case of docker socket not found / not accessible
closes #5524
2024-10-18 13:59:00 +02:00
Loïc Mathieu
4044189e90 chore(core): fixup 2024-10-18 12:48:35 +02:00
Harsh4902
43e56f8943 fixes #5459 used HashMap instead of Map to accept null values.
Signed-off-by: Harsh4902 <harshparmar4902@gmail.com>
2024-10-18 12:48:35 +02:00
Harsh4902
4f79597ae9 fixes #5459 added small null check in io.kestra.plugin.core.http.Trigger.evaluate to check wether response body is empty or not
Signed-off-by: Harsh4902 <harshparmar4902@gmail.com>
2024-10-18 12:48:35 +02:00
Mradul Vishwakarma
80c6b653d8 chore(ui): auto scroll plugins list to the currently open one (#5536) 2024-10-18 11:29:27 +02:00
Miloš Paunović
96e5cbccb8 fix(ui): amend display of trigger inputs (#5542) 2024-10-18 11:24:02 +02:00
brian.mulier
51b78a963a fix(doc): CardLogos.vue had wrong URL
closes kestra-io/docs#1808
2024-10-18 10:26:36 +02:00
Hashim Khalifa
5a88745118 feat(core): implemented a new input type email with validation (#5513)
close #5477

Co-authored-by: YannC <ycoornaert@kestra.io>
2024-10-18 09:38:21 +02:00
YannC
cfe5024fda fix(core): correctly cast input to FLOAT for subflows (#5539)
close #5535
2024-10-18 09:29:02 +02:00
Mohammed Viqar Ahmed
e2f0b501f8 Renaming RUNNING to IN-PROGRESS within the ForEachItem execution #3453 (#5471)
close #3453
2024-10-18 09:09:06 +02:00
Miloš Paunović
5b1cb060a5 feat: change the view of trigger outputs (#5519) 2024-10-17 12:12:06 +02:00
Sai Mounika Peri
0b1536f5ab fix(ui): concurrency limit should be greater than zero (#5500)
close #4904
2024-10-17 11:47:03 +02:00
Varsha U N
7ddf8bd40e chore(ui): increase the in-app docs scrollbar width (#5473) 2024-10-17 09:39:38 +02:00
Purandhar Adigarla
17198798be chore(ui): add an extra space between icon and label inside a button (#5507)
Co-authored-by: PurandharAdigarla <purandharadigarla.com>
2024-10-17 09:00:19 +02:00
Florian Hussonnois
548e058cf8 fix(core): fix inputs for execution resume (#5494)
fix: #5494
2024-10-16 17:58:42 +02:00
Sachin
5acb6d044e fix(ui): hide pagination when no flows results data available (#5501)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-16 17:33:45 +02:00
GitHub Action
c7cb4172a3 chore(translations): auto generate values for languages other than english 2024-10-16 14:13:14 +00:00
Sachin
53f77f9ea5 chore(ui): update no logs message for flows source search
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-16 16:12:50 +02:00
Loïc Mathieu
caf55800eb feat(core): add error message and stacktrace to the execution 2024-10-16 15:27:31 +02:00
Loïc Mathieu
074c0332a4 feat(core, ui): add the failed task id to the execution context
Part-of: https://github.com/kestra-io/kestra/issues/2000
2024-10-16 11:55:19 +02:00
Loïc Mathieu
c53a001f21 chore: publish Docker latest-full image
Fixes https://github.com/kestra-io/kestra/issues/5475
2024-10-16 10:40:12 +02:00
YannC
e3ae19a73d feat(core): add allowWarning property (#5472)
close #1926
2024-10-16 10:07:12 +02:00
Miloš Paunović
edcb07ad6e chore(deps): regular dependency update (#5488) 2024-10-16 08:29:24 +02:00
GitHub Action
0b2da83c8a chore(translations): auto generate values for languages other than english 2024-10-15 14:55:16 +00:00
YannC
cc25ca89ee feat(core): add condition property to Task to simplify conditional (#5331)
* feat(core): add condition property to Task to simplify conditional

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

* chore(test): test + optimize code in executor

---------

Co-authored-by: GitHub Action <actions@github.com>
2024-10-15 16:54:53 +02:00
YannC
3f18e2c2dd feat(core): Modify constraint error message to replace taskId if exist (#5461)
* feat(core): Modify constraint error message to replace taskId if exist

* feat(): improved message and fix tests
2024-10-15 14:40:22 +02:00
yuri
80d8a7ff7d fix(github): fix template typo 2024-10-15 13:37:25 +02:00
Loïc Mathieu
4f9121eadb fix(core): imrove flaky test for skip execution 2024-10-15 11:44:03 +02:00
Loïc Mathieu
2c6e4df637 fix(core): add back the indexer in all cases 2024-10-15 11:44:03 +02:00
Loïc Mathieu
e9b4df4ffa fix(core): allow starting without an indexer as tests may not have one 2024-10-15 10:51:33 +02:00
Florian Hussonnois
c97a10b47b refactor(core): move to reactor for handling execution inputs (#5383)
related-to: #5383
2024-10-15 09:41:30 +02:00
YannC
a95d31739d fix(*): allow deletion of label by setting empty key or empty value (#5452) 2024-10-14 16:54:12 +02:00
YannC
a47e293ffe feat(core): cli command for update/create/delete single flow (#5410)
close #747
2024-10-14 14:07:38 +02:00
Shruti Mantri
46f8bef5cc feat(docs): add more HTTP Request task full plugin examples (#5429)
* feat(docs): add more HTTP Request task full plugin examples

* Update core/src/main/java/io/kestra/plugin/core/http/Request.java

---------

Co-authored-by: Will Russell <wrussell@kestra.io>
2024-10-14 11:09:35 +01:00
Loïc Mathieu
d78832f6bf feat(core): allow dynamic properties for Split and ForEachItem
Fixes #5442
2024-10-14 12:04:31 +02:00
Malay Dewangan
c667fbf748 fix(core): OutputValues to support arrays and complex objects (#5440) 2024-10-14 10:57:37 +02:00
Sachin
b5f00e69f5 chore(ui): use standard graphs across all pages (#5443) 2024-10-14 10:39:47 +02:00
MITHIN DEV
f297f9053a chore(ui): make bar chart more responsive on smaller screens (#5439)
Signed-off-by: mithindev <mithindev1@gmail.com>
2024-10-14 10:35:21 +02:00
yuri
b256722ac9 feat(ui): allow searching read-only inputs (#5427) 2024-10-14 10:26:50 +02:00
Sachin
ea68ac8e4e fix(ui): prevent tab title change on cancelling unsaved changes (#5435)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-14 10:24:45 +02:00
Sachin
bf8ef645fb fix(ui): resolve issue preventing flow creation (#5444)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-14 10:22:52 +02:00
Miloš Paunović
6384615ce5 chore(ui): add filters for flow logs (#5446) 2024-10-14 10:19:21 +02:00
Loïc Mathieu
5228ccf0f8 feat(core, jdbc): introduce a JDBC indexer 2024-10-14 09:28:41 +02:00
brian.mulier
876b36cf89 fix(tests): add a test to cover a put file from another storage file data
part of #4761
2024-10-11 18:43:23 +02:00
dependabot[bot]
e12ba7d606 chore(deps): bump net.thisptr:jackson-jq
Bumps [net.thisptr:jackson-jq](https://github.com/eiiches/jackson-jq) from 1.0.0-preview.20240207 to 1.0.1.
- [Release notes](https://github.com/eiiches/jackson-jq/releases)
- [Commits](https://github.com/eiiches/jackson-jq/compare/1.0.0-preview.20240207...1.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-11 16:35:06 +02:00
dependabot[bot]
3cc60f8fad chore(deps): bump aquasecurity/trivy-action from 0.24.0 to 0.27.0
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.24.0 to 0.27.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.24.0...0.27.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-10-11 16:12:08 +02:00
brian.mulier
18901dd41c feat(webserver): send system namespace value in config endpoint
part of #5396
2024-10-11 16:05:16 +02:00
GitHub Action
be87bef420 chore(translations): auto generate values for languages other than english 2024-10-11 13:46:53 +00:00
Will Russell
3f46f127a5 fix: move plus to correct position 2024-10-11 14:46:28 +01:00
Loïc Mathieu
4e514cb6cf fix(cli): incorrect JDBC conf 2024-10-11 14:30:28 +02:00
Miloš Paunović
7c81319b57 chore(ui): check if tab exists before setting dirty attribute on it (#5423) 2024-10-11 12:35:29 +02:00
GitHub Action
cfc8389c94 chore(translations): auto generate values for languages other than english 2024-10-11 09:43:04 +00:00
Mohammed Viqar Ahmed
90a4e97bdb feat(ui): add option to delete multiple kv pairs at once (#5413) 2024-10-11 11:42:35 +02:00
Jonnadula Chaitanya
b4b0253167 fix(ui): take default namespace into account on filters (#5406) 2024-10-11 11:31:33 +02:00
yuri
cbca503c7b chore(git): remove unintended submodule (#5414)
Removed Git submodule introdued by 4b5ca3013f.
2024-10-11 09:28:19 +02:00
YannC
e2daaf091d feat(core): create new command to allows update multiple flows whatever the namespace and update the FlowNamespaceUpdateCommand to add an option to override all namespaces (#5407) 2024-10-10 22:30:34 +02:00
Florian Hussonnois
78bd7d2283 chore(ore): update DeserializationException 2024-10-10 21:14:48 +02:00
Loïc Mathieu
9bb0dd37ab feat(core): ForEachItme avoid checking all split file for existance but list them 2024-10-10 17:36:17 +02:00
Florian Hussonnois
9fee966484 fix(core): fix do not upload file when validating inputs (#5399)
Fix: #5399
2024-10-10 14:20:26 +02:00
Miloš Paunović
daadfdb31a fix(ui): amend duplication the lables field on execution run (#5405) 2024-10-10 11:50:51 +02:00
Florian Hussonnois
eb1fc25a0d refactor(core): enhancement for service liveness
This commit contains some code refactoring to decouple
the ServiceLivenessManager and ServiceLivenessCoordinator
from repository.

Changes:
- add new ServiceLivenessStore interface
- add new ServiceLivenessUpdater interface
2024-10-10 10:54:07 +02:00
Miloš Paunović
dd7daf7cd5 chore(ui): filter out system namespace from namespace select filter (#5403) 2024-10-10 10:53:29 +02:00
Will Russell
35e6f21a48 fix: remove depreciated blueprint 2024-10-10 09:49:15 +01:00
Loïc Mathieu
99fa553c62 fix(core): incorrect duration metric computed on the Worker 2024-10-10 10:38:54 +02:00
riya mustare
59b63e6691 Pre-fill namespace from current filter (#5398) 2024-10-10 09:36:34 +02:00
Miloš Paunović
39fb9351c9 fix(ui): make sure disable toggle for triggers of next executions works every time (#5397) 2024-10-10 09:06:31 +02:00
YannC
693702a514 feat(core): Files changes watcher (#5382) 2024-10-10 08:31:22 +02:00
YannC
705b9af0ca feat(core): add new prop tasks to add current state of each existing taskRun in the runContext (#5386) 2024-10-10 08:31:04 +02:00
Mohammed Viqar Ahmed
44d581d5cf chore(docs): add section about javascript memory heap out error in contributing guide (#5392)
* CONTRIBUTING.md : addind node options variable

* chore(ui): improve wording of contribution guide

---------

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-10-10 08:20:30 +02:00
Ahmad Midlaj B
fbf9d0070c fix(ui): make execution replay dialog description readable in dark theme (#5360)
* fix(ui): make text readable in dark theme

* chore(ui): revert package-lock.json file to initial state

---------

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-10-09 21:44:46 +02:00
Miloš Paunović
f3a53c3c33 fix(ui): revert icon coloring tweak (#5393) 2024-10-09 19:02:37 +02:00
brian.mulier
15b1849974 fix(cli): lighter json schema on PluginDocCommand 2024-10-09 18:40:15 +02:00
brian.mulier
51a5cbeb37 fix(cli): ability to generate json schema when using PluginDocCommand 2024-10-09 18:08:56 +02:00
brian.mulier
a80ecbb99b fix(core): allow ExecutableTasks to be deserialized to allow graph deserialization 2024-10-09 17:31:43 +02:00
riya mustare
a814bd477b aligned relative filter (#5388) 2024-10-09 17:07:00 +02:00
Loïc Mathieu
ad93c23cd5 chore(core,jdbc): refactory flow topology to use flow with source 2024-10-09 16:40:03 +02:00
Miloš Paunović
4ee3883cdf fix(ui): amend dark mode icon color on plugins page (#5385) 2024-10-09 14:40:10 +02:00
Harshvardhan Parmar
7ba57df893 fix(ui): prevent overwriting the flow after save from topology (#5361)
Signed-off-by: Harsh4902 <harshparmar4902@gmail.com>
2024-10-09 10:49:16 +02:00
Florian Hussonnois
77f0f1f631 feat(webserver): add API to bulk-delete multiple KV pairs (#5359)
related-to: #5359
2024-10-09 10:20:31 +02:00
Miloš Paunović
f093ca88ff chore(deps): regular dependency update (#5375) 2024-10-09 09:10:50 +02:00
GitHub Action
fce7e5b1b8 chore(translations): auto generate values for languages other than english 2024-10-09 06:16:58 +00:00
Sai Mounika Peri
b695d2ae97 feat(ui): add a tooltip over flow triggers tab if empty (#5358)
Co-authored-by: Will Russell <will@wrussell.co.uk>
2024-10-09 08:14:21 +02:00
Loïc Mathieu
84d845cde4 chore(core, jdbc): refactor Worker with more immutability
Avoid mutating the WorkerTask inside the worker, thanks to that we can avoid serialization/deserialization steps for cleanup transient that can eat up more than 15% of CPU time in the Worker on contrived benchmarks.
2024-10-08 17:26:58 +02:00
YannC
64466103a4 feat(scheduler): add missing "skipLocked()" method so multiple scheduler can query triggers (#5347) 2024-10-08 16:44:05 +02:00
Miloš Paunović
afb3b934e2 chore(ui): make sidebar toggle more prominent (#5357) 2024-10-08 16:26:16 +02:00
Loïc Mathieu
012b9bf67c fix(jdbc): always include deleted the the logs and metrics queries
Even if not needed to be sure we use the correct index.
2024-10-08 13:11:27 +02:00
Loïc Mathieu
157a8063cc chore(core): avoid recreating an ObjectMapper in YamlFlowParser 2024-10-08 12:30:01 +02:00
YannC
2c212598b1 fix(scheduler): Do not remove next schedule date, and add trigger in schedulableNextDate at initialization (#5349)
close #3535
2024-10-08 10:51:20 +02:00
YannC
83f0fe3841 fix(core): missing retry in toFlow() and of() method in Flow class (#5343) 2024-10-08 10:18:40 +02:00
Sachin
e6161c3d11 feat(ui): add chart visibility toggle to flows and logs page (#5345)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-08 10:07:43 +02:00
Sachin
1c3d271dae fix(ui): amend translation keys usage (#5346)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-08 09:47:56 +02:00
GitHub Action
432e896b71 chore(translations): auto generate values for languages other than english 2024-10-08 07:24:30 +00:00
Sai Mounika Peri
b8e4325523 feat(ui): improve page shown when flow has no dependencies (#5340) 2024-10-08 09:23:46 +02:00
riya mustare
54ac92f789 chore(ui): reduced line height on input description (#5344) 2024-10-08 09:16:57 +02:00
Loïc Mathieu
9f686a28cc feat(core,jdbc,webserver): plugin default from Flow source
This would avoid having default values set in the Flow object (JSON) representation so allows to set default that override the object default value (like the one from Lombok `@Builder.Default`).

Fixes #2260
Fixes #2797
2024-10-08 09:04:57 +02:00
Florian Hussonnois
7ec254ae92 feat(core): move service usages 2024-10-07 16:31:05 +02:00
Anna Geller
b95f514a76 Update en.json (#5339)
* Update en.json

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

---------

Co-authored-by: GitHub Action <actions@github.com>
2024-10-07 15:32:12 +02:00
Sachin
fae3f13760 fix(ui): add bottom border on debug outputs (#5334)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-07 13:05:24 +02:00
Sachin
663ae2030f fix(ui): prevent removal of empty fields in metadata editor (#5313)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-07 11:24:10 +02:00
Sachin
af311f6e07 fix(ui): amend flow disable from low code editor (#5315)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-07 11:19:53 +02:00
brian.mulier
59f10d452a fix(core): windows backslashes in paths were leading to wrong URI being created leading to error upon execution deletion 2024-10-07 11:15:05 +02:00
Sachin
4b2fbe8338 fix(ui): persisting flow metadata from low code editor (#5316)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-07 11:14:19 +02:00
YannC
98ef14c145 fix(core): set min & max size to flow id/namespace props (#5306) 2024-10-07 11:11:03 +02:00
Sachin
6a44177e88 feat(ui): added executions tab to single namespace (#5322)
Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
2024-10-07 11:03:00 +02:00
Antoine Gauthier
744888526f chore(ui): update button conditions based on flow states (#5319) 2024-10-07 10:29:23 +02:00
Karthik D
4b5ca3013f docs: add Docker Hub documentation and image tags (#5304) 2024-10-07 10:08:17 +02:00
dependabot[bot]
615e1d6831 chore(deps): bump org.junit-pioneer:junit-pioneer from 2.2.0 to 2.3.0
Bumps [org.junit-pioneer:junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases)
- [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v2.2.0...v2.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 10:07:45 +02:00
dependabot[bot]
6f22bba373 chore(deps): bump opensearchRestVersion from 2.17.0 to 2.17.1
Bumps `opensearchRestVersion` from 2.17.0 to 2.17.1.

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 09:47:33 +02:00
dependabot[bot]
da007ec1e8 chore(deps): bump nl.basjes.gitignore:gitignore-reader
Bumps [nl.basjes.gitignore:gitignore-reader](https://github.com/nielsbasjes/codeowners) from 1.8.0 to 1.9.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.8.0...v1.9.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>
2024-10-07 09:47:06 +02:00
dependabot[bot]
9cb3ac96b4 chore(deps): bump io.micronaut.platform:micronaut-platform
Bumps [io.micronaut.platform:micronaut-platform](https://github.com/micronaut-projects/micronaut-platform) from 4.6.2 to 4.6.3.
- [Release notes](https://github.com/micronaut-projects/micronaut-platform/releases)
- [Commits](https://github.com/micronaut-projects/micronaut-platform/compare/v4.6.2...v4.6.3)

---
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-10-07 09:46:53 +02:00
Sai Mounika Peri
624dbb4d30 chore(ui): improve validation for kv store (#5321)
* Validation error of previous type should be cleared once the KV type is changed

* chore(ui): remove comment as code is self-explanatory

---------

Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-10-07 08:58:33 +02:00
brian.mulier
39c2698756 fix(core): path matcher for windows were not working 2024-10-04 19:40:39 +02:00
dependabot[bot]
98477ae9a6 chore(deps): bump org.jooq:jooq from 3.19.12 to 3.19.13
Bumps org.jooq:jooq from 3.19.12 to 3.19.13.

---
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-10-04 17:06:03 +02:00
Loïc Mathieu
f92da780f7 feat(core): Plugin Default validation
Fixes https://github.com/kestra-io/kestra-ee/issues/39
2024-10-04 17:04:48 +02:00
GitHub Action
70de7a1d57 chore(translations): auto generate values for languages other than english 2024-10-04 13:40:24 +00:00
Miloš Paunović
a0dcf585fb chore(ui): improve the dashboard ratios calculation (#5311) 2024-10-04 15:39:43 +02:00
Sachin
3be6f1c320 chore(ui): use improved chart for flow executions (#5309)
* Replace the Flows Execution barchart with the barchart used on the main dashboard

* chore(ui): added bottom margin

---------

Co-authored-by: Sachin KS <mac@apples-MacBook-Air.local>
Co-authored-by: MilosPaunovic <paun992@hotmail.com>
2024-10-04 14:58:10 +02:00
Loïc Mathieu
584e7679a0 feat(core): switch to callable and don't use another thread to run the task 2024-10-04 14:34:58 +02:00
YannC
d982881bd9 fix(ui): filter by triggerId when loading logs from triggerFlow page (#5307) 2024-10-04 11:24:00 +02:00
Miloš Paunović
11cdf2369c fix(ui): prevent cases where dashboard totals shows nan instead of value (#5308) 2024-10-04 10:54:23 +02:00
Loïc Mathieu
2c8212c5e7 Revert "feat(core): switch to callable and don't use another thread to run the task"
This reverts commit b106458561.
2024-10-04 09:45:58 +02:00
Loïc Mathieu
3e656cd3cb fix(core): log with the final taskrun 2024-10-04 09:24:27 +02:00
Loïc Mathieu
b106458561 feat(core): switch to callable and don't use another thread to run the task 2024-10-04 09:24:27 +02:00
Miloš Paunović
d9dfbb8be4 fix(ui): amend end date on dashboard refresh (#5303) 2024-10-04 09:05:20 +02:00
Miloš Paunović
637e7ee160 chore(ui): re-calculate translation strings for left menu after language change (#5302) 2024-10-04 08:02:34 +02:00
Miloš Paunović
7b11b1c359 chore(ci): add check for translation keys matching (#5301) 2024-10-03 21:51:50 +02:00
Miloš Paunović
9325668ffd chore(ui): uniform translation keys across languages (#5298) 2024-10-03 20:03:51 +02:00
Florian Hussonnois
0d17a81899 refactor(core): use interface HasUID when possible
This commit adds a new HasUID interface for explicitly
managing classes that expose a unique identifier
2024-10-03 19:54:41 +02:00
YannC
f93013abc3 feat(core): Added namespaces property to the Count task (#5295) 2024-10-03 15:28:42 +02:00
Miloš Paunović
216a083404 fix(ui): amend logs scrolling for the last task (#5294) 2024-10-03 13:21:00 +02:00
Loïc Mathieu
d9ec3628fa fix(core): plugin default test 2024-10-03 11:07:11 +02:00
Loïc Mathieu
975ab4ba7f feat: allow to send output from a failed task
Fixes #4020
2024-10-03 10:29:40 +02:00
MilosPaunovic
c11d7a7cb8 chore(ci): exit workflow with success if no changes are present 2024-10-03 09:35:59 +02:00
Loïc Mathieu
23582c1057 fix(core): hide secret inputs in logs
Fixes #5259
2024-10-03 09:32:45 +02:00
MilosPaunovic
1d219d58b6 chore(ci): separate direct pull requests and the ones from forked repositories 2024-10-03 09:20:12 +02:00
MilosPaunovic
b2045b2364 chore(ci): expose paste to editor function globally for testing 2024-10-03 08:31:04 +02:00
yuri
a0f2547a1b fix(ui): enable keyboard shortcut to launch execution (#5288) 2024-10-03 08:16:20 +02:00
Vivek Gangwani
9d09786b2e fix (ui): Unable to unselect the currently chosen log level (#5287)
* Update root.scss to Fix Topology View for Light Mode

* Update root-dark.scss to unify Gantt and TOpology View Colors

* Added deselect button for Log Levels
2024-10-02 18:49:30 +02:00
Vivek Gangwani
8763455eca chore(ui): making the color scheme the same for gantt and topology(#5280) 2024-10-02 16:00:19 +02:00
brian.mulier
9dc32febf6 fix(ui): properly expand parent on route change in Docs tab 2024-10-02 14:44:26 +02:00
brian.mulier
7a8002bf18 fix(ui): no more blinking upon clicking on a parent page in docs
close #5270
2024-10-02 13:37:31 +02:00
MilosPaunovic
79bc504620 chore(ui): uniform using import class 2024-10-02 12:50:28 +02:00
Miloš Paunović
bd71b2f8ab chore(ci): generate translation values as a commit to existing pull request (#5278) 2024-10-02 12:37:22 +02:00
Ludovic DEHON
e7ea224e16 fix(ui): use same layout for plugin than doc
close #5218
2024-10-02 11:26:33 +02:00
Sai Mounika Peri
2a68d8e1e0 chore(ui): update parent from metadata editor (#5265) 2024-10-02 11:07:47 +02:00
AbdurRahman2004
0436dd72ae chore(ui): move the delete logs button to top (#5266)
* Move 'Delete logs' button to top right corner of navigation

---------

Co-authored-by: Miloš Paunović <paun992@hotmail.com>
2024-10-02 10:31:39 +02:00
Florian Hussonnois
6629e7a49c fix(core): use tenant for resolving worker groups 2024-10-02 10:16:16 +02:00
Antoine Gauthier
ea39f0ce40 fix(ui): amend typos in french translations (#5272) 2024-10-02 09:53:58 +02:00
dependabot[bot]
495e72707c chore(deps): bump posthog-js from 1.165.1 to 1.166.1 in /ui (#5271)
Bumps [posthog-js](https://github.com/PostHog/posthog-js) from 1.165.1 to 1.166.1.
- [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.165.1...v1.166.1)

---
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-10-02 09:46:39 +02:00
Ludovic DEHON
d2c7b0e762 chore(cicd): keep the same allure report directory no matter the run 2024-10-01 23:54:13 +02:00
brian.mulier
255263a7fa fix(ci): add back datahub plugin to ci build 2024-10-01 22:30:58 +02:00
brian.mulier
f403d3efbd fix(ci): remove datahub plugin for now as it's not finished 2024-10-01 18:14:29 +02:00
github-actions[bot]
69a4ba25fb Auto-generate translations from en.json (#5264)
Co-authored-by: GitHub Action <actions@github.com>
2024-10-01 17:50:30 +02:00
Jonnadula Chaitanya
66159fab53 feat(ui): "see all" options to executions in progress #5200 (#5260)
* feat(ui): "see all" options to executions in progress

* fix(ui): polishing

---------

Co-authored-by: YannC <ycoornaert@kestra.io>
2024-10-01 17:48:41 +02:00
dependabot[bot]
cfbe36840d chore(deps): bump com.fasterxml.jackson:jackson-bom
Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.17.2 to 2.18.0.
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.17.2...jackson-bom-2.18.0)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson:jackson-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 17:25:41 +02:00
dependabot[bot]
dedf6e5141 chore(deps): bump com.github.oshi:oshi-core from 6.6.4 to 6.6.5
Bumps [com.github.oshi:oshi-core](https://github.com/oshi/oshi) from 6.6.4 to 6.6.5.
- [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.4...oshi-parent-6.6.5)

---
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>
2024-10-01 17:25:30 +02:00
dependabot[bot]
805353cc80 chore(deps): bump org.apache.logging.log4j:log4j-to-slf4j
Bumps org.apache.logging.log4j:log4j-to-slf4j from 2.24.0 to 2.24.1.

---
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-10-01 17:25:18 +02:00
Loïc Mathieu
b5b66a375d fix(core): kv.GetKeys with no prefix 2024-10-01 17:25:05 +02:00
brian.mulier
9e9544550e fix(ci): restore github release on main workflow in case of skipped e2e 2024-10-01 15:29:00 +02:00
brian.mulier
2c674115fa fix(ci): publish maven even if E2E were skipped 2024-10-01 14:24:59 +02:00
brian.mulier
2e1d91bb12 fix(ci): no more docker build & E2E for tags build 2024-10-01 13:14:22 +02:00
Miloš Paunović
a9950c76fc chore(docs): add a link to filtered out good first issues (#5255) 2024-10-01 12:09:37 +02:00
Loïc Mathieu
0d64bf7c47 doc(cicd): improve contributing guidelines (#5256) 2024-10-01 12:09:16 +02:00
brian.mulier
cccc7df18f chore(version): update snapshot version 'v0.20.0-SNAPSHOT'. 2024-10-01 11:24:52 +02:00
brian.mulier
a56361f249 chore(version): update to version 'v0.19.0'. 2024-10-01 11:24:48 +02:00
1377 changed files with 66435 additions and 20634 deletions

View File

@@ -31,8 +31,8 @@ Watch out for duplicates! If you are creating a new issue, please check existing
#### Requirements
The following dependencies are required to build Kestra locally:
- Java 17+, Kestra runs on Java 11 but we hit a Java compiler bug fixed in Java 17
- Node 14+ and npm
- Java 21+
- Node 18+ and npm
- Python 3, pip and python venv
- Docker & Docker Compose
- an IDE (Intellij IDEA, Eclipse or VS Code)
@@ -52,14 +52,17 @@ The backend is made with [Micronaut](https://micronaut.io).
Open the cloned repository in your favorite IDE. In most of decent IDEs, Gradle build will be detected and all dependencies will be downloaded.
You can also build it from a terminal using `./gradlew build`, the Gradle wrapper will download the right Gradle version to use.
- You may need to enable java annotation processors since we are using it a lot.
- The main class is `io.kestra.cli.App` from module `kestra.cli.main`
- Pass as program arguments the server you want to develop, for example `server local` will start the [standalone local](https://kestra.io/docs/administrator-guide/server-cli#kestra-local-development-server-with-no-dependencies)
- ![Intellij Idea Configuration ](https://user-images.githubusercontent.com/2064609/161399626-1b681add-cfa8-4e0e-a843-2631cc59758d.png) Intellij Idea configuration can be found in screenshot below.
- `MICRONAUT_ENVIRONMENTS`: can be set any string and will load a custom configuration file in `cli/src/main/resources/application-{env}.yml`
- `KESTRA_PLUGINS_PATH`: is the path where you will save plugins as Jar and will be load on the startup.
- You can also use the gradle task `./gradlew runLocal` that will run a standalone server with `MICRONAUT_ENVIRONMENTS=override` and plugins path `local/plugins`
- The server start by default on port 8080 and is reachable on `http://localhost:8080`
- You may need to enable java annotation processors since we are using them.
- On IntelliJ IDEA, click on **Run -> Edit Configurations -> + Add new Configuration** to create a run configuration to start Kestra.
- The main class is `io.kestra.cli.App` from module `kestra.cli.main`.
- Pass as program arguments the server you want to work with, for example `server local` will start the [standalone local](https://kestra.io/docs/administrator-guide/server-cli#kestra-local-development-server-with-no-dependencies). You can also use `server standalone` and use the provided `docker-compose-ci.yml` Docker compose file to start a standalone server with a real database as a backend that would need to be configured properly.
- Configure the following environment variables:
- `MICRONAUT_ENVIRONMENTS`: can be set to any string and will load a custom configuration file in `cli/src/main/resources/application-{env}.yml`.
- `KESTRA_PLUGINS_PATH`: is the path where you will save plugins as Jar and will be load on startup.
- See the screenshot below for an example: ![Intellij IDEA Configuration ](run-app.png)
- If you encounter **JavaScript memory heap out** error during startup, configure `NODE_OPTIONS` environment variable with some large value.
- Example `NODE_OPTIONS: --max-old-space-size=4096` or `NODE_OPTIONS: --max-old-space-size=8192` ![Intellij IDEA Configuration ](node_option_env_var.png)
- The server starts by default on port 8080 and is reachable on `http://localhost:8080`
If you want to launch all tests, you need Python and some packages installed on your machine, on Ubuntu you can install them with:
@@ -72,14 +75,14 @@ python3 -m pip install virtualenv
#### Develop frontend
The frontend is made with [Vue.js](https://vuejs.org/) and located on the `/ui` folder.
- `npm install --force` (force is need because of some conflicting package)
- create a files `ui/.env.development.local` with content `VITE_APP_API_URL=http://localhost:8080` (or your actual server url)
- `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 8090 and is reachable on `http://localhost:5173`
- 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.
Now, you need to start a backend server, you could:
- start a [local server](https://kestra.io/docs/administrator-guide/server-cli#kestra-local-development-server-with-no-dependencies) without database using this docker-compose file already configured with CORS enabled:
- start a [local server](https://kestra.io/docs/administrator-guide/server-cli#kestra-local-development-server-with-no-dependencies) without a database using this docker-compose file already configured with CORS enabled:
```yaml
services:
kestra:
@@ -99,7 +102,7 @@ services:
ports:
- "8080:8080"
```
- start the [Develop backend](#develop-backend) from your IDE and you need to configure CORS restrictions when using the local development npm server, changing the backend configuration allowing the http://localhost:5173 origin in `cli/src/main/resources/application-override.yml`
- start the [Develop backend](#develop-backend) from your IDE, you need to configure CORS restrictions when using the local development npm server, changing the backend configuration allowing the http://localhost:5173 origin in `cli/src/main/resources/application-override.yml`
```yaml
micronaut:
@@ -133,4 +136,4 @@ A complete documentation for developing plugin can be found [here](https://kestr
### Improving The Documentation
The main documentation is located in a separate [repository](https://github.com/kestra-io/kestra.io).
For tasks documentation, they are located directly on Java source using [Swagger annotations](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations) (Example: [for Bash tasks](https://github.com/kestra-io/kestra/blob/develop/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java))
For tasks documentation, they are located directly in the Java source, using [Swagger annotations](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations) (Example: [for Bash tasks](https://github.com/kestra-io/kestra/blob/develop/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java))

View File

@@ -1,54 +0,0 @@
name: Blueprint
description: Add a new blueprint
body:
- type: markdown
attributes:
value: |
Please fill out all the fields listed below. This will help us review and add your blueprint faster.
- type: textarea
attributes:
label: Blueprint title
description: A title briefly describing what the blueprint does, ideally in a verb phrase + noun format.
placeholder: E.g. "Upload a file to service X, then run Y and Z"
validations:
required: true
- type: textarea
attributes:
label: Source code
description: Flow code that will appear on the Blueprint page.
placeholder: |
```yaml
id: yourFlowId
namespace: blueprint
tasks:
- id: taskName
type: task_type
```
validations:
required: true
- type: textarea
attributes:
label: About this blueprint
description: "A concise markdown documentation about the blueprint's configuration and usage."
placeholder: |
E.g. "This flow downloads a file and uploads it to an S3 bucket. This flow assumes AWS credentials stored as environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`."
validations:
required: false
- type: textarea
attributes:
label: Tags (optional)
description: Blueprint categories such as Ingest, Transform, Analyze, Python, Docker, AWS, GCP, Azure, etc.
placeholder: |
- Ingest
- Transform
- AWS
validations:
required: false
labels:
- blueprint

View File

@@ -4,9 +4,7 @@ body:
- type: markdown
attributes:
value: |
Thanks for reporting an issue! Please provide a [Minima Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example)
and share any additional information that may help reproduce, troubleshoot, and hopefully fix the issue, including screenshots, error traceback, and your Kestra server logs.
NOTE: If your issue is more of a question, please ping us directly on [Slack](https://kestra.io/slack).
Thanks for reporting an issue! Please provide a [Minimal Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) and share any additional information that may help reproduce, troubleshoot, and hopefully fix the issue, including screenshots, error traceback, and your Kestra server logs. For quick questions, you can contact us directly on [Slack](https://kestra.io/slack).
- type: textarea
attributes:
label: Describe the issue
@@ -19,10 +17,10 @@ body:
label: Environment
description: Environment information where the problem occurs.
value: |
- Kestra Version:
- Operating System (OS/Docker/Kubernetes):
- Java Version (if you don't run kestra in Docker):
- Kestra Version: develop
validations:
required: false
labels:
- bug
- bug
- area/backend
- area/frontend

View File

@@ -1,15 +1,13 @@
name: Feature request
description: Create a new feature request
body:
- type: markdown
attributes:
value: |
Please describe the feature you want for Kestra to implement, before that check if there is already an existing issue to add it.
- type: textarea
attributes:
label: Feature description
placeholder: Tell us what feature you would like for Kestra to have and what problem is it going to solve
placeholder: Tell us more about your feature request
validations:
required: true
labels:
- enhancement
- area/backend
- area/frontend

View File

@@ -1,8 +0,0 @@
name: Other
description: Something different
body:
- type: textarea
attributes:
label: Issue description
validations:
required: true

View File

@@ -13,6 +13,9 @@ outputs:
plugins:
description: "List of all Kestra plugins"
value: ${{ steps.plugins.outputs.plugins }}
repositories:
description: "List of all Kestra repositories of plugins"
value: ${{ steps.plugins.outputs.repositories }}
runs:
using: composite
steps:
@@ -20,5 +23,7 @@ runs:
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 '');
PLUGINS=$([ -f ${{ inputs.plugin-file }} ] && cat ${{ inputs.plugin-file }} | grep "io\\.kestra\\." | sed -e '/#/s/^.//' | sed -e "s/LATEST/${{ inputs.plugin-version }}/g" | cut -d':' -f2- | xargs || echo '');
REPOSITORIES=$([ -f ${{ inputs.plugin-file }} ] && cat ${{ inputs.plugin-file }} | grep "io\\.kestra\\." | sed -e '/#/s/^.//' | cut -d':' -f1 | uniq | sort | xargs || echo '')
echo "plugins=$PLUGINS" >> $GITHUB_OUTPUT
echo "repositories=$REPOSITORIES" >> $GITHUB_OUTPUT

View File

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

BIN
.github/node_option_env_var.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
.github/run-app.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

View File

@@ -9,6 +9,8 @@ jobs:
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GOOGLE_SERVICE_ACCOUNT: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
# to save corepack from itself
COREPACK_INTEGRITY_KEYS: 0
name: Check & Publish
runs-on: ubuntu-latest
timeout-minutes: 60
@@ -65,10 +67,10 @@ jobs:
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
- uses: rlespinasse/github-slug-action@v4
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.7.1
uses: andrcuns/allure-publish-action@v2.9.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 }}
@@ -77,33 +79,33 @@ jobs:
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/java') }}
baseUrl: "https://internal.dev.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 == '') }}
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: ${{ env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
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/jacocoTestReport.xml
gsutil -m rsync -d -r build/reports/jacoco/test/ gs://internal-kestra-host/${{ format('{0}/{1}/{2}', github.repository, env.GITHUB_HEAD_REF_SLUG != '' && env.GITHUB_HEAD_REF_SLUG || github.ref_name, 'jacoco') }}
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@v4
uses: mikepenz/action-junit-report@v5
if: success() || failure()
with:
report_paths: '**/build/test-results/**/TEST-*.xml'
# Codecov
- uses: codecov/codecov-action@v4
- uses: codecov/codecov-action@v5
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -1,4 +1,4 @@
name: Create Docker images on tag
name: Create Docker images on Release
on:
workflow_dispatch:
@@ -11,6 +11,10 @@ on:
options:
- "true"
- "false"
release-tag:
description: 'Kestra Release Tag'
required: false
type: string
plugin-version:
description: 'Plugin version'
required: false
@@ -38,7 +42,6 @@ jobs:
name: Publish Docker
needs: [ plugins ]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
strategy:
matrix:
image:
@@ -57,10 +60,19 @@ jobs:
- name: Set image name
id: vars
run: |
TAG=${GITHUB_REF#refs/*/}
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "plugins=${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT
if [[ "${{ inputs.release-tag }}" == "" ]]; then
TAG=${GITHUB_REF#refs/*/}
echo "tag=${TAG}" >> $GITHUB_OUTPUT
else
TAG="${{ inputs.release-tag }}"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
fi
if [[ "${{ env.PLUGIN_VERSION }}" == *"-SNAPSHOT" ]]; then
echo "plugins=--repositories=https://s01.oss.sonatype.org/content/repositories/snapshots ${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT;
else
echo "plugins=${{ matrix.image.plugins }}" >> $GITHUB_OUTPUT
fi
# Download release
- name: Download release
uses: robinraju/release-downloader@v1.11

View File

@@ -146,10 +146,10 @@ jobs:
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
- uses: rlespinasse/github-slug-action@v4
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.7.1
uses: andrcuns/allure-publish-action@v2.9.0
if: ${{ !cancelled() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
env:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_AUTH_TOKEN }}
@@ -158,7 +158,7 @@ jobs:
storageType: gcs
resultsGlob: build/allure-results
bucket: internal-kestra-host
baseUrl: "https://internal.kestra.io"
baseUrl: "https://internal.dev.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,45 +1,111 @@
name: Generate Translations
on:
pull_request:
types: [opened, synchronize]
paths:
- "ui/src/translations/en.json"
push:
branches:
- develop
paths:
- 'ui/src/translations/en.json'
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
jobs:
generate-translations:
name: Generate Translations and Create PR
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: 10 # Ensures that at least 10 commits are fetched for comparison
- 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: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: pip install gitpython openai
- name: Install Python dependencies
run: pip install gitpython openai
- name: Generate translations
run: python ui/src/translations/generate_translations.py
- name: Generate translations
run: python ui/src/translations/generate_translations.py
- name: Commit, push changes, and create PR
env:
GH_TOKEN: ${{ github.token }}
run: |
git config --global user.name "GitHub Action"
git config --global user.email "actions@github.com"
BRANCH_NAME="translations/update-translations-$(date +%s)"
git checkout -b $BRANCH_NAME
git add ui/src/translations/*.json
git commit -m "Auto-generate translations from en.json"
git push --set-upstream origin $BRANCH_NAME
gh pr create --title "Auto-generate translations from en.json" --body "This PR was created automatically by a GitHub Action." --base develop --head $BRANCH_NAME --assignee anna-geller --reviewer anna-geller
- 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

View File

@@ -10,19 +10,19 @@ on:
branches:
- develop
repository_dispatch:
types: [ rebuild ]
types: [rebuild]
workflow_dispatch:
inputs:
skip-test:
description: 'Skip test'
description: "Skip test"
type: choice
required: true
default: 'false'
default: "false"
options:
- "true"
- "false"
plugin-version:
description: 'Plugin version'
description: "Plugin version"
required: false
type: string
default: "LATEST"
@@ -31,32 +31,41 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
JAVA_VERSION: '21'
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' }}
# to save corepack from itself
COREPACK_INTEGRITY_KEYS: 0
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 }}
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
- name: Checkout current ref
uses: actions/checkout@v4
with:
fetch-depth: 0
# Checkout GitHub Actions
- uses: actions/checkout@v4
- name: Checkout GitHub Actions
uses: actions/checkout@v4
with:
repository: kestra-io/actions
path: actions
ref: main
# Npm
- name: Npm install
shell: bash
working-directory: ui
run: npm ci
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
@@ -68,6 +77,7 @@ jobs:
# 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 }}
@@ -75,6 +85,7 @@ jobs:
# 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/*/}
@@ -83,6 +94,7 @@ jobs:
else
echo "plugins=--repositories=https://s01.oss.sonatype.org/content/repositories/snapshots $PLUGINS" >> $GITHUB_OUTPUT
fi
# Build
- name: Build with Gradle
run: |
@@ -122,6 +134,7 @@ jobs:
# Docker Build
- name: Build & Export Docker Image
uses: docker/build-push-action@v6
if: "!startsWith(github.ref, 'refs/tags/v')"
with:
context: .
push: false
@@ -149,14 +162,58 @@ jobs:
- 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
check-frontend:
name: Run frontend tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Npm install
shell: bash
working-directory: ui
run: npm ci
- name: Npm lint
uses: reviewdog/action-eslint@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review # Change reporter.
workdir: "ui"
- name: Run front-end unit tests
shell: bash
working-directory: ui
run: npm run test:unit
- name: Install Playwright
shell: bash
working-directory: ui
run: npx playwright install --with-deps
- name: Build Storybook
shell: bash
working-directory: ui
run: npm run build-storybook --quiet
- name: Serve Storybook and run tests
shell: bash
working-directory: ui
run: |
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
"npx http-server storybook-static --port 6006 --silent" \
"npx wait-on tcp:127.0.0.1:6006 && npm run test-storybook"
# 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 == '' }}
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
@@ -226,14 +283,14 @@ jobs:
- name: Auth to Google Cloud
id: auth
if: ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
uses: 'google-github-actions/auth@v2'
uses: "google-github-actions/auth@v2"
with:
credentials_json: '${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
credentials_json: "${{ secrets.GOOGLE_SERVICE_ACCOUNT }}"
- uses: rlespinasse/github-slug-action@v4
- uses: rlespinasse/github-slug-action@v5
- name: Publish allure report
uses: andrcuns/allure-publish-action@v2.7.1
uses: andrcuns/allure-publish-action@v2.9.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 }}
@@ -242,32 +299,32 @@ jobs:
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/java') }}
baseUrl: "https://internal.dev.kestra.io"
prefix: ${{ format('{0}/{1}', github.repository, 'allure/java') }}
copyLatest: true
ignoreMissingResults: true
# Jacoco
- name: 'Set up Cloud SDK'
- 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'
uses: "google-github-actions/setup-gcloud@v2"
- name: 'Copy jacoco files'
- 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/jacocoTestReport.xml
gsutil -m rsync -d -r build/reports/jacoco/test/ gs://internal-kestra-host/${{ format('{0}/{1}/{2}', github.repository, env.GITHUB_HEAD_REF_SLUG != '' && env.GITHUB_HEAD_REF_SLUG || github.ref_name, 'jacoco') }}
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@v4
uses: mikepenz/action-junit-report@v5
if: success() || failure()
with:
report_paths: '**/build/test-results/**/TEST-*.xml'
report_paths: "**/build/test-results/**/TEST-*.xml"
# Codecov
- uses: codecov/codecov-action@v4
- uses: codecov/codecov-action@v5
if: ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
@@ -275,8 +332,15 @@ jobs:
release:
name: Github Release
runs-on: ubuntu-latest
needs: [ check, check-e2e ]
if: startsWith(github.ref, 'refs/tags/v')
needs: [check, check-e2e]
if: |
always() &&
startsWith(github.ref, 'refs/tags/v') &&
needs.check.result == 'success' &&
(
github.event.inputs.skip-test == 'true' ||
(needs.check-e2e.result == 'skipped' || needs.check-e2e.result == 'success')
)
steps:
# Download Exec
- name: Download executable
@@ -288,6 +352,7 @@ jobs:
# GitHub Release
- name: Create GitHub release
id: create_github_release
uses: "marvinpinto/action-automatic-releases@latest"
if: startsWith(github.ref, 'refs/tags/v')
continue-on-error: true
@@ -297,11 +362,33 @@ jobs:
files: |
build/executable/*
# Trigger gha workflow to bump helm chart version
- name: trigger the Helm chart version bump
uses: peter-evans/repository-dispatch@v3
if: steps.create_github_release.conclusion == 'success'
with:
token: ${{ secrets.GH_PERSONAL_TOKEN }}
repository: kestra-io/helm-charts
event-type: update-helm-chart-version
client-payload: |-
{
"new_version": "${{ github.ref_name }}",
"github_repository": "${{ github.repository }}",
"github_actor": "${{ github.actor }}"
}
docker:
name: Publish Docker
runs-on: ubuntu-latest
needs: [build-artifacts, check, check-e2e]
if: github.ref == 'refs/heads/develop'
if: |
always() &&
github.ref == 'refs/heads/develop' &&
needs.check.result == 'success' &&
(
github.event.inputs.skip-test == 'true' ||
(needs.check-e2e.result == 'skipped' || needs.check-e2e.result == 'success')
)
strategy:
matrix:
image:
@@ -368,7 +455,14 @@ jobs:
name: Publish to Maven
runs-on: ubuntu-latest
needs: [check, check-e2e]
if: github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/v')
if: |
always() &&
(github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/v')) &&
needs.check.result == 'success' &&
(
github.event.inputs.skip-test == 'true' ||
(needs.check-e2e.result == 'skipped' || needs.check-e2e.result == 'success')
)
steps:
- uses: actions/checkout@v4
@@ -431,7 +525,6 @@ jobs:
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
steps:
# Update
- name: Update internal
uses: benc-uk/workflow-dispatch@v1
@@ -450,5 +543,5 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }}
slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
name: GitHub Actions
icon_emoji: ':github-actions:'
channel: 'C02DQ1A7JLR' # _int_git channel
icon_emoji: ":github-actions:"
channel: "C02DQ1A7JLR" # _int_git channel

69
.github/workflows/release-plugins.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: Run Gradle Release for Kestra Plugins
on:
workflow_dispatch:
inputs:
releaseVersion:
description: 'The release version (e.g., 0.21.0-RC1)'
required: true
type: string
nextVersion:
description: 'The next version (e.g., 0.22.0-SNAPSHOT)'
required: true
type: string
dryRun:
description: 'Use DRY_RUN mode'
required: false
default: 'false'
jobs:
release:
name: Release plugins
runs-on: kestra-private-standard
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
python-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: 'LATEST'
# Execute
- name: Run Gradle Release
if: ${{ github.event.inputs.dryRun == 'false' }}
env:
GITHUB_PAT: ${{ secrets.GH_PERSONAL_TOKEN }}
run: |
chmod +x ./release-plugins.sh;
./release-plugins.sh \
--release-version=${{github.event.inputs.releaseVersion}} \
--next-version=${{github.event.inputs.nextVersion}} \
--yes \
${{ steps.plugins-list.outputs.repositories }}
- name: Run Gradle Release (DRY_RUN)
if: ${{ github.event.inputs.dryRun == 'true' }}
env:
GITHUB_PAT: ${{ secrets.GH_PERSONAL_TOKEN }}
run: |
chmod +x ./release-plugins.sh;
./release-plugins.sh \
--release-version=${{github.event.inputs.releaseVersion}} \
--next-version=${{github.event.inputs.nextVersion}} \
--dry-run \
--yes \
${{ steps.plugins-list.outputs.repositories }}

63
.github/workflows/tag-plugins.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
name: Set Version and Tag Plugins
on:
workflow_dispatch:
inputs:
releaseVersion:
description: 'The release version (e.g., 0.21.0)'
required: true
type: string
dryRun:
description: 'Use DRY_RUN mode'
required: false
default: 'false'
jobs:
tag:
name: Release plugins
runs-on: kestra-private-standard
steps:
# Checkout
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Setup build
- uses: ./actions/.github/actions/setup-build
id: build
with:
java-enabled: true
node-enabled: true
python-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: 'LATEST'
# Execute
- name: Set Version and Tag Plugins
if: ${{ github.event.inputs.dryRun == 'false' }}
env:
GITHUB_PAT: ${{ secrets.GH_PERSONAL_TOKEN }}
run: |
chmod +x ./tag-release-plugins.sh;
./tag-release-plugins.sh \
--release-version=${{github.event.inputs.releaseVersion}} \
--yes \
${{ steps.plugins-list.outputs.repositories }}
- name: Set Version and Tag Plugins (DRY_RUN)
if: ${{ github.event.inputs.dryRun == 'true' }}
env:
GITHUB_PAT: ${{ secrets.GH_PERSONAL_TOKEN }}
run: |
chmod +x ./tag-release-plugins.sh;
./tag-release-plugins.sh \
--release-version=${{github.event.inputs.releaseVersion}} \
--dry-run \
--yes \
${{ steps.plugins-list.outputs.repositories }}

View File

@@ -35,6 +35,8 @@ jobs:
# Run OWASP dependency check plugin
- name: Gradle Dependency Check
env:
NVD_API_KEY: ${{ secrets.NIST_APIKEY }}
run: |
./gradlew dependencyCheckAggregate
@@ -72,7 +74,7 @@ jobs:
# Run Trivy image scan for Docker vulnerabilities, see https://github.com/aquasecurity/trivy-action
- name: Docker Vulnerabilities Check
uses: aquasecurity/trivy-action@0.24.0
uses: aquasecurity/trivy-action@0.29.0
with:
image-ref: kestra/kestra:develop
format: table
@@ -105,7 +107,7 @@ jobs:
# Run Trivy image scan for Docker vulnerabilities, see https://github.com/aquasecurity/trivy-action
- name: Docker Vulnerabilities Check
uses: aquasecurity/trivy-action@0.24.0
uses: aquasecurity/trivy-action@0.29.0
with:
image-ref: kestra/kestra:latest
format: table

2
.gitignore vendored
View File

@@ -54,3 +54,5 @@ core/src/main/resources/gradle.properties
# Allure Reports
**/allure-results/*
*storybook.log

199
.plugins
View File

@@ -1,102 +1,105 @@
#
# 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-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-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-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-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

1
.prettierignore Normal file
View File

@@ -0,0 +1 @@
**/*.*

View File

@@ -67,6 +67,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 \

View File

@@ -19,7 +19,7 @@
<br />
<p align="center">
<a href="https://twitter.com/kestra_io"><img height="25" src="https://kestra.io/twitter.svg" alt="twitter" /></a> &nbsp;
<a href="https://x.com/kestra_io"><img height="25" src="https://kestra.io/twitter.svg" alt="X(formerly Twitter)" /></a> &nbsp;
<a href="https://www.linkedin.com/company/kestra/"><img height="25" src="https://kestra.io/linkedin.svg" alt="linkedin" /></a> &nbsp;
<a href="https://www.youtube.com/@kestra-io"><img height="25" src="https://kestra.io/youtube.svg" alt="youtube" /></a> &nbsp;
</p>
@@ -74,6 +74,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!
@@ -142,7 +163,7 @@ Kestra provides an intuitive UI that allows you to interactively build and visua
- **Drag-and-Drop Interface:** add and rearrange tasks from the Topology Editor.
- **Real-Time Validation:** instant feedback on your workflow's syntax and structure to catch errors early.
- **Auto-Completion:** smart suggestions as you type.
- **Auto-Completion:** smart suggestions as you type to write flow code quickly and without syntax errors.
- **Live Topology View:** see your workflow as a Directed Acyclic Graph (DAG) that updates in real-time.
---
@@ -167,9 +188,9 @@ Create custom plugins to extend Kestra's capabilities. Check out our [Plugin Dev
Stay connected and get support:
- **Slack:** Join our [Slack community](https://kestra.io/slack) to ask questions and share ideas.
- **Twitter:** Follow us on [Twitter](https://twitter.com/kestra_io) for the latest updates.
- **YouTube:** Subscribe to our [YouTube channel](https://www.youtube.com/@kestra-io) for tutorials and webinars.
- **LinkedIn:** Connect with us on [LinkedIn](https://www.linkedin.com/company/kestra/).
- **LinkedIn:** Follow us on [LinkedIn](https://www.linkedin.com/company/kestra/) — next to Slack and GitHub, this is our main channel to share updates and product announcements.
- **YouTube:** Subscribe to our [YouTube channel](https://www.youtube.com/@kestra-io) for educational video content. We publish new videos every week!
- **X:** Follow us on [X](https://x.com/kestra_io) if you're still active there.
---
@@ -178,8 +199,9 @@ 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) to start contributing.
- **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!

View File

@@ -1,4 +1,5 @@
import net.e175.klaus.zip.ZipPrefixer
import org.owasp.dependencycheck.gradle.extension.AnalyzerExtension
buildscript {
repositories {
@@ -15,30 +16,30 @@ plugins {
id "java"
id 'java-library'
id "idea"
id "com.github.johnrengelman.shadow" version "8.1.1"
id "com.gradleup.shadow" version "8.3.5"
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-jdk17' version '8.1.0' apply false
id 'org.siouan.frontend-jdk21' version '10.0.0' apply false
// release
id "io.github.gradle-nexus.publish-plugin" version "2.0.0"
id 'net.researchgate.release' version '3.0.2'
id 'net.researchgate.release' version '3.1.0'
id "com.gorylenko.gradle-git-properties" version "2.4.2"
id 'signing'
id 'ru.vyarus.pom' version '3.0.0' apply false
id 'ru.vyarus.github-info' version '2.0.0' apply false
// OWASP dependency check
id "org.owasp.dependencycheck" version "10.0.4" apply false
id "org.owasp.dependencycheck" version "12.0.1" apply false
}
idea {
@@ -51,9 +52,17 @@ idea {
/**********************************************************************************************************************\
* Main
**********************************************************************************************************************/
mainClassName = "io.kestra.cli.App"
sourceCompatibility = 21
targetCompatibility = 21
final mainClassName = "io.kestra.cli.App"
final targetJavaVersion = JavaVersion.VERSION_21
application {
mainClass = mainClassName
}
java {
sourceCompatibility = targetJavaVersion
targetCompatibility = targetJavaVersion
}
dependencies {
implementation project(":cli")
@@ -67,8 +76,10 @@ allprojects {
if (it.name != 'platform') {
group "io.kestra"
sourceCompatibility = 21
targetCompatibility = 21
java {
sourceCompatibility = targetJavaVersion
targetCompatibility = targetJavaVersion
}
repositories {
mavenCentral()
@@ -110,8 +121,10 @@ allprojects {
micronaut "io.micronaut:micronaut-management"
micronaut "io.micrometer:micrometer-core"
micronaut "io.micronaut.micrometer:micronaut-micrometer-registry-prometheus"
micronaut "io.micronaut.micrometer:micronaut-micrometer-registry-otlp"
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"
@@ -122,6 +135,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'
@@ -153,8 +169,10 @@ subprojects {
if (it.name != 'platform') {
apply plugin: "com.adarshr.test-logger"
sourceCompatibility = 21
targetCompatibility = 21
java {
sourceCompatibility = targetJavaVersion
targetCompatibility = targetJavaVersion
}
dependencies {
// Platform
@@ -184,7 +202,8 @@ subprojects {
test {
useJUnitPlatform()
maxHeapSize = "4048m"
// set Xmx for test workers
maxHeapSize = '4g'
// configure en_US default locale for tests
systemProperty 'user.language', 'en'
@@ -325,12 +344,17 @@ dependencyCheck {
failBuildOnCVSS = 7
// disable the .NET assembly analyzer as otherwise it wants to analyze EXE file
analyzers {
assemblyEnabled = false
}
analyzers(new Action<AnalyzerExtension>() {
@Override
void execute(AnalyzerExtension analyzerExtension) {
analyzerExtension.assemblyEnabled = false
}
})
// configure a suppression file
suppressionFile = "$projectDir/owasp-dependency-suppressions.xml"
nvd.apiKey = System.getenv("NVD_API_KEY")
}
/**********************************************************************************************************************\
@@ -338,7 +362,7 @@ dependencyCheck {
**********************************************************************************************************************/
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
options.compilerArgs.add("-parameters")
options.compilerArgs.add("-Xlint:all")
@@ -347,7 +371,7 @@ allprojects {
}
}
tasks.withType(JavaCompile) {
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
options.compilerArgs.add("-parameters")
}
@@ -392,20 +416,25 @@ shadowJar.dependsOn 'ui:assembleFrontend'
/**********************************************************************************************************************\
* Executable Jar
**********************************************************************************************************************/
def executableDir = file("${buildDir}/executable")
def executable = file("${buildDir}/executable/${project.name}-${project.version}")
def executableDir = layout.buildDirectory.dir("executable")
def executable = layout.buildDirectory.file("executable/${project.name}-${project.version}").get().asFile
task writeExecutableJar() {
tasks.register('writeExecutableJar') {
group "build"
description "Write an executable jar from shadow jar"
dependsOn = [shadowJar]
final shadowJarFile = tasks.shadowJar.outputs.files.singleFile
inputs.file shadowJarFile
outputs.file executable
outputs.cacheIf { true }
doFirst {
executableDir.mkdirs()
executableDir.get().asFile.mkdirs()
}
doLast {
executable.setBytes(file("${buildDir}/libs/${project.name}-${project.version}.jar").readBytes())
executable.setBytes(shadowJarFile.readBytes())
ByteArrayOutputStream executableBytes = new ByteArrayOutputStream()
executableBytes.write("\n: <<END_OF_KESTRA_SELFRUN\r\n".getBytes())
executableBytes.write(file("gradle/jar/selfrun.bat").readBytes())
@@ -417,13 +446,13 @@ task writeExecutableJar() {
}
}
task executableJar(type: Zip) {
tasks.register('executableJar', Zip) {
group "build"
description "Zip the executable jar"
dependsOn = [writeExecutableJar]
archiveFileName = "${project.name}-${project.version}.zip"
destinationDirectory = file("${buildDir}/archives")
destinationDirectory = layout.buildDirectory.dir('archives')
from executableDir
archiveClassifier.set(null)
@@ -432,8 +461,9 @@ task executableJar(type: Zip) {
/**********************************************************************************************************************\
* Standalone
**********************************************************************************************************************/
task runLocal(type: JavaExec) {
tasks.register('runLocal', JavaExec) {
group = "application"
description = "Run Kestra as server local"
classpath = project(":cli").sourceSets.main.runtimeClasspath
mainClass = mainClassName
environment 'MICRONAUT_ENVIRONMENTS', 'override'
@@ -468,7 +498,7 @@ subprojects {
}
}
task sourcesJar(type: Jar) {
tasks.register('sourcesJar', Jar) {
dependsOn = [':core:copyGradleProperties']
dependsOn = [':ui:assembleFrontend']
archiveClassifier.set('sources')
@@ -477,14 +507,19 @@ subprojects {
sourcesJar.dependsOn ':core:copyGradleProperties'
sourcesJar.dependsOn ':ui:assembleFrontend'
task javadocJar(type: Jar) {
tasks.register('javadocJar', Jar) {
archiveClassifier.set('javadoc')
from javadoc
}
task testsJar(type: Jar) {
tasks.register('testsJar', Jar) {
group = 'build'
description = 'Build the tests jar'
archiveClassifier.set('tests')
from sourceSets.test.output
if (sourceSets.matching { it.name == 'test'}) {
from sourceSets.named('test').get().output
}
}
github {
@@ -560,4 +595,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

@@ -14,6 +14,9 @@ import io.micronaut.http.netty.body.NettyJsonHandler;
import io.micronaut.json.JsonMapper;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import lombok.Builder;
import lombok.Value;
import lombok.extern.jackson.Jacksonized;
import picocli.CommandLine;
import java.net.URISyntaxException;
@@ -79,4 +82,12 @@ public abstract class AbstractApiCommand extends AbstractCommand {
return tenantId == null ? "/api/v1" + path : "/api/v1/" + tenantId + path;
}
@Builder
@Value
@Jacksonized
public static class UpdateResult {
String id;
String namespace;
}
}

View File

@@ -1,9 +1,8 @@
package io.kestra.cli;
import io.kestra.cli.commands.flows.FlowValidateCommand;
import io.kestra.core.models.validations.ModelValidator;
import io.kestra.core.models.validations.ValidateConstraintViolation;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import io.micronaut.core.type.Argument;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
@@ -63,7 +62,7 @@ public abstract class AbstractValidateCommand extends AbstractApiCommand {
public static String buildYamlBody(Path directory) throws IOException {
try(var files = Files.walk(directory)) {
return files.filter(Files::isRegularFile)
.filter(YamlFlowParser::isValidExtension)
.filter(YamlParser::isValidExtension)
.map(throwFunction(path -> Files.readString(path, Charset.defaultCharset())))
.collect(Collectors.joining("\n---\n"));
}
@@ -72,10 +71,11 @@ public abstract class AbstractValidateCommand extends AbstractApiCommand {
// bug in micronaut, we can't inject YamlFlowParser & ModelValidator, so we inject from implementation
public Integer call(
Class<?> cls,
YamlFlowParser yamlFlowParser,
YamlParser yamlParser,
ModelValidator modelValidator,
Function<Object, String> identity,
Function<Object, List<String>> warningsFunction
Function<Object, List<String>> warningsFunction,
Function<Object, List<String>> infosFunction
) throws Exception {
super.call();
@@ -85,14 +85,16 @@ public abstract class AbstractValidateCommand extends AbstractApiCommand {
if(this.local) {
try(var files = Files.walk(directory)) {
files.filter(Files::isRegularFile)
.filter(YamlFlowParser::isValidExtension)
.filter(YamlParser::isValidExtension)
.forEach(path -> {
try {
Object parse = yamlFlowParser.parse(path.toFile(), cls);
Object parse = yamlParser.parse(path.toFile(), cls);
modelValidator.validate(parse);
stdOut("@|green \u2713|@ - " + identity.apply(parse));
List<String> warnings = warningsFunction.apply(parse);
warnings.forEach(warning -> stdOut("@|bold,yellow \u26A0|@ - " + warning));
List<String> infos = infosFunction.apply(parse);
infos.forEach(info -> stdOut("@|bold,blue \u2139|@ - " + info));
} catch (ConstraintViolationException e) {
stdErr("@|red \u2718|@ - " + path);
AbstractValidateCommand.handleException(e, clsName);

View File

@@ -1,28 +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;
@Builder
@Value
@Jacksonized
public static class UpdateResult {
String id;
String namespace;
}
}

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,

View File

@@ -0,0 +1,59 @@
package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractApiCommand;
import io.kestra.cli.AbstractValidateCommand;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
import io.micronaut.http.MutableHttpRequest;
import io.micronaut.http.client.exceptions.HttpClientResponseException;
import io.micronaut.http.client.netty.DefaultHttpClient;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.nio.file.Files;
import java.nio.file.Path;
@CommandLine.Command(
name = "create",
description = "Create a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowCreateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "The file containing the flow")
public Path flowFile;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
super.call();
checkFile();
String body = Files.readString(flowFile);
try(DefaultHttpClient client = client()) {
MutableHttpRequest<String> request = HttpRequest
.POST(apiUri("/flows"), body).contentType(MediaType.APPLICATION_YAML);
client.toBlocking().retrieve(
this.requestOptions(request),
String.class
);
stdOut("Flow successfully created !");
} catch (HttpClientResponseException e){
AbstractValidateCommand.handleHttpException(e, "flow");
return 1;
}
return 0;
}
protected void checkFile() {
if (!Files.isRegularFile(flowFile)) {
throw new IllegalArgumentException("The file '" + flowFile.toFile().getAbsolutePath() + "' is not a file");
}
}
}

View File

@@ -0,0 +1,47 @@
package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractApiCommand;
import io.kestra.cli.AbstractValidateCommand;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MutableHttpRequest;
import io.micronaut.http.client.exceptions.HttpClientResponseException;
import io.micronaut.http.client.netty.DefaultHttpClient;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
@CommandLine.Command(
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")
public String namespace;
@CommandLine.Parameters(index = "1", description = "The ID of the flow")
public String id;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
super.call();
try(DefaultHttpClient client = client()) {
MutableHttpRequest<String> request = HttpRequest
.DELETE(apiUri("/flows/" + namespace + "/" + id ));
client.toBlocking().exchange(
this.requestOptions(request)
);
stdOut("Flow successfully deleted !");
} catch (HttpClientResponseException e){
AbstractValidateCommand.handleHttpException(e, "flow");
return 1;
}
return 0;
}
}

View File

@@ -3,7 +3,7 @@ package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.hierarchies.GraphCluster;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import io.kestra.core.services.Graph2DotService;
import io.kestra.core.utils.GraphUtils;
import io.micronaut.context.ApplicationContext;
@@ -15,21 +15,21 @@ 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
public Integer call() throws Exception {
super.call();
YamlFlowParser parser = applicationContext.getBean(YamlFlowParser.class);
YamlParser parser = applicationContext.getBean(YamlParser.class);
Flow flow = parser.parse(file.toFile(), Flow.class);
GraphCluster graph = GraphUtils.of(flow, null);

View File

@@ -3,7 +3,7 @@ package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractCommand;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.validations.ModelValidator;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import jakarta.inject.Inject;
import picocli.CommandLine;
@@ -12,16 +12,16 @@ 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
private YamlFlowParser yamlFlowParser;
private YamlParser yamlParser;
@Inject
private ModelValidator modelValidator;
@@ -31,7 +31,7 @@ public class FlowExpandCommand extends AbstractCommand {
super.call();
stdErr("Warning, this functionality is deprecated and will be removed at some point.");
String content = IncludeHelperExpander.expand(Files.readString(file), file.getParent());
Flow flow = yamlFlowParser.parse(content, Flow.class);
Flow flow = yamlParser.parse(content, Flow.class);
modelValidator.validate(flow);
stdOut(content);
return 0;

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

@@ -0,0 +1,64 @@
package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractApiCommand;
import io.kestra.cli.AbstractValidateCommand;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
import io.micronaut.http.MutableHttpRequest;
import io.micronaut.http.client.exceptions.HttpClientResponseException;
import io.micronaut.http.client.netty.DefaultHttpClient;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.nio.file.Files;
import java.nio.file.Path;
@CommandLine.Command(
name = "update",
description = "Update a single flow",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowUpdateCommand extends AbstractApiCommand {
@CommandLine.Parameters(index = "0", description = "The file containing the flow")
public Path flowFile;
@CommandLine.Parameters(index = "1", description = "The namespace of the flow")
public String namespace;
@CommandLine.Parameters(index = "2", description = "The ID of the flow")
public String id;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
super.call();
checkFile();
String body = Files.readString(flowFile);
try(DefaultHttpClient client = client()) {
MutableHttpRequest<String> request = HttpRequest
.PUT(apiUri("/flows/" + namespace + "/" + id ), body).contentType(MediaType.APPLICATION_YAML);
client.toBlocking().retrieve(
this.requestOptions(request),
String.class
);
stdOut("Flow successfully updated !");
} catch (HttpClientResponseException e){
AbstractValidateCommand.handleHttpException(e, "flow");
return 1;
}
return 0;
}
protected void checkFile() {
if (!Files.isRegularFile(flowFile)) {
throw new IllegalArgumentException("The file '" + flowFile.toFile().getAbsolutePath() + "' is not a file");
}
}
}

View File

@@ -0,0 +1,83 @@
package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractApiCommand;
import io.kestra.cli.AbstractValidateCommand;
import io.kestra.core.serializers.YamlParser;
import io.micronaut.core.type.Argument;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
import io.micronaut.http.MutableHttpRequest;
import io.micronaut.http.client.exceptions.HttpClientResponseException;
import io.micronaut.http.client.netty.DefaultHttpClient;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
@CommandLine.Command(
name = "updates",
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")
public Path directory;
@CommandLine.Option(names = {"--delete"}, negatable = true, description = "Whether missing should be deleted")
public boolean delete = false;
@SuppressWarnings("deprecation")
@Override
public Integer call() throws Exception {
super.call();
try (var files = Files.walk(directory)) {
List<String> flows = files
.filter(Files::isRegularFile)
.filter(YamlParser::isValidExtension)
.map(path -> {
try {
return IncludeHelperExpander.expand(Files.readString(path, Charset.defaultCharset()), path.getParent());
} catch (IOException e) {
throw new RuntimeException(e);
}
})
.toList();
String body = "";
if (flows.isEmpty()) {
stdOut("No flow found on '{}'", directory.toFile().getAbsolutePath());
} else {
body = String.join("\n---\n", flows);
}
try(DefaultHttpClient client = client()) {
MutableHttpRequest<String> request = HttpRequest
.POST(apiUri("/flows/bulk") + "?delete=" + delete, body).contentType(MediaType.APPLICATION_YAML);
List<UpdateResult> updated = client.toBlocking().retrieve(
this.requestOptions(request),
Argument.listOf(UpdateResult.class)
);
stdOut(updated.size() + " flow(s) successfully updated !");
updated.forEach(flow -> stdOut("- " + flow.getNamespace() + "." + flow.getId()));
} catch (HttpClientResponseException e){
AbstractValidateCommand.handleHttpException(e, "flow");
return 1;
}
} catch (ConstraintViolationException e) {
AbstractValidateCommand.handleException(e, "flow");
return 1;
}
return 0;
}
}

View File

@@ -3,7 +3,7 @@ package io.kestra.cli.commands.flows;
import io.kestra.cli.AbstractValidateCommand;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.validations.ModelValidator;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import io.kestra.core.services.FlowService;
import jakarta.inject.Inject;
import picocli.CommandLine;
@@ -13,11 +13,11 @@ import java.util.List;
@CommandLine.Command(
name = "validate",
description = "validate a flow"
description = "Validate a flow"
)
public class FlowValidateCommand extends AbstractValidateCommand {
@Inject
private YamlFlowParser yamlFlowParser;
private YamlParser yamlParser;
@Inject
private ModelValidator modelValidator;
@@ -29,7 +29,7 @@ public class FlowValidateCommand extends AbstractValidateCommand {
public Integer call() throws Exception {
return this.call(
Flow.class,
yamlFlowParser,
yamlParser,
modelValidator,
(Object object) -> {
Flow flow = (Flow) object;
@@ -39,9 +39,12 @@ 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.relocations(flow.generateSource()).stream().map(relocation -> relocation.from() + " is replaced by " + relocation.to()).toList());
warnings.addAll(flowService.warnings(flow));
return warnings;
},
(Object object) -> {
Flow flow = (Flow) object;
return flowService.relocations(flow.generateSource()).stream().map(relocation -> relocation.from() + " is replaced by " + relocation.to()).toList();
}
);
}

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

@@ -2,9 +2,8 @@ package io.kestra.cli.commands.flows.namespaces;
import io.kestra.cli.AbstractValidateCommand;
import io.kestra.cli.commands.AbstractServiceNamespaceUpdateCommand;
import io.kestra.cli.commands.flows.FlowValidateCommand;
import io.kestra.cli.commands.flows.IncludeHelperExpander;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import io.micronaut.core.type.Argument;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MediaType;
@@ -12,10 +11,10 @@ import io.micronaut.http.MutableHttpRequest;
import io.micronaut.http.client.exceptions.HttpClientResponseException;
import io.micronaut.http.client.netty.DefaultHttpClient;
import jakarta.inject.Inject;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;
import jakarta.validation.ConstraintViolationException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
@@ -23,13 +22,16 @@ import java.util.List;
@CommandLine.Command(
name = "update",
description = "handle namespace flows",
description = "Update flows in namespace",
mixinStandardHelpOptions = true
)
@Slf4j
public class FlowNamespaceUpdateCommand extends AbstractServiceNamespaceUpdateCommand {
@Inject
public YamlFlowParser yamlFlowParser;
public YamlParser yamlParser;
@CommandLine.Option(names = {"--override-namespaces"}, negatable = true, description = "Replace namespace of all flows by the one provided")
public boolean override = false;
@SuppressWarnings("deprecation")
@Override
@@ -39,7 +41,7 @@ public class FlowNamespaceUpdateCommand extends AbstractServiceNamespaceUpdateCo
try (var files = Files.walk(directory)) {
List<String> flows = files
.filter(Files::isRegularFile)
.filter(YamlFlowParser::isValidExtension)
.filter(YamlParser::isValidExtension)
.map(path -> {
try {
return IncludeHelperExpander.expand(Files.readString(path, Charset.defaultCharset()), path.getParent());
@@ -55,6 +57,9 @@ public class FlowNamespaceUpdateCommand extends AbstractServiceNamespaceUpdateCo
} else {
body = String.join("\n---\n", flows);
}
if (override) {
body = body.replaceAll("(?m)^namespace:.+", "namespace: " + namespace);
}
try(DefaultHttpClient client = client()) {
MutableHttpRequest<String> request = HttpRequest
.POST(apiUri("/flows/") + namespace + "?delete=" + delete, body).contentType(MediaType.APPLICATION_YAML);

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

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

View File

@@ -1,10 +1,11 @@
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.plugins.PluginRegistry;
import io.kestra.core.plugins.RegisteredPlugin;
import io.kestra.core.serializers.JacksonMapper;
import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import picocli.CommandLine;
@@ -19,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")
@@ -34,51 +35,70 @@ 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")
private boolean schema = false;
@Override
public Integer call() throws Exception {
super.call();
DocumentationGenerator documentationGenerator = applicationContext.getBean(DocumentationGenerator.class);
List<RegisteredPlugin> plugins = core ? pluginRegistry().plugins() : pluginRegistry().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();
}
stdOut("Generate doc in: {0}", file);
} catch (IOException e) {
throw new RuntimeException(e);
try {
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"
);
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 (Error e) {
stdErr("Failure to generate documentation for plugin {0}: {1}", registeredPlugin.name(), e);
hasFailures = true;
}
}
return 0;
return hasFailures ? 1 : 0;
}
}

View File

@@ -1,6 +1,5 @@
package io.kestra.cli.commands.plugins;
import io.micronaut.http.uri.UriBuilder;
import org.apache.commons.io.FilenameUtils;
import io.kestra.cli.AbstractCommand;
import io.kestra.cli.plugins.PluginDownloader;
@@ -17,7 +16,6 @@ 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;
@@ -25,13 +23,13 @@ import static io.kestra.core.utils.Rethrow.throwConsumer;
@CommandLine.Command(
name = "install",
description = "install a plugin"
description = "Install plugins"
)
public class PluginInstallCommand extends AbstractCommand {
@CommandLine.Parameters(index = "0..*", description = "the plugins to install")
@CommandLine.Parameters(index = "0..*", description = "Plugins to install. Represented as Maven artifact coordinates.")
List<String> dependencies = new ArrayList<>();
@CommandLine.Option(names = {"--repositories"}, description = "url to additional maven repositories")
@CommandLine.Option(names = {"--repositories"}, description = "URL to additional Maven repositories")
private URI[] repositories;
@CommandLine.Spec

View File

@@ -8,7 +8,7 @@ import java.util.List;
@CommandLine.Command(
name = "list",
description = "list all plugins already installed"
description = "List all plugins already installed"
)
public class PluginListCommand extends AbstractCommand {
@CommandLine.Spec
@@ -16,7 +16,7 @@ public class PluginListCommand extends AbstractCommand {
@CommandLine.Option(names = {"--core"}, description = "Also write core tasks plugins")
private boolean core = false;
@Override
public Integer call() throws Exception {
super.call();
@@ -26,7 +26,7 @@ public class PluginListCommand extends AbstractCommand {
"or environment variable 'KESTRA_PLUGINS_PATH"
);
}
List<RegisteredPlugin> plugins = core ? pluginRegistry().plugins() : pluginRegistry().externalPlugins();
plugins.forEach(registeredPlugin -> stdOut(registeredPlugin.toString()));

View File

@@ -4,7 +4,7 @@ import io.kestra.cli.AbstractCommand;
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;
protected static int defaultWorkerThread() {

View File

@@ -18,7 +18,7 @@ import java.util.Map;
@CommandLine.Command(
name = "executor",
description = "start an executor"
description = "Start the Kestra executor"
)
@Slf4j
public class ExecutorCommand extends AbstractServerCommand {
@@ -31,22 +31,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")

View File

@@ -14,7 +14,7 @@ import java.util.Map;
@CommandLine.Command(
name = "indexer",
description = "start an indexer"
description = "Start the Kestra indexer"
)
@Slf4j
public class IndexerCommand extends AbstractServerCommand {

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

@@ -14,7 +14,7 @@ import java.util.Map;
@CommandLine.Command(
name = "scheduler",
description = "start an scheduler"
description = "Start the Kestra scheduler"
)
@Slf4j
public class SchedulerCommand extends AbstractServerCommand {

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

@@ -1,6 +1,7 @@
package io.kestra.cli.commands.servers;
import com.google.common.collect.ImmutableMap;
import io.kestra.cli.services.FileChangedEventListener;
import io.kestra.core.contexts.KestraContext;
import io.kestra.core.models.ServerType;
import io.kestra.core.repositories.LocalFlowRepositoryLoader;
@@ -9,6 +10,7 @@ import io.kestra.core.services.SkipExecutionService;
import io.kestra.core.services.StartExecutorService;
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;
@@ -21,7 +23,7 @@ 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 {
@@ -37,10 +39,14 @@ public class StandAloneCommand extends AbstractServerCommand {
@Inject
private StartExecutorService startExecutorService;
@Inject
@Nullable
private FileChangedEventListener fileWatcher;
@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")
@@ -64,6 +70,9 @@ public class StandAloneCommand extends AbstractServerCommand {
@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.")
private List<String> notStartExecutors = Collections.emptyList();
@CommandLine.Option(names = {"--no-indexer"}, description = "Flag to disable starting an embedded indexer.")
boolean indexerDisabled = false;
@Override
public boolean isFlowAutoLoadEnabled() {
return !tutorialsDisabled;
@@ -105,8 +114,18 @@ public class StandAloneCommand extends AbstractServerCommand {
standAloneRunner.setWorkerThread(this.workerThread);
}
if (this.indexerDisabled) {
standAloneRunner.setIndexerEnabled(false);
}
standAloneRunner.run();
if (fileWatcher != null) {
fileWatcher.startListeningFromConfig();
}
this.shutdownHook(standAloneRunner::close);
Await.until(() -> !this.applicationContext.isRunning());
return 0;

View File

@@ -3,7 +3,10 @@ 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.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
@@ -11,19 +14,27 @@ import picocli.CommandLine;
import picocli.CommandLine.Option;
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 {
private ExecutorService poolExecutor;
@Inject
private ApplicationContext applicationContext;
@Inject
private ExecutorsUtils executorsUtils;
@Option(names = {"--no-tutorials"}, description = "Flag to disable auto-loading of tutorial flows.")
boolean tutorialsDisabled = false;
@Option(names = {"--no-indexer"}, description = "Flag to disable starting an embedded indexer.")
boolean indexerDisabled = false;
@Override
public boolean isFlowAutoLoadEnabled() {
@@ -40,9 +51,26 @@ public class WebServerCommand extends AbstractServerCommand {
@Override
public Integer call() throws Exception {
super.call();
// start the indexer
if (!indexerDisabled) {
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));
}
log.info("Webserver started");
this.shutdownHook(() -> KestraContext.getContext().shutdown());
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

@@ -16,7 +16,7 @@ import java.util.UUID;
@CommandLine.Command(
name = "worker",
description = "start a worker"
description = "Start the Kestra worker"
)
@Slf4j
public class WorkerCommand extends AbstractServerCommand {
@@ -24,10 +24,10 @@ 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")

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

@@ -44,7 +44,7 @@ public class StateStoreMigrateCommand extends AbstractCommand {
URI.create("/" + flow.getNamespace().replace(".", "/") + "/states")
))).map(potentialStateStoreUrisForAFlow -> Map.entry(potentialStateStoreUrisForAFlow.getKey(), potentialStateStoreUrisForAFlow.getValue().stream().flatMap(uri -> {
try {
return storageInterface.allByPrefix(potentialStateStoreUrisForAFlow.getKey().getTenantId(), uri, false).stream();
return storageInterface.allByPrefix(potentialStateStoreUrisForAFlow.getKey().getTenantId(), potentialStateStoreUrisForAFlow.getKey().getNamespace(), uri, false).stream();
} catch (IOException e) {
return Stream.empty();
}
@@ -59,9 +59,9 @@ public class StateStoreMigrateCommand extends AbstractCommand {
boolean flowScoped = flowQualifierWithStateQualifiers[0].endsWith("/" + flow.getId());
StateStore stateStore = new StateStore(runContext(runContextFactory, flow), false);
try (InputStream is = storageInterface.get(flow.getTenantId(), stateStoreFileUri)) {
try (InputStream is = storageInterface.get(flow.getTenantId(), flow.getNamespace(), stateStoreFileUri)) {
stateStore.putState(flowScoped, stateName, stateSubName, taskRunValue, is.readAllBytes());
storageInterface.delete(flow.getTenantId(), stateStoreFileUri);
storageInterface.delete(flow.getTenantId(), flow.getNamespace(), stateStoreFileUri);
} catch (IOException e) {
throw new RuntimeException(e);
}

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

@@ -4,7 +4,7 @@ import io.kestra.cli.AbstractValidateCommand;
import io.kestra.core.models.templates.Template;
import io.kestra.core.models.templates.TemplateEnabled;
import io.kestra.core.models.validations.ModelValidator;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import jakarta.inject.Inject;
import picocli.CommandLine;
@@ -12,12 +12,12 @@ import java.util.Collections;
@CommandLine.Command(
name = "validate",
description = "validate a template"
description = "Validate a template"
)
@TemplateEnabled
public class TemplateValidateCommand extends AbstractValidateCommand {
@Inject
private YamlFlowParser yamlFlowParser;
private YamlParser yamlParser;
@Inject
private ModelValidator modelValidator;
@@ -26,12 +26,13 @@ public class TemplateValidateCommand extends AbstractValidateCommand {
public Integer call() throws Exception {
return this.call(
Template.class,
yamlFlowParser,
yamlParser,
modelValidator,
(Object object) -> {
Template template = (Template) object;
return template.getNamespace() + " / " + template.getId();
},
(Object object) -> Collections.emptyList(),
(Object object) -> Collections.emptyList()
);
}

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

@@ -2,10 +2,9 @@ package io.kestra.cli.commands.templates.namespaces;
import io.kestra.cli.AbstractValidateCommand;
import io.kestra.cli.commands.AbstractServiceNamespaceUpdateCommand;
import io.kestra.cli.commands.templates.TemplateValidateCommand;
import io.kestra.core.models.templates.Template;
import io.kestra.core.models.templates.TemplateEnabled;
import io.kestra.core.serializers.YamlFlowParser;
import io.kestra.core.serializers.YamlParser;
import io.micronaut.core.type.Argument;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.MutableHttpRequest;
@@ -17,19 +16,19 @@ import picocli.CommandLine;
import java.nio.file.Files;
import java.util.List;
import java.util.stream.Collectors;
import jakarta.validation.ConstraintViolationException;
@CommandLine.Command(
name = "update",
description = "handle namespace templates",
description = "Update namespace templates",
mixinStandardHelpOptions = true
)
@Slf4j
@TemplateEnabled
public class TemplateNamespaceUpdateCommand extends AbstractServiceNamespaceUpdateCommand {
@Inject
public YamlFlowParser yamlFlowParser;
public YamlParser yamlParser;
@Override
public Integer call() throws Exception {
@@ -38,8 +37,8 @@ public class TemplateNamespaceUpdateCommand extends AbstractServiceNamespaceUpda
try (var files = Files.walk(directory)) {
List<Template> templates = files
.filter(Files::isRegularFile)
.filter(YamlFlowParser::isValidExtension)
.map(path -> yamlFlowParser.parse(path.toFile(), Template.class))
.filter(YamlParser::isValidExtension)
.map(path -> yamlParser.parse(path.toFile(), Template.class))
.toList();
if (templates.isEmpty()) {

View File

@@ -0,0 +1,265 @@
package io.kestra.cli.services;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.flows.FlowWithPath;
import io.kestra.core.models.flows.FlowWithSource;
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;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nullable;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Singleton
@Slf4j
@Requires(property = "micronaut.io.watch.enabled", value = "true")
public class FileChangedEventListener {
@Nullable
private final FileWatchConfiguration fileWatchConfiguration;
@Nullable
private final WatchService watchService;
@Inject
private FlowRepositoryInterface flowRepositoryInterface;
@Inject
private PluginDefaultService pluginDefaultService;
@Inject
private YamlParser yamlParser;
@Inject
private ModelValidator modelValidator;
@Inject
protected FlowListenersInterface flowListeners;
@Nullable
@Value("${micronaut.io.watch.tenantId}")
private String tenantId;
FlowFilesManager flowFilesManager;
private List<FlowWithPath> flows = new ArrayList<>();
private boolean isStarted = false;
@Inject
public FileChangedEventListener(@Nullable FileWatchConfiguration fileWatchConfiguration, @Nullable WatchService watchService) {
this.fileWatchConfiguration = fileWatchConfiguration;
this.watchService = watchService;
}
public void startListeningFromConfig() throws IOException, InterruptedException {
if (fileWatchConfiguration != null && fileWatchConfiguration.isEnabled()) {
this.flowFilesManager = new LocalFlowFileWatcher(flowRepositoryInterface, pluginDefaultService);
List<Path> paths = fileWatchConfiguration.getPaths();
this.setup(paths);
flowListeners.run();
// Init existing flows not already in files
flowListeners.listen(flows -> {
if (!isStarted) {
for (FlowWithSource flow : flows) {
if (this.flows.stream().noneMatch(flowWithPath -> flowWithPath.uidWithoutRevision().equals(flow.uidWithoutRevision()))) {
flowToFile(flow, this.buildPath(flow));
this.flows.add(FlowWithPath.of(flow, this.buildPath(flow).toString()));
}
}
this.isStarted = true;
}
});
// Listen for new/updated/deleted flows
flowListeners.listen((current, previous) -> {
// If deleted
if (current.isDeleted()) {
this.flows.stream().filter(flowWithPath -> flowWithPath.uidWithoutRevision().equals(current.uidWithoutRevision())).findFirst()
.ifPresent(flowWithPath -> {
deleteFile(Paths.get(flowWithPath.getPath()));
});
this.flows.removeIf(flowWithPath -> flowWithPath.uidWithoutRevision().equals(current.uidWithoutRevision()));
} else {
// if updated/created
Optional<FlowWithPath> flowWithPath = this.flows.stream().filter(fwp -> fwp.uidWithoutRevision().equals(current.uidWithoutRevision())).findFirst();
if (flowWithPath.isPresent()) {
flowToFile(current, Paths.get(flowWithPath.get().getPath()));
} else {
flows.add(FlowWithPath.of(current, this.buildPath(current).toString()));
flowToFile(current, null);
}
}
});
this.startListening(paths);
} else {
log.info("File watching is disabled.");
}
}
public void startListening(List<Path> paths) throws IOException, InterruptedException {
for (Path path : paths) {
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
}
WatchKey key;
while ((key = watchService.take()) != null) {
for (WatchEvent<?> watchEvent : key.pollEvents()) {
try {
WatchEvent.Kind<?> kind = watchEvent.kind();
Path entry = (Path) watchEvent.context();
if (entry.toString().endsWith(".yml") || entry.toString().endsWith(".yaml")) {
if (kind == StandardWatchEventKinds.ENTRY_CREATE || kind == StandardWatchEventKinds.ENTRY_MODIFY) {
Path filePath = ((Path) key.watchable()).resolve(entry);
if (Files.isDirectory(filePath)) {
loadFlowsFromFolder(filePath);
} else {
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());
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);
}
} 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()));
});
}
}
} catch (Exception e) {
log.error("Unexpected error while watching flows", e);
}
}
key.reset();
}
}
private void setup(List<Path> folders) {
for (Path folder : folders) {
this.loadFlowsFromFolder(folder);
}
}
private void loadFlowsFromFolder(Path folder) {
try {
Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
if (!dir.equals(folder)) {
loadFlowsFromFolder(dir);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.toString().endsWith(".yml") || file.toString().endsWith(".yaml")) {
String content = Files.readString(file, Charset.defaultCharset());
Optional<Flow> flow = parseFlow(content, file);
if (flow.isPresent() && flows.stream().noneMatch(flowWithPath -> flowWithPath.uidWithoutRevision().equals(flow.get().uidWithoutRevision()))) {
flows.add(FlowWithPath.of(flow.get(), file.toString()));
flowFilesManager.createOrUpdateFlow(flow.get(), content);
}
}
return FileVisitResult.CONTINUE;
}
});
log.info("Loaded files from the folder {}", folder);
} catch (IOException e) {
log.error(e.getMessage());
}
}
private void flowToFile(FlowWithSource flow, Path path) {
Path defaultPath = path != null ? path : this.buildPath(flow);
try {
Files.writeString(defaultPath, flow.getSource());
log.info("Flow {} has been written to file {}", flow.getId(), defaultPath);
} catch (IOException e) {
log.error("Error writing file: {}", defaultPath, e);
}
}
private Optional<Flow> parseFlow(String content, Path entry) {
try {
Flow flow = yamlParser.parse(content, Flow.class);
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);
}
return Optional.empty();
}
private void deleteFile(Path file) {
try {
if (Files.deleteIfExists(file)) {
log.info("File {} has been deleted successfully.", file);
} else {
log.warn("File {} does not exist.", file);
}
} catch (IOException e) {
log.error("Error deleting file: {}", file, e);
}
}
private Path buildPath(Flow flow) {
return fileWatchConfiguration.getPaths().getFirst().resolve(flow.uidWithoutRevision() + ".yml");
}
}

View File

@@ -0,0 +1,13 @@
package io.kestra.cli.services;
import io.kestra.core.models.flows.Flow;
import io.kestra.core.models.flows.FlowWithSource;
public interface FlowFilesManager {
FlowWithSource createOrUpdateFlow(Flow flow, String content);
void deleteFlow(FlowWithSource toDelete);
void deleteFlow(String tenantId, String namespace, String id);
}

View File

@@ -0,0 +1,38 @@
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.kestra.core.services.PluginDefaultService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LocalFlowFileWatcher implements FlowFilesManager {
private final FlowRepositoryInterface flowRepository;
private final PluginDefaultService pluginDefaultService;
public LocalFlowFileWatcher(FlowRepositoryInterface flowRepository, PluginDefaultService pluginDefaultService) {
this.flowRepository = flowRepository;
this.pluginDefaultService = pluginDefaultService;
}
@Override
public FlowWithSource createOrUpdateFlow(Flow flow, String content) {
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) {
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) {
flowRepository.findByIdWithSource(tenantId, namespace, id).ifPresent(flowRepository::delete);
log.info("Flow {} has been deleted", id);
}
}

View File

@@ -37,6 +37,7 @@ micronaut:
exclusions:
- /ui/.+
- /health
- /health/.+
- /prometheus
http-version: HTTP_1_1
caches:
@@ -124,6 +125,7 @@ kestra:
delay: 1s
maxDelay: ""
jdbc:
queues:
min-poll-interval: 25ms
max-poll-interval: 1000ms
@@ -158,6 +160,9 @@ kestra:
metrics:
prefix: kestra
traces:
root: DISABLED
server:
basic-auth:
enabled: false
@@ -187,3 +192,17 @@ kestra:
uri: https://api.kestra.io/v1/reports/usages
initial-delay: 5m
fixed-delay: 1h
hidden-labels:
prefixes:
- system.
- internal.
otel:
exclusions:
- /ping
- /metrics
- /health
- /env
- /prometheus
propagators: tracecontext, baggage

View File

@@ -0,0 +1,137 @@
package io.kestra.cli.commands.flows;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import io.micronaut.runtime.server.EmbeddedServer;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.net.URL;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.StringContains.containsString;
class FlowCreateOrUpdateCommandTest {
@Test
void runWithDelete() {
URL directory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("flows");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
URL subDirectory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("flows/same");
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
EmbeddedServer embeddedServer = ctx.getBean(EmbeddedServer.class);
embeddedServer.start();
String[] args = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--delete",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("4 flow(s)"));
out.reset();
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--delete",
subDirectory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
// 2 delete + 1 update
assertThat(out.toString(), containsString("4 flow(s)"));
}
}
@Test
void runNoDelete() {
URL directory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("flows");
URL subDirectory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("flows/same/flowsSubFolder");
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 = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("4 flow(s)"));
out.reset();
// no "delete" arg should behave as no-delete
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
subDirectory.getPath()
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("1 flow(s)"));
out.reset();
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--no-delete",
subDirectory.getPath()
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("1 flow(s)"));
}
}
@Test
void helper() {
URL directory = FlowCreateOrUpdateCommandTest.class.getClassLoader().getResource("helper");
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 = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
directory.getPath(),
};
Integer call = PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(call, is(0));
assertThat(out.toString(), containsString("1 flow(s)"));
}
}
}

View File

@@ -16,7 +16,7 @@ import static org.hamcrest.core.StringContains.containsString;
class FlowDotCommandTest {
@Test
void run() {
URL directory = TemplateValidateCommandTest.class.getClassLoader().getResource("flows/first.yaml");
URL directory = TemplateValidateCommandTest.class.getClassLoader().getResource("flows/same/first.yaml");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
@@ -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

@@ -19,7 +19,7 @@ class FlowExpandCommandTest {
try (ApplicationContext ctx = ApplicationContext.builder().deduceEnvironment(false).start()) {
String[] args = {
"src/test/resources/helper/flow.yaml"
"src/test/resources/helper/include.yaml"
};
Integer call = PicocliRunner.call(FlowExpandCommand.class, ctx, args);

View File

@@ -22,7 +22,7 @@ import static org.hamcrest.core.StringContains.containsString;
class FlowExportCommandTest {
@Test
void run() throws IOException {
URL directory = FlowExportCommandTest.class.getClassLoader().getResource("flows");
URL directory = FlowExportCommandTest.class.getClassLoader().getResource("flows/same");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));

View File

@@ -0,0 +1,137 @@
package io.kestra.cli.commands.flows;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import io.micronaut.runtime.server.EmbeddedServer;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.net.URL;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.StringContains.containsString;
class FlowUpdatesCommandTest {
@Test
void runWithDelete() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
URL subDirectory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows/same");
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
EmbeddedServer embeddedServer = ctx.getBean(EmbeddedServer.class);
embeddedServer.start();
String[] args = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--delete",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("successfully updated !"));
out.reset();
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--delete",
subDirectory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
// 2 delete + 1 update
assertThat(out.toString(), containsString("successfully updated !"));
}
}
@Test
void runNoDelete() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows");
URL subDirectory = FlowUpdatesCommandTest.class.getClassLoader().getResource("flows/same/flowsSubFolder");
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 = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
directory.getPath(),
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("4 flow(s)"));
out.reset();
// no "delete" arg should behave as no-delete
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
subDirectory.getPath()
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("1 flow(s)"));
out.reset();
args = new String[]{
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"--no-delete",
subDirectory.getPath()
};
PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(out.toString(), containsString("1 flow(s)"));
}
}
@Test
void helper() {
URL directory = FlowUpdatesCommandTest.class.getClassLoader().getResource("helper");
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 = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
directory.getPath(),
};
Integer call = PicocliRunner.call(FlowUpdatesCommand.class, ctx, args);
assertThat(call, is(0));
assertThat(out.toString(), containsString("1 flow(s)"));
}
}
}

View File

@@ -20,7 +20,7 @@ class FlowValidateCommandTest {
try (ApplicationContext ctx = ApplicationContext.builder().deduceEnvironment(false).start()) {
String[] args = {
"--local",
"src/test/resources/helper/flow.yaml"
"src/test/resources/helper/include.yaml"
};
Integer call = PicocliRunner.call(FlowValidateCommand.class, ctx, args);
@@ -42,7 +42,9 @@ class FlowValidateCommandTest {
Integer call = PicocliRunner.call(FlowValidateCommand.class, ctx, args);
assertThat(call, is(0));
assertThat(out.toString(), containsString("tasks[0] is deprecated"));
assertThat(out.toString(), containsString("✓ - system / warning"));
assertThat(out.toString(), containsString("⚠ - tasks[0] is deprecated"));
assertThat(out.toString(), containsString(" - io.kestra.core.tasks.log.Log is replaced by io.kestra.plugin.core.log.Log"));
}
}
}

View File

@@ -0,0 +1,71 @@
package io.kestra.cli.commands.flows;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.context.ApplicationContext;
import io.micronaut.context.env.Environment;
import io.micronaut.runtime.server.EmbeddedServer;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.net.URL;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.StringContains.containsString;
public class SingleFlowCommandsTest {
@Test
void all() {
URL flow = SingleFlowCommandsTest.class.getClassLoader().getResource("flows/quattro.yml");
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[] deleteArgs = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"io.kestra.outsider",
"quattro"
};
PicocliRunner.call(FlowDeleteCommand.class, ctx, deleteArgs);
assertThat(out.toString(), containsString("Flow successfully deleted !"));
out.reset();
String[] createArgs = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
flow.getPath(),
};
PicocliRunner.call(FlowCreateCommand.class, ctx, createArgs);
assertThat(out.toString(), containsString("Flow successfully created !"));
out.reset();String[] updateArgs = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
flow.getPath(),
"io.kestra.outsider",
"quattro"
};
PicocliRunner.call(FlowUpdateCommand.class, ctx, updateArgs);
assertThat(out.toString(), containsString("Flow successfully updated !"));
out.reset();
}
}
}

View File

@@ -11,16 +11,17 @@ import java.io.PrintStream;
import java.net.URL;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.core.StringContains.containsString;
import static org.hamcrest.core.Is.is;
class FlowNamespaceUpdateCommandTest {
@Test
void runWithDelete() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows");
void runWithDelete() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/same");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
URL subDirectory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/flowsSubFolder");
URL subDirectory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/same/flowsSubFolder");
try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
@@ -38,7 +39,7 @@ class FlowNamespaceUpdateCommandTest {
};
PicocliRunner.call(FlowNamespaceUpdateCommand.class, ctx, args);
assertThat(out.toString(), containsString("3 flow(s)"));
assertThat(out.toString(), containsString("namespace 'io.kestra.cli' successfully updated"));
out.reset();
args = new String[]{
@@ -54,12 +55,12 @@ class FlowNamespaceUpdateCommandTest {
PicocliRunner.call(FlowNamespaceUpdateCommand.class, ctx, args);
// 2 delete + 1 update
assertThat(out.toString(), containsString("3 flow(s)"));
assertThat(out.toString(), containsString("namespace 'io.kestra.cli' successfully updated"));
}
}
@Test
void invalid() {
void invalid() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("invalids");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setErr(new PrintStream(out));
@@ -87,9 +88,9 @@ class FlowNamespaceUpdateCommandTest {
}
@Test
void runNoDelete() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows");
URL subDirectory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/flowsSubFolder");
void runNoDelete() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/same");
URL subDirectory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/same/flowsSubFolder");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
@@ -143,7 +144,7 @@ class FlowNamespaceUpdateCommandTest {
}
@Test
void helper() {
void helper() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("helper");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
@@ -168,4 +169,35 @@ class FlowNamespaceUpdateCommandTest {
assertThat(out.toString(), containsString("1 flow(s)"));
}
}
@Test
void runOverride() {
URL directory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows");
URL subDirectory = FlowNamespaceUpdateCommandTest.class.getClassLoader().getResource("flows/same/flowsSubFolder");
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 = {
"--server",
embeddedServer.getURL().toString(),
"--user",
"myuser:pass:word",
"io.kestra.override",
"--override-namespaces",
directory.getPath(),
};
PicocliRunner.call(FlowNamespaceUpdateCommand.class, ctx, args);
assertThat(out.toString(), containsString("io.kestra.override"));
assertThat(out.toString(), not(containsString("io.kestra.cli")));
}
}
}

View File

@@ -18,7 +18,7 @@ import static org.hamcrest.core.StringContains.containsString;
class ReindexCommandTest {
@Test
void reindexFlow() {
URL directory = ReindexCommandTest.class.getClassLoader().getResource("flows");
URL directory = ReindexCommandTest.class.getClassLoader().getResource("flows/same");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));

View File

@@ -52,11 +52,12 @@ class StateStoreMigrateCommandTest {
URI oldStateStoreUri = URI.create("/" + flow.getNamespace().replace(".", "/") + "/" + Slugify.of("a-flow") + "/states/my-state/" + Hashing.hashToString("my-taskrun-value") + "/sub-name");
storage.put(
tenantId,
flow.getNamespace(),
oldStateStoreUri,
new ByteArrayInputStream("my-value".getBytes())
);
assertThat(
storage.exists(tenantId, oldStateStoreUri),
storage.exists(tenantId, flow.getNamespace(), oldStateStoreUri),
is(true)
);
@@ -73,7 +74,7 @@ class StateStoreMigrateCommandTest {
assertThat(new String(stateStore.getState(true, "my-state", "sub-name", "my-taskrun-value").readAllBytes()), is("my-value"));
assertThat(
storage.exists(tenantId, oldStateStoreUri),
storage.exists(tenantId, flow.getNamespace(), oldStateStoreUri),
is(false)
);

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

View File

@@ -0,0 +1,7 @@
id: quattro
namespace: io.kestra.outsider
tasks:
- id: date
type: io.kestra.plugin.core.debug.Return
format: "{{taskrun.startDate}}"

View File

@@ -4,4 +4,7 @@ namespace: system
tasks:
- id: deprecated
type: io.kestra.plugin.core.debug.Echo
format: Hello World
format: Hello World
- id: alias
type: io.kestra.core.tasks.log.Log
message: I'm an alias

View File

@@ -3,7 +3,7 @@ configurations {
implementation.extendsFrom(micronaut)
}
task copyGradleProperties(type: Copy) {
tasks.register('copyGradleProperties', Copy) {
group = "build"
shouldRunAfter compileJava
@@ -36,6 +36,7 @@ dependencies {
implementation group: 'de.focus-shift', name: 'jollyday-jaxb'
implementation 'nl.basjes.gitignore:gitignore-reader'
implementation group: 'dev.failsafe', name: 'failsafe'
api 'org.apache.httpcomponents.client5:httpclient5'
// scheduler
implementation group: 'com.cronutils', name: 'cron-utils'
@@ -64,4 +65,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.4"
testImplementation "org.testcontainers:junit-jupiter:1.20.4"
testImplementation "org.bouncycastle:bcpkix-jdk18on:1.80"
}

View File

@@ -0,0 +1,23 @@
package io.kestra.core.app;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.kestra.core.models.annotations.Plugin;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
/**
* Top-level marker interface for Kestra's plugin of type App.
*/
@Plugin
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "type", visible = true, include = JsonTypeInfo.As.PROPERTY)
public interface AppBlockInterface extends io.kestra.core.models.Plugin {
@Schema(
title = "The type of the block."
)
@NotNull
@NotBlank
@Pattern(regexp="\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*(\\.\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)*")
String getType();
}

View File

@@ -0,0 +1,23 @@
package io.kestra.core.app;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.kestra.core.models.annotations.Plugin;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
/**
* Top-level marker interface for Kestra's plugin of type App.
*/
@Plugin
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "type", visible = true, include = JsonTypeInfo.As.PROPERTY)
public interface AppPluginInterface extends io.kestra.core.models.Plugin {
@Schema(
title = "The type of the app."
)
@NotNull
@NotBlank
@Pattern(regexp="\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*(\\.\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)*")
String getType();
}

View File

@@ -54,6 +54,8 @@ public abstract class AbstractClassDocumentation<T> {
// Remove the Task entry as it only contains a reference that is filtered in the doc template,
// which prevent the Definitions section to be empty if no other def exist.
.filter(entry -> !entry.getKey().equals("io.kestra.core.models.tasks.Task"))
// Remove definitions of all Input subtypes if base class is null
.filter(entry -> (baseCls == null) || !entry.getKey().startsWith("io.kestra.core.models.flows.input."))
.map(entry -> {
Map<String, Object> value = (Map<String, Object>) entry.getValue();
value.put("properties", flatten(properties(value), required(value), isTypeToKeep(entry.getKey())));
@@ -126,8 +128,8 @@ public abstract class AbstractClassDocumentation<T> {
}
result.put(flattenKey(current.getKey(), parentName), finalValue);
if (current.getValue() instanceof Map) {
Map<String, Object> value = (Map<String, Object>) current.getValue();
if (current.getValue() instanceof Map<?, ?> mapValue) {
Map<String, Object> value = (Map<String, Object>) mapValue;
if (value.containsKey("properties")) {
result.putAll(flatten(properties(value), required(value), current.getKey()));

View File

@@ -13,4 +13,5 @@ public class Document {
private final String path;
private final String body;
private final String icon;
private final Schema schema;
}

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.models.annotations.PluginSubGroup;
import io.kestra.core.models.conditions.Condition;
import io.kestra.core.models.tasks.logs.LogExporter;
import io.kestra.core.models.tasks.runners.TaskRunner;
import io.kestra.core.models.tasks.Task;
import io.kestra.core.models.triggers.AbstractTrigger;
@@ -69,7 +70,9 @@ public class DocumentationGenerator {
result.addAll(this.generate(registeredPlugin, registeredPlugin.getTasks(), Task.class, "tasks"));
result.addAll(this.generate(registeredPlugin, registeredPlugin.getTriggers(), AbstractTrigger.class, "triggers"));
result.addAll(this.generate(registeredPlugin, registeredPlugin.getConditions(), Condition.class, "conditions"));
result.addAll(this.generate(registeredPlugin, registeredPlugin.getTaskRunners(), TaskRunner.class, "task-runners"));
//noinspection unchecked
result.addAll(this.generate(registeredPlugin, registeredPlugin.getTaskRunners(), (Class) TaskRunner.class, "task-runners"));
result.addAll(this.generate(registeredPlugin, registeredPlugin.getLogExporters(), LogExporter.class, "log-exporters"));
result.addAll(guides(registeredPlugin));
@@ -114,7 +117,8 @@ public class DocumentationGenerator {
return Collections.singletonList(new Document(
docPath(plugin),
render("index", builder.build()),
plugin.icon("plugin-icon")
plugin.icon("plugin-icon"),
null
));
}
@@ -203,12 +207,12 @@ public class DocumentationGenerator {
.map(throwFunction(e -> new Document(
pluginName + "/guides/" + e.getKey() + ".md",
e.getValue(),
null,
null
)))
.toList();
}
private <T> List<Document> generate(RegisteredPlugin registeredPlugin, List<Class<? extends T>> cls, Class<T> baseCls, String type) {
return cls
.stream()
@@ -218,7 +222,8 @@ public class DocumentationGenerator {
return new Document(
docPath(registeredPlugin, type, pluginDocumentation),
render(pluginDocumentation),
pluginDocumentation.getIcon()
pluginDocumentation.getIcon(),
new Schema(pluginDocumentation.getPropertiesSchema(), pluginDocumentation.getOutputsSchema(), pluginDocumentation.getDefs())
);
} catch (IOException e) {
throw new RuntimeException(e);

View File

@@ -16,28 +16,32 @@ import com.github.victools.jsonschema.module.jakarta.validation.JakartaValidatio
import com.github.victools.jsonschema.module.jakarta.validation.JakartaValidationOption;
import com.github.victools.jsonschema.module.swagger2.Swagger2Module;
import com.google.common.collect.ImmutableMap;
import io.kestra.core.models.property.Property;
import io.kestra.core.models.annotations.Plugin;
import io.kestra.core.models.annotations.PluginProperty;
import io.kestra.core.models.conditions.Condition;
import io.kestra.core.models.conditions.ScheduleCondition;
import io.kestra.core.models.dashboards.DataFilter;
import io.kestra.core.models.dashboards.charts.Chart;
import io.kestra.core.models.dashboards.charts.DataChart;
import io.kestra.core.models.property.Data;
import io.kestra.core.models.property.Property;
import io.kestra.core.models.tasks.Output;
import io.kestra.core.models.tasks.Task;
import io.kestra.core.models.tasks.common.EncryptedString;
import io.kestra.core.models.tasks.logs.LogExporter;
import io.kestra.core.models.tasks.runners.TaskRunner;
import io.kestra.core.models.triggers.AbstractTrigger;
import io.kestra.core.plugins.PluginRegistry;
import io.kestra.core.plugins.RegisteredPlugin;
import io.kestra.core.serializers.JacksonMapper;
import io.micronaut.core.annotation.Nullable;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.time.Duration;
import java.lang.reflect.*;
import java.time.*;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -45,6 +49,7 @@ import java.util.stream.StreamSupport;
@Singleton
public class JsonSchemaGenerator {
private static final List<Class<?>> TYPES_RESOLVED_AS_STRING = List.of(Duration.class, LocalTime.class, LocalDate.class, LocalDateTime.class, ZonedDateTime.class, OffsetDateTime.class, OffsetTime.class);
private final PluginRegistry pluginRegistry;
@@ -76,6 +81,7 @@ public class JsonSchemaGenerator {
objectNode.put("type", "array");
}
replaceAnyOfWithOneOf(objectNode);
pullOfDefaultFromOneOf(objectNode);
return JacksonMapper.toMap(objectNode);
} catch (IllegalArgumentException e) {
@@ -83,7 +89,7 @@ public class JsonSchemaGenerator {
}
}
private static void replaceAnyOfWithOneOf(ObjectNode objectNode) {
private void replaceAnyOfWithOneOf(ObjectNode objectNode) {
objectNode.findParents("anyOf").forEach(jsonNode -> {
if (jsonNode instanceof ObjectNode oNode) {
oNode.set("oneOf", oNode.remove("anyOf"));
@@ -91,6 +97,30 @@ public class JsonSchemaGenerator {
});
}
// This hack exists because for Property we generate a oneOf for properties that are not strings.
// By default, the 'default' is in each oneOf which Monaco editor didn't take into account.
// So, we pull off the 'default' from any of the oneOf to the parent.
private void pullOfDefaultFromOneOf(ObjectNode objectNode) {
objectNode.findParents("oneOf").forEach(jsonNode -> {
if (jsonNode instanceof ObjectNode oNode) {
JsonNode oneOf = oNode.get("oneOf");
if (oneOf instanceof ArrayNode arrayNode) {
Iterator<JsonNode> it = arrayNode.elements();
JsonNode defaultNode = null;
while (it.hasNext() && defaultNode == null) {
JsonNode next = it.next();
if (next instanceof ObjectNode nextAsObj) {
defaultNode = nextAsObj.get("default");
}
}
if (defaultNode != null) {
oNode.set("default", defaultNode);
}
}
}
});
}
private void mutateDescription(ObjectNode collectedTypeAttributes) {
if (collectedTypeAttributes.has("description")) {
collectedTypeAttributes.set("markdownDescription", collectedTypeAttributes.get("description"));
@@ -203,7 +233,11 @@ public class JsonSchemaGenerator {
ObjectNode definitionReference = context
.createDefinitionReference(context.getTypeContext().resolve(String.class))
.put("format", "duration");
return new CustomDefinition(definitionReference, true);
} else if (javaType.isInstanceOf(LocalTime.class)) {
ObjectNode definitionReference = context
.createDefinitionReference(context.getTypeContext().resolve(String.class))
.put("format", "partial-time"); // we change the default 'time' format for 'partial-time' as Monaco Editor mandates an offset or a timezone for 'time' format
return new CustomDefinition(definitionReference, true);
} else {
return null;
@@ -211,12 +245,13 @@ public class JsonSchemaGenerator {
}
});
// resolve dynamic types from Property
// resolve dynamic types from Property and make EncryptedString looks like a string
builder.forFields().withTargetTypeOverridesResolver(target -> {
ResolvedType javaType = target.getType();
if (javaType.isInstanceOf(Property.class)) {
TypeContext context = target.getContext();
Class<?> erasedType = javaType.getTypeParameters().getFirst().getErasedType();
if(String.class.isAssignableFrom(erasedType)) {
return List.of(
context.resolve(String.class)
@@ -233,12 +268,21 @@ public class JsonSchemaGenerator {
return List.of(
javaType.getTypeParameters().getFirst()
);
} else if (isAssignableFromResolvedAsString(erasedType)) {
return List.of(
javaType.getTypeParameters().getFirst()
);
} else {
return List.of(
javaType.getTypeParameters().getFirst(),
context.resolve(String.class)
);
}
} else if (javaType.isInstanceOf(EncryptedString.class)) {
TypeContext context = target.getContext();
return List.of(
context.resolve(String.class)
);
}
return null;
@@ -266,11 +310,13 @@ public class JsonSchemaGenerator {
if (member.getDeclaredType().isInstanceOf(Property.class)) {
memberAttributes.put("$dynamic", true);
// if we are in the String definition of a Property but the target type is not String: we configure the format
// if we are in the String definition of a Property but the target type is not String: we configure the pattern
Class<?> targetType = member.getDeclaredType().getTypeParameters().getFirst().getErasedType();
if (!String.class.isAssignableFrom(targetType) && String.class.isAssignableFrom(member.getType().getErasedType())) {
memberAttributes.put("format", ".*{{.*}}.*");
memberAttributes.put("pattern", ".*{{.*}}.*");
}
} else if (member.getDeclaredType().isInstanceOf(Data.class)) {
memberAttributes.put("$dynamic", false);
}
});
@@ -320,11 +366,20 @@ public class JsonSchemaGenerator {
}
});
// PluginProperty additionalProperties
builder.forFields().withAdditionalPropertiesResolver(target -> {
PluginProperty pluginPropertyAnnotation = target.getAnnotationConsideringFieldAndGetter(PluginProperty.class);
Schema schemaAnnotation = target.getAnnotationConsideringFieldAndGetter(Schema.class);
Content contentAnnotation = target.getAnnotationConsideringFieldAndGetter(Content.class);
Schema contentSchemaAnnotation = contentAnnotation == null ? null : contentAnnotation.additionalPropertiesSchema();
if (pluginPropertyAnnotation != null) {
return pluginPropertyAnnotation.additionalProperties();
} else if (target.getType().isInstanceOf(Map.class)) {
return target.getTypeParameterFor(Map.class, 1);
} else if (schemaAnnotation != null && schemaAnnotation.additionalPropertiesSchema() != Void.class) {
return schemaAnnotation.additionalPropertiesSchema();
} else if (contentSchemaAnnotation != null && contentSchemaAnnotation.additionalPropertiesSchema() != Void.class) {
return contentSchemaAnnotation.additionalPropertiesSchema();
}
return Object.class;
@@ -335,44 +390,8 @@ public class JsonSchemaGenerator {
builder.forTypesInGeneral()
.withSubtypeResolver((declaredType, context) -> {
TypeContext typeContext = context.getTypeContext();
if (declaredType.getErasedType() == Task.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTasks().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == AbstractTrigger.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTriggers().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == Condition.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getConditions().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == ScheduleCondition.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getConditions().stream())
.filter(ScheduleCondition.class::isAssignableFrom)
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == TaskRunner.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTaskRunners().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
}
return null;
return this.subtypeResolver(declaredType, typeContext);
});
// description as Markdown
@@ -457,7 +476,88 @@ public class JsonSchemaGenerator {
}
}
private static Optional<ResolvedType> safelyResolveSubtype(ResolvedType declaredType, Class<?> clz, TypeContext typeContext) {
private boolean isAssignableFromResolvedAsString(Class<?> declaredType) {
for (Class<?> clazz : TYPES_RESOLVED_AS_STRING) {
if (clazz.isAssignableFrom(declaredType)) {
return true;
}
}
return false;
}
protected List<ResolvedType> subtypeResolver(ResolvedType declaredType, TypeContext typeContext) {
if (declaredType.getErasedType() == Task.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTasks().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == AbstractTrigger.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTriggers().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == Condition.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getConditions().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == ScheduleCondition.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getConditions().stream())
.filter(ScheduleCondition.class::isAssignableFrom)
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.flatMap(clz -> safelyResolveSubtype(declaredType, clz, typeContext).stream())
.toList();
} else if (declaredType.getErasedType() == TaskRunner.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getTaskRunners().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.map(typeContext::resolve)
.toList();
} else if (declaredType.getErasedType() == LogExporter.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getLogExporters().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.map(typeContext::resolve)
.toList();
} else if (declaredType.getErasedType() == Chart.class) {
return getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getCharts().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.<ResolvedType>mapMulti((clz, consumer) -> {
if (DataChart.class.isAssignableFrom(clz)) {
List<Class<? extends DataFilter<?, ?>>> dataFilters = getRegisteredPlugins()
.stream()
.flatMap(registeredPlugin -> registeredPlugin.getDataFilters().stream())
.filter(Predicate.not(io.kestra.core.models.Plugin::isInternal))
.toList();
TypeVariable<? extends Class<? extends Chart<?>>> dataFilterType = clz.getTypeParameters()[1];
ParameterizedType chartAwareColumnDescriptor = ((ParameterizedType) ((WildcardType) ((ParameterizedType) dataFilterType.getBounds()[0]).getActualTypeArguments()[1]).getUpperBounds()[0]);
dataFilters.forEach(dataFilter -> {
Type fieldsEnum = ((ParameterizedType) dataFilter.getGenericSuperclass()).getActualTypeArguments()[0];
consumer.accept(typeContext.resolve(clz, fieldsEnum, typeContext.resolve(dataFilter, typeContext.resolve(chartAwareColumnDescriptor, fieldsEnum))));
});
} else {
consumer.accept(typeContext.resolve(clz));
}
}).toList();
}
return null;
}
protected static Optional<ResolvedType> safelyResolveSubtype(ResolvedType declaredType, Class<?> clz, TypeContext typeContext) {
try {
return Optional.ofNullable(typeContext.resolveSubtype(declaredType, clz));
} catch (Exception e) {
@@ -502,6 +602,7 @@ public class JsonSchemaGenerator {
try {
ObjectNode objectNode = generator.generateSchema(cls);
replaceAnyOfWithOneOf(objectNode);
pullOfDefaultFromOneOf(objectNode);
return JacksonMapper.toMap(extractMainRef(objectNode));
} catch (IllegalArgumentException e) {

View File

@@ -31,10 +31,19 @@ public class Plugin {
private List<String> taskRunners;
private List<String> guides;
private List<String> aliases;
private List<String> apps;
private List<String> appBlocks;
private List<String> charts;
private List<String> dataFilters;
private List<String> logExporters;
private List<PluginSubGroup.PluginCategory> categories;
private String subGroup;
public static Plugin of(RegisteredPlugin registeredPlugin, @Nullable String subgroup) {
return Plugin.of(registeredPlugin, subgroup, true);
}
public static Plugin of(RegisteredPlugin registeredPlugin, @Nullable String subgroup, boolean includeDeprecated) {
Plugin plugin = new Plugin();
plugin.name = registeredPlugin.name();
PluginSubGroup subGroupInfos = null;
@@ -75,13 +84,17 @@ public class Plugin {
plugin.subGroup = subgroup;
plugin.tasks = filterAndGetClassName(registeredPlugin.getTasks()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.triggers = filterAndGetClassName(registeredPlugin.getTriggers()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.conditions = filterAndGetClassName(registeredPlugin.getConditions()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.storages = filterAndGetClassName(registeredPlugin.getStorages()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.secrets = filterAndGetClassName(registeredPlugin.getSecrets()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.taskRunners = filterAndGetClassName(registeredPlugin.getTaskRunners()).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.tasks = filterAndGetClassName(registeredPlugin.getTasks(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.triggers = filterAndGetClassName(registeredPlugin.getTriggers(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.conditions = filterAndGetClassName(registeredPlugin.getConditions(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.storages = filterAndGetClassName(registeredPlugin.getStorages(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.secrets = filterAndGetClassName(registeredPlugin.getSecrets(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.taskRunners = filterAndGetClassName(registeredPlugin.getTaskRunners(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.apps = filterAndGetClassName(registeredPlugin.getApps(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.appBlocks = filterAndGetClassName(registeredPlugin.getAppBlocks(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.charts = filterAndGetClassName(registeredPlugin.getCharts(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.dataFilters = filterAndGetClassName(registeredPlugin.getDataFilters(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
plugin.logExporters = filterAndGetClassName(registeredPlugin.getLogExporters(), includeDeprecated).stream().filter(c -> subgroup == null || c.startsWith(subgroup)).toList();
return plugin;
}
@@ -91,12 +104,14 @@ public class Plugin {
* Those classes are only filtered from the documentation to ensure backward compatibility.
*
* @param list The list of classes?
* @param includeDeprecated whether to include deprecated plugins or not
* @return a filtered streams.
*/
private static List<String> filterAndGetClassName(final List<? extends Class<?>> list) {
private static List<String> filterAndGetClassName(final List<? extends Class<?>> list, boolean includeDeprecated) {
return list
.stream()
.filter(not(io.kestra.core.models.Plugin::isInternal))
.filter(p -> includeDeprecated || !io.kestra.core.models.Plugin.isDeprecated(p))
.map(Class::getName)
.filter(c -> !c.startsWith("org.kestra."))
.toList();

View File

@@ -5,5 +5,7 @@ public enum SchemaType {
template,
task,
trigger,
plugindefault
plugindefault,
apps,
dashboard
}

View File

@@ -31,8 +31,8 @@ public class BasicAuthEndpointsFilter implements HttpServerFilter {
@Override
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
Optional<RouteMatch> routeMatch = RouteMatchUtils.findRouteMatch(request);
if (routeMatch.isPresent() && routeMatch.get() instanceof MethodBasedRouteMatch) {
ExecutableMethod<?, ?> method = ((MethodBasedRouteMatch<?, ?>) routeMatch.get()).getExecutableMethod();
if (routeMatch.isPresent() && routeMatch.get() instanceof MethodBasedRouteMatch<?, ?> methodBasedRouteMatch) {
ExecutableMethod<?, ?> method = methodBasedRouteMatch.getExecutableMethod();
if (method.getAnnotation(Endpoint.class) != null) {
if (!validateUser(request)) {
return Publishers.just(HttpResponse.status(HttpStatus.UNAUTHORIZED));

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