mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-29 08:06:26 +00:00
* 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>
88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
// enabled: bool,
|
|
// min_workers: usize,
|
|
// max_workers: usize,
|
|
// cooldown_seconds: usize,
|
|
// inc_scale_jobs_waiting: usize,
|
|
// full_scale_cooldown_seconds: usize,
|
|
// full_scale_jobs_waiting: usize,
|
|
// dec_scale_occupancy_rate: u8, // occupancy rate of 30s, 5m, 30m to scale down
|
|
// inc_scale_occupancy_rate: u8, // occupancy rate of 30s, 5m to scale up
|
|
// inc_percent: usize,
|
|
// integration: Option<AutoscalingIntegration>,
|
|
|
|
export type AutoscalingConfig = {
|
|
enabled: boolean
|
|
min_workers: number
|
|
max_workers: number
|
|
cooldown_seconds?: number
|
|
inc_scale_num_jobs_waiting?: number
|
|
full_scale_cooldown_seconds?: number
|
|
full_scale_jobs_waiting?: number
|
|
dec_scale_occupancy_rate?: number
|
|
inc_scale_occupancy_rate?: number
|
|
inc_num_workers?: number
|
|
integration?: AutoscalingIntegration
|
|
custom_tags?: string[]
|
|
}
|
|
|
|
export type AutoscalingIntegration = AutoscaleScript | AutoscaleDryRun | AutoscaleKubernetes
|
|
|
|
export type AutoscaleScript = {
|
|
type: 'script'
|
|
tag?: string
|
|
path: string
|
|
}
|
|
|
|
export type AutoscaleDryRun = {
|
|
type: 'dryrun'
|
|
}
|
|
|
|
export type AutoscaleKubernetes = {
|
|
type: 'kubernetes'
|
|
}
|
|
|
|
export const defaultTags = [
|
|
'deno',
|
|
'python3',
|
|
'go',
|
|
'bash',
|
|
'powershell',
|
|
'dependency',
|
|
'flow',
|
|
'other',
|
|
'bun',
|
|
'php',
|
|
'rust',
|
|
'ansible',
|
|
'csharp',
|
|
'nu',
|
|
'java',
|
|
'ruby',
|
|
'rlang',
|
|
'duckdb'
|
|
// for related places search: ADD_NEW_LANG
|
|
]
|
|
/** Strip cache_clear, null/undefined values, empty arrays and empty objects from a worker group config. */
|
|
export function cleanWorkerGroupConfig(config: Record<string, any>): Record<string, any> {
|
|
const { cache_clear, ...rest } = config
|
|
const cleaned: Record<string, any> = {}
|
|
for (const [k, v] of Object.entries(rest)) {
|
|
if (v == null) continue
|
|
if (Array.isArray(v) && v.length === 0) continue
|
|
if (typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length === 0) continue
|
|
cleaned[k] = v
|
|
}
|
|
return cleaned
|
|
}
|
|
|
|
export const nativeTags = [
|
|
'nativets',
|
|
'postgresql',
|
|
'mysql',
|
|
'graphql',
|
|
'snowflake',
|
|
'mssql',
|
|
'bigquery',
|
|
'oracledb'
|
|
]
|