mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-06 08:02:19 +00:00
Merge remote-tracking branch 'origin/main' into di/playwright
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## [1.607.1](https://github.com/windmill-labs/windmill/compare/v1.607.0...v1.607.1) (2026-01-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix wmill app dev with workspace scripts ([d5fa3d8](https://github.com/windmill-labs/windmill/commit/d5fa3d8dec78148becdc826ab83defe39a06af7e))
|
||||
* improve raw app builder malformed files ([483b7d6](https://github.com/windmill-labs/windmill/commit/483b7d699f01f2bf91c23f9e37534f648a0a4e7e))
|
||||
|
||||
## [1.607.0](https://github.com/windmill-labs/windmill/compare/v1.606.1...v1.607.0) (2026-01-15)
|
||||
|
||||
|
||||
|
||||
+8
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT app_id, value FROM app_version WHERE id = $1",
|
||||
"query": "SELECT app_id, value, raw_app FROM app_version WHERE id = $1",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@@ -12,6 +12,11 @@
|
||||
"ordinal": 1,
|
||||
"name": "value",
|
||||
"type_info": "Json"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "raw_app",
|
||||
"type_info": "Bool"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
@@ -20,9 +25,10 @@
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "ea9bbb972217bab4d7e8f4c08e331899161e80c239d56eb657d73bbf4272939b"
|
||||
"hash": "19cca1d42f37e860dc54470fea8dd9a35c412d82d27ce369ccb0ba38b9791669"
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT app_version.raw_app FROM app\n JOIN app_version ON app_version.id = app.versions[array_upper(app.versions, 1)]\n WHERE app.path = $1 AND app.workspace_id = $2",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "raw_app",
|
||||
"type_info": "Bool"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "fb321fba5f4508d6cff5bae5a7c5a120d12b43a2f6056c3fff1c7c099b5f248a"
|
||||
}
|
||||
Generated
+115
-54
@@ -841,9 +841,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-runtime"
|
||||
version = "1.5.17"
|
||||
version = "1.5.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b"
|
||||
checksum = "959dab27ce613e6c9658eb3621064d0e2027e5f2acb65bc526a43577facea557"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-sigv4",
|
||||
@@ -914,9 +914,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-sdk-rds"
|
||||
version = "1.122.0"
|
||||
version = "1.123.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1cf01ccb7824bbf1b455fd9b1d1a9522be98272e42472cf5406a7f3b2f4eb62"
|
||||
checksum = "43adf02ed73dcbaa18979ab849162331e4b772e276988e5750fd277687d92897"
|
||||
dependencies = [
|
||||
"aws-credential-types",
|
||||
"aws-runtime",
|
||||
@@ -924,6 +924,7 @@ dependencies = [
|
||||
"aws-smithy-async",
|
||||
"aws-smithy-http",
|
||||
"aws-smithy-json",
|
||||
"aws-smithy-observability",
|
||||
"aws-smithy-query",
|
||||
"aws-smithy-runtime",
|
||||
"aws-smithy-runtime-api",
|
||||
@@ -1258,7 +1259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum-core",
|
||||
"axum-core 0.4.5",
|
||||
"axum-macros",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
@@ -1268,7 +1269,7 @@ dependencies = [
|
||||
"hyper 1.8.1",
|
||||
"hyper-util",
|
||||
"itoa",
|
||||
"matchit",
|
||||
"matchit 0.7.3",
|
||||
"memchr",
|
||||
"mime",
|
||||
"multer",
|
||||
@@ -1287,6 +1288,40 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5"
|
||||
dependencies = [
|
||||
"axum-core 0.5.6",
|
||||
"bytes",
|
||||
"form_urlencoded",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"hyper 1.8.1",
|
||||
"hyper-util",
|
||||
"itoa",
|
||||
"matchit 0.8.4",
|
||||
"memchr",
|
||||
"mime",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustversion",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_path_to_error",
|
||||
"serde_urlencoded",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tower 0.5.3",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.4.5"
|
||||
@@ -1308,6 +1343,25 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"mime",
|
||||
"pin-project-lite",
|
||||
"sync_wrapper",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-macros"
|
||||
version = "0.4.2"
|
||||
@@ -8126,6 +8180,12 @@ version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
|
||||
|
||||
[[package]]
|
||||
name = "md-5"
|
||||
version = "0.9.1"
|
||||
@@ -10932,11 +10992,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rmcp"
|
||||
version = "0.12.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "528d42f8176e6e5e71ea69182b17d1d0a19a6b3b894b564678b74cd7cab13cfa"
|
||||
checksum = "d1815dbc06c414d720f8bc1951eccd66bc99efc6376331f1e7093a119b3eb508"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum 0.8.4",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"chrono",
|
||||
@@ -10966,9 +11027,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rmcp-macros"
|
||||
version = "0.12.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e3f81daaa494eb8e985c9462f7d6ce1ab05e5299f48aafd76cdd3d8b060e6f59"
|
||||
checksum = "11f0bc7008fa102e771a76c6d2c9b253be3f2baa5964e060464d038ae1cbc573"
|
||||
dependencies = [
|
||||
"darling 0.23.0",
|
||||
"proc-macro2",
|
||||
@@ -11107,9 +11168,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.26"
|
||||
version = "0.1.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
|
||||
checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
@@ -13992,7 +14053,7 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52"
|
||||
dependencies = [
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"flate2",
|
||||
@@ -14063,7 +14124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fd0118512cf0b3768f7fcccf0bef1ae41d68f2b45edc1e77432b36c97c56c6d"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum-core",
|
||||
"axum-core 0.4.5",
|
||||
"cookie 0.18.1",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
@@ -14823,9 +14884,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "wasip2"
|
||||
version = "1.0.1+wasi-0.2.4"
|
||||
version = "1.0.2+wasi-0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
|
||||
checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
|
||||
dependencies = [
|
||||
"wit-bindgen",
|
||||
]
|
||||
@@ -15182,12 +15243,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windmill"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"aws-sdk-config",
|
||||
"aws-sigv4",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"base64 0.22.1",
|
||||
"bitflags 2.9.4",
|
||||
"chrono",
|
||||
@@ -15245,7 +15306,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-api"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"argon2",
|
||||
@@ -15263,7 +15324,7 @@ dependencies = [
|
||||
"aws-sdk-ssooidc",
|
||||
"aws-sdk-sts",
|
||||
"aws-sigv4",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"backon",
|
||||
"base32",
|
||||
"base64 0.22.1",
|
||||
@@ -15298,7 +15359,7 @@ dependencies = [
|
||||
"libxml",
|
||||
"magic-crypt",
|
||||
"mail-parser",
|
||||
"matchit",
|
||||
"matchit 0.7.3",
|
||||
"mime_guess",
|
||||
"native-tls",
|
||||
"nkeys",
|
||||
@@ -15368,7 +15429,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-api-client"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"reqwest 0.12.28",
|
||||
"serde",
|
||||
@@ -15378,7 +15439,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-audit"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"lazy_static",
|
||||
@@ -15392,10 +15453,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-autoscaling"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"k8s-openapi",
|
||||
"kube",
|
||||
"serde",
|
||||
@@ -15411,7 +15472,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-common"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
@@ -15423,7 +15484,7 @@ dependencies = [
|
||||
"aws-sdk-sts",
|
||||
"aws-smithy-types",
|
||||
"aws-smithy-types-convert",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"backon",
|
||||
"base64 0.22.1",
|
||||
"bitflags 2.9.4",
|
||||
@@ -15505,7 +15566,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-git-sync"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"regex",
|
||||
"serde",
|
||||
@@ -15520,7 +15581,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-indexer"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"astral-tokio-tar",
|
||||
@@ -15544,7 +15605,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-macros"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"itertools 0.14.0",
|
||||
"lazy_static",
|
||||
@@ -15560,7 +15621,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-mcp"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"oauth2",
|
||||
@@ -15574,11 +15635,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-oauth"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-oauth2",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
"hex",
|
||||
@@ -15598,7 +15659,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"convert_case 0.6.0",
|
||||
"serde",
|
||||
@@ -15607,7 +15668,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-bash"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"lazy_static",
|
||||
@@ -15619,7 +15680,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-csharp"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde_json",
|
||||
@@ -15631,7 +15692,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-go"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"gosyn",
|
||||
@@ -15643,7 +15704,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-graphql"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"lazy_static",
|
||||
@@ -15655,7 +15716,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-java"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde_json",
|
||||
@@ -15667,7 +15728,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-nu"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"nu-parser",
|
||||
@@ -15678,7 +15739,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-php"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"itertools 0.14.0",
|
||||
@@ -15689,7 +15750,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-py"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"itertools 0.14.0",
|
||||
@@ -15702,7 +15763,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-py-imports"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
@@ -15726,7 +15787,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-ruby"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"lazy_static",
|
||||
@@ -15740,7 +15801,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-rust"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"convert_case 0.6.0",
|
||||
@@ -15757,7 +15818,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-sql"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"lazy_static",
|
||||
@@ -15771,7 +15832,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-ts"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"lazy_static",
|
||||
@@ -15790,7 +15851,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-parser-yaml"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde",
|
||||
@@ -15801,11 +15862,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-queue"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
"axum",
|
||||
"axum 0.7.9",
|
||||
"backon",
|
||||
"chrono",
|
||||
"chrono-tz",
|
||||
@@ -15838,7 +15899,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-sql-datatype-parser-wasm"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-test",
|
||||
@@ -15848,7 +15909,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "windmill-worker"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-once-cell",
|
||||
@@ -16562,9 +16623,9 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen"
|
||||
version = "0.46.0"
|
||||
version = "0.51.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
|
||||
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
|
||||
|
||||
[[package]]
|
||||
name = "writeable"
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "windmill"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
|
||||
@@ -35,7 +35,7 @@ members = [
|
||||
exclude = ["./windmill-duckdb-ffi-internal"]
|
||||
|
||||
[workspace.package]
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
authors = ["Ruben Fiszel <ruben@windmill.dev>"]
|
||||
edition = "2021"
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
6262e373ede45b5b8d45505a63ff73968c04336a
|
||||
da0a3751abd2b0fed46ca5c7a3aef35923403b28
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: "3.0.3"
|
||||
|
||||
info:
|
||||
version: 1.607.0
|
||||
version: 1.607.1
|
||||
title: Windmill API
|
||||
|
||||
contact:
|
||||
|
||||
@@ -1303,6 +1303,18 @@ async fn delete_app(
|
||||
));
|
||||
}
|
||||
|
||||
// Check if it's a raw app before deletion
|
||||
let is_raw_app = sqlx::query_scalar!(
|
||||
"SELECT app_version.raw_app FROM app
|
||||
JOIN app_version ON app_version.id = app.versions[array_upper(app.versions, 1)]
|
||||
WHERE app.path = $1 AND app.workspace_id = $2",
|
||||
path,
|
||||
&w_id
|
||||
)
|
||||
.fetch_optional(&db)
|
||||
.await?
|
||||
.unwrap_or(false);
|
||||
|
||||
let mut tx = user_db.begin(&authed).await?;
|
||||
|
||||
sqlx::query!(
|
||||
@@ -1333,16 +1345,26 @@ async fn delete_app(
|
||||
.await?;
|
||||
tx.commit().await?;
|
||||
|
||||
let deployed_object = if is_raw_app {
|
||||
DeployedObject::RawApp {
|
||||
path: path.to_string(),
|
||||
parent_path: Some(path.to_string()),
|
||||
version: 0, // dummy version as it will not get inserted in db
|
||||
}
|
||||
} else {
|
||||
DeployedObject::App {
|
||||
path: path.to_string(),
|
||||
parent_path: Some(path.to_string()),
|
||||
version: 0, // dummy version as it will not get inserted in db
|
||||
}
|
||||
};
|
||||
|
||||
handle_deployment_metadata(
|
||||
&authed.email,
|
||||
&authed.username,
|
||||
&db,
|
||||
&w_id,
|
||||
DeployedObject::App {
|
||||
path: path.to_string(),
|
||||
parent_path: Some(path.to_string()),
|
||||
version: 0, // dummy version as it will not get inserted in db
|
||||
},
|
||||
deployed_object,
|
||||
Some(format!("App '{}' deleted", path)),
|
||||
true,
|
||||
)
|
||||
|
||||
@@ -19,6 +19,7 @@ pub enum DeployedObject {
|
||||
Script { hash: ScriptHash, path: String, parent_path: Option<String> },
|
||||
Flow { path: String, parent_path: Option<String>, version: i64 },
|
||||
App { path: String, version: i64, parent_path: Option<String> },
|
||||
RawApp { path: String, version: i64, parent_path: Option<String> },
|
||||
Folder { path: String },
|
||||
Resource { path: String, parent_path: Option<String> },
|
||||
Variable { path: String, parent_path: Option<String> },
|
||||
@@ -45,6 +46,7 @@ impl DeployedObject {
|
||||
DeployedObject::Script { path, .. } => path.to_owned(),
|
||||
DeployedObject::Flow { path, .. } => path.to_owned(),
|
||||
DeployedObject::App { path, .. } => path.to_owned(),
|
||||
DeployedObject::RawApp { path, .. } => path.to_owned(),
|
||||
DeployedObject::Folder { path, .. } => path.to_owned(),
|
||||
DeployedObject::Resource { path, .. } => path.to_owned(),
|
||||
DeployedObject::Variable { path, .. } => path.to_owned(),
|
||||
@@ -82,6 +84,7 @@ impl DeployedObject {
|
||||
DeployedObject::Script { parent_path, .. } => parent_path.to_owned(),
|
||||
DeployedObject::Flow { parent_path, .. } => parent_path.to_owned(),
|
||||
DeployedObject::App { parent_path, .. } => parent_path.to_owned(),
|
||||
DeployedObject::RawApp { parent_path, .. } => parent_path.to_owned(),
|
||||
DeployedObject::Folder { .. } => None,
|
||||
DeployedObject::Resource { parent_path, .. } => parent_path.to_owned(),
|
||||
DeployedObject::Variable { parent_path, .. } => parent_path.to_owned(),
|
||||
@@ -108,6 +111,7 @@ impl DeployedObject {
|
||||
DeployedObject::Script { .. } => "script",
|
||||
DeployedObject::Flow { .. } => "flow",
|
||||
DeployedObject::App { .. } => "app",
|
||||
DeployedObject::RawApp { .. } => "raw_app",
|
||||
DeployedObject::Folder { .. } => "folder",
|
||||
DeployedObject::Resource { .. } => "resource",
|
||||
DeployedObject::Variable { .. } => "variable",
|
||||
|
||||
@@ -179,7 +179,7 @@ impl McpClient {
|
||||
|
||||
let result = self
|
||||
.client
|
||||
.call_tool(CallToolRequestParam { name: name.to_string().into(), arguments: mcp_args })
|
||||
.call_tool(CallToolRequestParam { name: name.to_string().into(), arguments: mcp_args, task: None })
|
||||
.await
|
||||
.context(format!("Failed to call MCP tool: {}", name))?;
|
||||
|
||||
|
||||
@@ -2178,10 +2178,13 @@ pub async fn handle_app_dependency_job(
|
||||
.execute(db)
|
||||
.await?;
|
||||
|
||||
let record = sqlx::query!("SELECT app_id, value FROM app_version WHERE id = $1", id)
|
||||
.fetch_optional(db)
|
||||
.await?
|
||||
.map(|record| (record.app_id, record.value));
|
||||
let record = sqlx::query!(
|
||||
"SELECT app_id, value, raw_app FROM app_version WHERE id = $1",
|
||||
id
|
||||
)
|
||||
.fetch_optional(db)
|
||||
.await?
|
||||
.map(|record| (record.app_id, record.value, record.raw_app));
|
||||
|
||||
let (_, parent_path) = get_deployment_msg_and_parent_path_from_args(job.args.clone());
|
||||
|
||||
@@ -2195,7 +2198,7 @@ pub async fn handle_app_dependency_job(
|
||||
.await?;
|
||||
|
||||
// TODO: Use transaction for entire segment?
|
||||
if let Some((app_id, value)) = record {
|
||||
if let Some((app_id, value, is_raw_app)) = record {
|
||||
let value = lock_modules_app(
|
||||
value,
|
||||
&job,
|
||||
@@ -2275,12 +2278,18 @@ pub async fn handle_app_dependency_job(
|
||||
let (deployment_message, parent_path) =
|
||||
get_deployment_msg_and_parent_path_from_args(job.args.clone());
|
||||
|
||||
let deployed_object = if is_raw_app {
|
||||
DeployedObject::RawApp { path: job_path, version: id, parent_path }
|
||||
} else {
|
||||
DeployedObject::App { path: job_path, version: id, parent_path }
|
||||
};
|
||||
|
||||
if let Err(e) = handle_deployment_metadata(
|
||||
&job.permissioned_as_email,
|
||||
&job.created_by,
|
||||
&db,
|
||||
&job.workspace_id,
|
||||
DeployedObject::App { path: job_path, version: id, parent_path },
|
||||
deployed_object,
|
||||
deployment_message,
|
||||
false,
|
||||
)
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts";
|
||||
import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts";
|
||||
import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts";
|
||||
|
||||
export const VERSION = "v1.607.0";
|
||||
export const VERSION = "v1.607.1";
|
||||
|
||||
export async function login(email: string, password: string): Promise<string> {
|
||||
return await windmill.UserService.login({
|
||||
|
||||
@@ -36,11 +36,47 @@ import {
|
||||
} from "./app_metadata.ts";
|
||||
import { loadRunnablesFromBackend } from "./raw_apps.ts";
|
||||
import { regenerateAgentDocs } from "./generate_agents.ts";
|
||||
import { hasFolderSuffix, getFolderSuffix } from "../../utils/resource_folders.ts";
|
||||
import { hasFolderSuffix, getFolderSuffix, setNonDottedPaths } from "../../utils/resource_folders.ts";
|
||||
|
||||
const DEFAULT_PORT = 4000;
|
||||
const DEFAULT_HOST = "localhost";
|
||||
|
||||
/**
|
||||
* Search for wmill.yaml by traversing upward from the current directory.
|
||||
* Unlike the standard findWmillYaml() in conf.ts, this does not stop at
|
||||
* the git root - it continues searching until the filesystem root.
|
||||
* This is needed for `app dev` which runs from inside a raw_app folder
|
||||
* that may be deeply nested within a larger git repository.
|
||||
*/
|
||||
async function findAndLoadNonDottedPathsSetting(): Promise<void> {
|
||||
let currentDir = process.cwd();
|
||||
|
||||
while (true) {
|
||||
const wmillYamlPath = path.join(currentDir, "wmill.yaml");
|
||||
|
||||
if (fs.existsSync(wmillYamlPath)) {
|
||||
try {
|
||||
const config = await yamlParseFile(wmillYamlPath) as { nonDottedPaths?: boolean };
|
||||
setNonDottedPaths(config?.nonDottedPaths ?? false);
|
||||
log.debug(`Found wmill.yaml at ${wmillYamlPath}, nonDottedPaths=${config?.nonDottedPaths ?? false}`);
|
||||
} catch (e) {
|
||||
log.debug(`Failed to parse wmill.yaml at ${wmillYamlPath}: ${e}`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we've reached the filesystem root
|
||||
const parentDir = path.dirname(currentDir);
|
||||
if (parentDir === currentDir) {
|
||||
// Reached filesystem root without finding wmill.yaml
|
||||
log.debug("No wmill.yaml found, using default dotted paths");
|
||||
return;
|
||||
}
|
||||
|
||||
currentDir = parentDir;
|
||||
}
|
||||
}
|
||||
|
||||
// HTML template with live reload and SQL migration modal
|
||||
const createHTML = (jsPath: string, cssPath: string) => `
|
||||
<!DOCTYPE html>
|
||||
@@ -305,6 +341,10 @@ interface DevOptions extends GlobalOptions {
|
||||
async function dev(opts: DevOptions) {
|
||||
GLOBAL_CONFIG_OPT.noCdToRoot = true;
|
||||
|
||||
// Search for wmill.yaml by traversing upward (without git root constraint)
|
||||
// to initialize nonDottedPaths setting before using folder suffix functions
|
||||
await findAndLoadNonDottedPathsSetting();
|
||||
|
||||
// Validate that we're in a .raw_app folder
|
||||
const cwd = process.cwd();
|
||||
const currentDirName = path.basename(cwd);
|
||||
@@ -1303,6 +1343,30 @@ async function genRunnablesTs(schemaOverrides: Record<string, any> = {}) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert runnables from file format to API format.
|
||||
* File format uses type: "script"|"hubscript"|"flow" for path-based runnables.
|
||||
* API format uses type: "path" with runType: "script"|"hubscript"|"flow".
|
||||
*/
|
||||
function convertRunnablesToApiFormat(runnables: Record<string, any>): void {
|
||||
for (const [runnableId, runnable] of Object.entries(runnables)) {
|
||||
if (
|
||||
runnable?.type === "script" ||
|
||||
runnable?.type === "hubscript" ||
|
||||
runnable?.type === "flow"
|
||||
) {
|
||||
// Convert from file format to API format
|
||||
// { type: "script" } -> { type: "path", runType: "script" }
|
||||
const originalType = runnable.type;
|
||||
runnable.runType = originalType;
|
||||
runnable.type = "path";
|
||||
log.debug(
|
||||
`Converted runnable '${runnableId}' from type='${originalType}' to type='path', runType='${originalType}'`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function loadRunnables(): Promise<Record<string, Runnable>> {
|
||||
try {
|
||||
const localPath = process.cwd();
|
||||
@@ -1319,6 +1383,10 @@ async function loadRunnables(): Promise<Record<string, Runnable>> {
|
||||
runnables = rawApp?.runnables ?? {};
|
||||
}
|
||||
|
||||
// Always convert path-based runnables from file format to API format
|
||||
// This handles both backend folder runnables and raw_app.yaml runnables
|
||||
convertRunnablesToApiFormat(runnables);
|
||||
|
||||
replaceInlineScripts(runnables, backendPath + SEP, true);
|
||||
|
||||
return runnables;
|
||||
@@ -1370,12 +1438,25 @@ async function executeRunnable(
|
||||
lock: inlineScript.id === undefined ? inlineScript.lock : undefined,
|
||||
cache_ttl: inlineScript.cache_ttl,
|
||||
};
|
||||
} else if (runnable.type === "path" && runnable.runType && runnable.path) {
|
||||
// Path-based runnables have type: "path" and runType: "script"|"hubscript"|"flow"
|
||||
} else if (
|
||||
(runnable.type === "path" || runnable.type === "runnableByPath") &&
|
||||
runnable.runType &&
|
||||
runnable.path
|
||||
) {
|
||||
// Path-based runnables have type: "path" (or legacy "runnableByPath") and runType: "script"|"hubscript"|"flow"
|
||||
const prefix = runnable.runType;
|
||||
requestBody.path = prefix !== "hubscript"
|
||||
? `${prefix}/${runnable.path}`
|
||||
: `script/${runnable.path}`;
|
||||
} else {
|
||||
// Neither inline script nor valid path-based runnable
|
||||
const debugInfo = `type=${(runnable as any).type}, runType=${(runnable as any).runType}, ` +
|
||||
`path=${(runnable as any).path}, hasInlineScript=${!!(runnable as any).inlineScript}`;
|
||||
log.error(colors.red(`[executeRunnable] Invalid runnable configuration for '${runnableId}': ${debugInfo}`));
|
||||
throw new Error(
|
||||
`Invalid runnable '${runnableId}': ${debugInfo}. ` +
|
||||
`Must have either inlineScript (for inline type) or type="path" with runType and path fields`,
|
||||
);
|
||||
}
|
||||
|
||||
const uuid = await wmill.executeComponent({
|
||||
|
||||
@@ -125,18 +125,12 @@ export const GLOBAL_CONFIG_OPT = { noCdToRoot: false };
|
||||
function findWmillYaml(): string | null {
|
||||
const startDir = resolve(Deno.cwd());
|
||||
const isInGitRepo = isGitRepository();
|
||||
const gitRoot = isInGitRepo ? getGitRepoRoot() : null;
|
||||
|
||||
// If not in git repo, only check current directory
|
||||
if (!isInGitRepo) {
|
||||
const wmillYamlPath = join(startDir, "wmill.yaml");
|
||||
return existsSync(wmillYamlPath) ? wmillYamlPath : null;
|
||||
}
|
||||
|
||||
// If in git repo, search up to git repository root
|
||||
const gitRoot = getGitRepoRoot();
|
||||
let currentDir = startDir;
|
||||
let foundPath: string | null = null;
|
||||
|
||||
// Search upward for wmill.yaml until we find it, reach git root, or reach filesystem root
|
||||
while (true) {
|
||||
const wmillYamlPath = join(currentDir, "wmill.yaml");
|
||||
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ export {
|
||||
// }
|
||||
// });
|
||||
|
||||
export const VERSION = "1.607.0";
|
||||
export const VERSION = "1.607.1";
|
||||
|
||||
// Re-exported from constants.ts to maintain backwards compatibility
|
||||
export { WM_FORK_PREFIX } from "./core/constants.ts";
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "windmill-components",
|
||||
"version": "1.607.0",
|
||||
"version": "1.607.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "windmill-components",
|
||||
"version": "1.607.0",
|
||||
"version": "1.607.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "windmill-components",
|
||||
"version": "1.607.0",
|
||||
"version": "1.607.1",
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
|
||||
@@ -20,7 +20,7 @@ console.log('Running postinstall for root project');
|
||||
|
||||
import { x } from 'tar'
|
||||
|
||||
const tarUrl = 'https://pub-06154ed168a24e73a86ab84db6bf15d8.r2.dev/ui_builder-10b2c03.tar.gz'
|
||||
const tarUrl = 'https://pub-06154ed168a24e73a86ab84db6bf15d8.r2.dev/ui_builder-910a786.tar.gz'
|
||||
const outputTarPath = path.join(process.cwd(), 'ui_builder.tar.gz')
|
||||
const extractTo = path.join(process.cwd(), 'static/ui_builder/')
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
(v) => {
|
||||
if (v === storage) return
|
||||
storage = v
|
||||
s3FilePickerInner?.reloadContent()
|
||||
s3FilePickerInner?.reloadContent?.()
|
||||
}
|
||||
}
|
||||
/>
|
||||
|
||||
@@ -443,7 +443,7 @@
|
||||
: undefined
|
||||
}
|
||||
|
||||
async function reloadContent() {
|
||||
export async function reloadContent() {
|
||||
if (initialFileKey !== undefined) {
|
||||
initialFileKeyInternalCopy = { ...initialFileKey }
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"gitSync_18": "hub/28078/sync-script-to-git-repo-windmill",
|
||||
"gitSync_19": "hub/28081/sync-script-to-git-repo-windmill",
|
||||
"gitSync_20": "hub/28102/sync-script-to-git-repo-windmill",
|
||||
"gitSync": "hub/28112/sync-script-to-git-repo-windmill",
|
||||
"gitSync": "hub/28118/sync-script-to-git-repo-windmill",
|
||||
"gitSyncTest": "hub/19799/git-repo-test-read-write-windmill",
|
||||
"gitInitRepo": "hub/28109/git-sync%3A-init-repository-windmill",
|
||||
"slackErrorHandler": "hub/19741/workspace-or-schedule-error-handler-slack",
|
||||
@@ -39,4 +39,4 @@
|
||||
"appReport": "hub/28076/app-report",
|
||||
"cloneRepoToS3forGitRepoViewer_0": "hub/19825/clone_repo_and_upload_to_instance_storage",
|
||||
"cloneRepoToS3forGitRepoViewer": "hub/19827/clone_repo_and_upload_to_instance_storage"
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,8 +4,8 @@ verify_ssl = true
|
||||
name = "pypi"
|
||||
|
||||
[packages]
|
||||
wmill = ">=1.607.0"
|
||||
wmill_pg = ">=1.607.0"
|
||||
wmill = ">=1.607.1"
|
||||
wmill_pg = ">=1.607.1"
|
||||
sendgrid = "*"
|
||||
mysql-connector-python = "*"
|
||||
pymongo = "*"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: '3.0.3'
|
||||
|
||||
info:
|
||||
version: 1.607.0
|
||||
version: 1.607.1
|
||||
title: OpenFlow Spec
|
||||
contact:
|
||||
name: Ruben Fiszel
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
RootModule = 'WindmillClient.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '1.607.0'
|
||||
ModuleVersion = '1.607.1'
|
||||
|
||||
# Supported PSEditions
|
||||
# CompatiblePSEditions = @()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "wmill"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
description = "A client library for accessing Windmill server wrapping the Windmill client API"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://windmill.dev"
|
||||
|
||||
@@ -975,7 +975,7 @@ class Windmill:
|
||||
).json()
|
||||
except Exception as e:
|
||||
raise Exception("Could not write file to S3") from e
|
||||
return S3Object(s3=response["file_key"])
|
||||
return S3Object(s3=response["file_key"], storage=s3object["storage"])
|
||||
|
||||
def sign_s3_objects(self, s3_objects: list[S3Object | str]) -> list[S3Object]:
|
||||
"""Sign S3 objects for use by anonymous users in public apps.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "wmill-pg"
|
||||
version = "1.607.0"
|
||||
version = "1.607.1"
|
||||
description = "An extension client for the wmill client library focused on pg"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://windmill.dev"
|
||||
|
||||
@@ -961,6 +961,7 @@ export async function writeS3File(
|
||||
});
|
||||
return {
|
||||
s3: response.file_key,
|
||||
...(s3Obj?.storage && { storage: s3Obj?.storage }),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1047,7 +1048,10 @@ export async function getPresignedS3PublicUrl(
|
||||
* This allows pre-approvals that can be consumed by any later suspend step in the same flow.
|
||||
* @returns approval page UI URL, resume and cancel API URLs for resuming the flow
|
||||
*/
|
||||
export async function getResumeUrls(approver?: string, flowLevel?: boolean): Promise<{
|
||||
export async function getResumeUrls(
|
||||
approver?: string,
|
||||
flowLevel?: boolean
|
||||
): Promise<{
|
||||
approvalPage: string;
|
||||
resume: string;
|
||||
cancel: string;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@windmill/windmill",
|
||||
"version": "1.607.0",
|
||||
"version": "1.607.1",
|
||||
"exports": "./src/index.ts",
|
||||
"publish": {
|
||||
"exclude": ["!src", "./s3Types.ts", "./sqlUtils.ts", "./client.ts"]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "windmill-client",
|
||||
"description": "Windmill SDK client for browsers and Node.js",
|
||||
"version": "1.607.0",
|
||||
"version": "1.607.1",
|
||||
"author": "Ruben Fiszel",
|
||||
"license": "Apache 2.0",
|
||||
"devDependencies": {
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.607.0
|
||||
1.607.1
|
||||
|
||||
Reference in New Issue
Block a user