* feat: add R language support Add R as a new supported scripting language in Windmill, following the same pattern used for Ruby. Includes: - Backend: ScriptLang::Rlang enum variant, DB migration, tree-sitter-r parser crate with tests, WASM parser binding, R executor with NSJail sandboxing, job dispatch and signature parsing - Frontend: language picker, R icon, syntax highlighting, editor bar insertions (Sys.getenv, get_variable, get_resource), schema inference, init code template, BETA badge - CLI: .r extension mapping, sync support, bootstrap template R scripts use `main <- function(...)` syntax, jsonlite for JSON serialization, and system curl for the Windmill client helper. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add R package resolution and installation Parse library()/require() calls from R scripts to extract dependencies. Resolve versions from CRAN, cache lockfiles in pip_resolution_cache, and install packages to a shared R library cache. The run step sets R_LIBS_USER so installed packages are available to the script. - Parser: parse_r_requirements() extracts package names from AST - Executor: resolve() generates lockfile, install() installs from CRAN - Worker lockfiles: wire up R resolve for dependency jobs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add nsjail sandboxing for R resolve and install phases Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: fix R get_variable/get_resource and add sandbox annotation + e2e tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: fix R arg inference with JS fallback parser and get_variable/get_resource Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix flake * nsjail * nits * fix: R install improvements - suppress verbose output, flat lockfile logging, Dockerfile R support, rlimits - Suppress renv verbose output during resolve and install (controlled by #verbose annotation) - Filter renv from install list (already loaded, causes noisy restart message) - Log compact "resolved N packages" instead of full renv.lock JSON - Add R (r-base, r-cran-renv) to DockerfileFull and DockerfileFullEe - Use disable_rl for nsjail install config (R compiles from source) - Reduce default concurrency from 20 to 5 - Add rlang to openflow.openapi.yaml - Fix MainArgSignature (no_main_func -> auto_kind) after main merge Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * final * fix: remove accidental R install from multiplayer Dockerfile Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: remove R from Windows build and DockerfileExtra Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: rename R migration to avoid timestamp collision with trigger_filter_logic Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * all * fix: R install improvements - suppress verbose output, flat lockfile logging, Dockerfile R support, rlimits Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: add clear error when Rscript binary is missing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: fix type errors in R fallback parser, use format! in wrap(), add R system prompts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: pyranota <pyra@duck.com>
155 lines
5.8 KiB
TOML
155 lines
5.8 KiB
TOML
[package]
|
|
name = "windmill-worker"
|
|
version.workspace = true
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
|
|
[lib]
|
|
name = "windmill_worker"
|
|
path = "src/lib.rs"
|
|
|
|
[features]
|
|
default = []
|
|
private = ["windmill-worker-volumes/private", "windmill-queue/private", "windmill-common/private"]
|
|
mcp = ["dep:windmill-mcp"]
|
|
prometheus = ["dep:prometheus", "windmill-common/prometheus"]
|
|
enterprise = ["windmill-queue/enterprise", "windmill-git-sync/enterprise", "windmill-common/enterprise", "windmill-worker-volumes/enterprise", "dep:pem", "dep:tokio-util", "dep:opentelemetry-proto", "dep:prost", "dep:hudsucker", "dep:rcgen", "dep:hyper-http-proxy", "dep:hyper-tls", "dep:hyper-util"]
|
|
mssql = ["dep:tiberius"]
|
|
mssql-kerberos = ["mssql", "tiberius/integrated-auth-gssapi"] # Linux/Unix integrated auth
|
|
mssql-winauth = ["mssql", "tiberius/winauth"] # Windows integrated auth
|
|
bigquery = ["dep:gcp_auth"]
|
|
benchmark = ["windmill-queue/benchmark", "windmill-common/benchmark"]
|
|
parquet = ["windmill-common/parquet", "windmill-object-store/parquet"]
|
|
flow_testing = []
|
|
cloud = []
|
|
sqlx = []
|
|
deno_core = ["dep:windmill-runtime-nativets"]
|
|
libffi_mac = ["dep:libffi-sys"]
|
|
otel = ["windmill-common/otel", "dep:opentelemetry", "dep:tracing-opentelemetry"]
|
|
dind = ["dep:bollard"]
|
|
php = ["dep:windmill-parser-php"]
|
|
mysql = ["dep:mysql_async"]
|
|
oracledb = ["dep:oracle"]
|
|
python = ["dep:windmill-parser-py", "dep:windmill-parser-py-imports", "windmill-dep-map/python"]
|
|
csharp = ["dep:windmill-parser-csharp"]
|
|
rust = ["dep:windmill-parser-rust"]
|
|
nu = ["dep:windmill-parser-nu"]
|
|
java = ["dep:windmill-parser-java"]
|
|
ruby = ["dep:windmill-parser-ruby"]
|
|
rlang = ["dep:windmill-parser-r"]
|
|
duckdb = ["dep:libloading"]
|
|
quickjs = ["windmill-jseval/quickjs"]
|
|
bedrock = ["dep:aws-sdk-bedrockruntime", "windmill-common/bedrock", "dep:aws-config", "dep:aws-credential-types", "dep:aws-smithy-types"]
|
|
|
|
[dependencies]
|
|
windmill-queue.workspace = true
|
|
windmill-dep-map.workspace = true
|
|
windmill-audit.workspace = true # there isn't really a reason for audit-worth actions to happen in the worker.
|
|
windmill-common = { workspace = true, default-features = false }
|
|
windmill-types.workspace = true
|
|
windmill-object-store.workspace = true
|
|
windmill-worker-volumes.workspace = true
|
|
windmill-jseval.workspace = true
|
|
windmill-runtime-nativets = { workspace = true, optional = true }
|
|
windmill-mcp = { workspace = true, optional = true }
|
|
windmill-macros.workspace = true
|
|
windmill-parser.workspace = true
|
|
windmill-parser-ts.workspace = true
|
|
windmill-parser-go.workspace = true
|
|
windmill-parser-rust = { workspace = true, optional = true }
|
|
windmill-parser-csharp = { workspace = true, optional = true }
|
|
windmill-parser-nu = { workspace = true, optional = true }
|
|
windmill-parser-java = { workspace = true, optional = true }
|
|
windmill-parser-ruby = { workspace = true, optional = true }
|
|
windmill-parser-r = { workspace = true, optional = true }
|
|
windmill-parser-py = { workspace = true, optional = true }
|
|
windmill-parser-yaml.workspace = true
|
|
windmill-parser-py-imports = { workspace = true, optional = true }
|
|
windmill-parser-bash.workspace = true
|
|
windmill-parser-sql.workspace = true
|
|
windmill-parser-graphql.workspace = true
|
|
windmill-parser-php = { workspace = true, optional = true }
|
|
windmill-git-sync.workspace = true
|
|
aws-sdk-bedrockruntime = { workspace = true, optional = true }
|
|
aws-config = { workspace = true, optional = true }
|
|
aws-credential-types = { workspace = true, optional = true }
|
|
aws-smithy-types = { workspace = true, optional = true }
|
|
flume.workspace = true
|
|
sqlx.workspace = true
|
|
uuid.workspace = true
|
|
ulid.workspace = true
|
|
tracing.workspace = true
|
|
tokio.workspace = true
|
|
tokio-stream.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
futures.workspace = true
|
|
async-recursion.workspace = true
|
|
async-trait.workspace = true
|
|
anyhow.workspace = true
|
|
derive_more.workspace = true
|
|
itertools.workspace = true
|
|
regex.workspace = true
|
|
prometheus = { workspace = true, optional = true }
|
|
lazy_static.workspace = true
|
|
chrono.workspace = true
|
|
dotenv.workspace = true
|
|
rand.workspace = true # TODO: Remove. only used by token creation hack.
|
|
const_format.workspace = true
|
|
mappable-rc.workspace = true
|
|
git-version.workspace = true
|
|
once_cell.workspace = true
|
|
tokio-postgres.workspace = true
|
|
bit-vec.workspace = true
|
|
url.workspace = true
|
|
async-stream.workspace = true
|
|
|
|
postgres-native-tls.workspace = true
|
|
native-tls.workspace = true
|
|
mysql_async = { workspace = true, optional = true }
|
|
base64.workspace = true
|
|
gcp_auth = { workspace = true, optional = true }
|
|
rust_decimal.workspace = true
|
|
jsonwebtoken.workspace = true
|
|
sha2.workspace = true
|
|
hmac.workspace = true
|
|
pem = { workspace = true, optional = true }
|
|
urlencoding.workspace = true
|
|
nix.workspace = true
|
|
bytes.workspace = true
|
|
reqwest.workspace = true
|
|
reqwest-middleware.workspace = true
|
|
eventsource-stream.workspace = true
|
|
mime_guess.workspace = true
|
|
hex.workspace = true
|
|
tiberius = { workspace = true, optional = true }
|
|
tokio-util = { workspace = true, optional = true }
|
|
tar.workspace = true
|
|
convert_case.workspace = true
|
|
yaml-rust.workspace = true
|
|
backon.workspace = true
|
|
pep440_rs.workspace = true
|
|
process-wrap.workspace = true
|
|
async-once-cell.workspace = true
|
|
libloading = { workspace = true, optional = true }
|
|
|
|
opentelemetry-proto = { workspace = true, optional = true }
|
|
opentelemetry = { workspace = true, optional = true }
|
|
tracing-opentelemetry = { workspace = true, optional = true }
|
|
prost = { workspace = true, optional = true }
|
|
axum.workspace = true
|
|
bollard = { workspace = true, optional = true }
|
|
oracle = { workspace = true, optional = true }
|
|
hudsucker = { workspace = true, optional = true }
|
|
hyper-http-proxy = { workspace = true, optional = true }
|
|
hyper-tls = { workspace = true, optional = true }
|
|
hyper-util = { workspace = true, optional = true }
|
|
rcgen = { workspace = true, optional = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile.workspace = true
|
|
x509-parser.workspace = true
|
|
|
|
[build-dependencies]
|
|
libffi-sys = { workspace = true, optional = true }
|