mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-22 00:01:34 +00:00
05abf6d5aa
* feat(cli): deduplicate identical script lockfiles into one per language * test: pin shared lockfile path classification * fix(cli): never delete a lockfile the dedup plan also writes * fix(cli): plan lockfile dedup from the whole tree, not the sync scope * fix(cli): keep dedup out of dry runs and stop hiding scripts from its scan * test: pin which files the shared-lock scan counts as readers * fix(cli): validate shared-lock refs and let the majority keep its file * fix(cli): snapshot shared-lock ownership before regeneration moves it * fix(cli): address dedup review nits (dry-run push, json shape, scan scope) * refactor(cli): put shared lockfiles in a top-level locks/ directory * fix(cli): claim only the shared lock names windmill writes, and only when on * fix(cli): read the lock field itself, and count only scripts sync reads * fix(cli): parse metadata by its real format and lint from the sync root * fix(cli): never re-hash a script whose generation failed * fix(cli): share sync's walk exclusions and fail closed on unreadable dirs * fix(cli): keep a lockfile the metadata on disk still references * fix(cli): decide a lock is unread from the metadata field sync reads * refactor(cli): name shared lockfiles after the dependency file they resolve * fix(cli): carry shared lockfiles a narrowed sync cannot speak for * fix(cli): move a shared lockfile when its dependency file moved, not on a head count * fix(cli): let the many correct a shared lockfile a lone variant planted * fix(cli): read why a lock differs from the stamp the worker writes into it * fix(cli): let an agreeing majority speak whatever the stamps say * docs(cli): count the disjuncts the comment introduces * fix(cli): keep a private lock for any script the worker locks differently * fix(cli): match annotations by the worker's own names, not by shape * fix(cli): recognize the py: interpreter pin the macro does not cover * fix(cli): let the map speak for dependency-file deletions * perf(cli): group lock entries without rebuilding the group per insert * fix(cli): defer shared-lock deletions until the metadata has settled * fix(cli): decide shared-lock readers by the lock field, failing closed * fix(cli): read folded lock refs and keep locks read by unparseable metadata * refactor(cli): one shared-lock reader scan, shared by the pull and push paths * fix(cli): keep nested dependency set names out of shared lockfiles * fix(cli): drop a shared-lock scan gate that no real repo took
570 lines
18 KiB
JSON
570 lines
18 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "wmill.yaml",
|
|
"description": "Windmill CLI configuration file. Full reference: wmill config",
|
|
"type": "object",
|
|
"properties": {
|
|
"defaultTs": {
|
|
"type": "string",
|
|
"enum": [
|
|
"bun",
|
|
"deno"
|
|
],
|
|
"description": "Default TypeScript runtime for new scripts"
|
|
},
|
|
"includes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Glob patterns for files to include in sync"
|
|
},
|
|
"extraIncludes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Additional glob patterns merged with includes (useful in workspace overrides)"
|
|
},
|
|
"excludes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Glob patterns for files to exclude from sync"
|
|
},
|
|
"skipVariables": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing variables"
|
|
},
|
|
"skipResources": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing resources"
|
|
},
|
|
"skipResourceTypes": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing resource types"
|
|
},
|
|
"skipSecrets": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing secrets (true by default for security)"
|
|
},
|
|
"skipScripts": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing scripts"
|
|
},
|
|
"skipFlows": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing flows"
|
|
},
|
|
"skipApps": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing apps"
|
|
},
|
|
"skipFolders": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing folders"
|
|
},
|
|
"skipWorkspaceDependencies": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing workspace dependencies"
|
|
},
|
|
"skipDatatableMigrations": {
|
|
"type": "boolean",
|
|
"description": "Skip syncing data table SQL migrations"
|
|
},
|
|
"includeSchedules": {
|
|
"type": "boolean",
|
|
"description": "Include schedules in sync"
|
|
},
|
|
"includeTriggers": {
|
|
"type": "boolean",
|
|
"description": "Include triggers (http, websocket, kafka, etc.) in sync"
|
|
},
|
|
"includeUsers": {
|
|
"type": "boolean",
|
|
"description": "Include workspace users in sync"
|
|
},
|
|
"includeGroups": {
|
|
"type": "boolean",
|
|
"description": "Include workspace groups in sync"
|
|
},
|
|
"includeSettings": {
|
|
"type": "boolean",
|
|
"description": "Include workspace settings in sync"
|
|
},
|
|
"includeKey": {
|
|
"type": "boolean",
|
|
"description": "Include encryption key in sync"
|
|
},
|
|
"parallel": {
|
|
"type": "integer",
|
|
"description": "Number of parallel operations during sync"
|
|
},
|
|
"locksRequired": {
|
|
"type": "boolean",
|
|
"description": "Require lock files for all scripts"
|
|
},
|
|
"dedupeLockfiles": {
|
|
"type": "boolean",
|
|
"description": "Share one lockfile per workspace dependency file (locks/<depfile>.lock), instead of an identical .script.lock per script"
|
|
},
|
|
"lint": {
|
|
"type": "boolean",
|
|
"description": "Run linting before push"
|
|
},
|
|
"plainSecrets": {
|
|
"type": "boolean",
|
|
"description": "Handle secrets as plain text (not recommended)"
|
|
},
|
|
"message": {
|
|
"type": "string",
|
|
"description": "Default commit message for sync operations"
|
|
},
|
|
"promotion": {
|
|
"type": "string",
|
|
"description": "Branch name to use promotion overrides from during sync"
|
|
},
|
|
"skipBranchValidation": {
|
|
"type": "boolean",
|
|
"description": "Skip validation that current git branch matches a configured branch"
|
|
},
|
|
"nonDottedPaths": {
|
|
"type": "boolean",
|
|
"description": "Use __flow/__app/__raw_app suffixes instead of .flow/.app/.raw_app"
|
|
},
|
|
"syncBehavior": {
|
|
"type": "string",
|
|
"description": "Sync behavior version — controls ownership handling during push/pull (v1: preserve permissioned_as on update, strip on_behalf_of_email on pull)"
|
|
},
|
|
"codebases": {
|
|
"type": "array",
|
|
"description": "Codebase bundling configurations for shared libraries",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"relative_path": {
|
|
"type": "string",
|
|
"description": "Path to the codebase directory"
|
|
},
|
|
"includes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Glob patterns for files to include in bundle"
|
|
},
|
|
"excludes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Glob patterns for files to exclude from bundle"
|
|
},
|
|
"format": {
|
|
"type": "string",
|
|
"enum": [
|
|
"cjs",
|
|
"esm"
|
|
],
|
|
"description": "Bundle output format"
|
|
},
|
|
"external": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Dependencies to leave unbundled (externals)"
|
|
},
|
|
"assets": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"from": {
|
|
"type": "string"
|
|
},
|
|
"to": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"from",
|
|
"to"
|
|
]
|
|
},
|
|
"description": "Static files to copy into the bundle"
|
|
},
|
|
"customBundler": {
|
|
"type": "string",
|
|
"description": "Path to a custom bundler script (replaces esbuild)"
|
|
},
|
|
"inject": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Files to inject into every entry point"
|
|
},
|
|
"define": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "Compile-time constant definitions"
|
|
},
|
|
"banner": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "Text to prepend to output files by type"
|
|
},
|
|
"loader": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "esbuild loader overrides by extension"
|
|
}
|
|
},
|
|
"required": [
|
|
"relative_path"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"workspaces": {
|
|
"type": "object",
|
|
"description": "Map workspace names to Windmill instances and per-workspace sync overrides",
|
|
"properties": {
|
|
"commonSpecificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"gitBranch": {
|
|
"type": "string",
|
|
"description": "Git branch name (defaults to the workspace name/key)"
|
|
},
|
|
"workspaceId": {
|
|
"type": "string",
|
|
"description": "Workspace ID to sync with (defaults to the workspace name/key)"
|
|
},
|
|
"baseUrl": {
|
|
"type": "string",
|
|
"description": "Windmill instance URL for this workspace"
|
|
},
|
|
"overrides": {
|
|
"type": "object",
|
|
"description": "Override any top-level sync option for this workspace"
|
|
},
|
|
"promotionOverrides": {
|
|
"type": "object",
|
|
"description": "Overrides applied when using --promotion flag"
|
|
},
|
|
"specificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"gitBranches": {
|
|
"type": "object",
|
|
"description": "[Deprecated] Use 'workspaces' instead. Map git branches to workspaces.",
|
|
"properties": {
|
|
"commonSpecificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"gitBranch": {
|
|
"type": "string",
|
|
"description": "Git branch name (defaults to the workspace name/key)"
|
|
},
|
|
"workspaceId": {
|
|
"type": "string",
|
|
"description": "Workspace ID to sync with (defaults to the workspace name/key)"
|
|
},
|
|
"baseUrl": {
|
|
"type": "string",
|
|
"description": "Windmill instance URL for this workspace"
|
|
},
|
|
"overrides": {
|
|
"type": "object",
|
|
"description": "Override any top-level sync option for this workspace"
|
|
},
|
|
"promotionOverrides": {
|
|
"type": "object",
|
|
"description": "Overrides applied when using --promotion flag"
|
|
},
|
|
"specificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"environments": {
|
|
"type": "object",
|
|
"description": "[Deprecated] Use 'workspaces' instead.",
|
|
"properties": {
|
|
"commonSpecificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"gitBranch": {
|
|
"type": "string",
|
|
"description": "Git branch name (defaults to the workspace name/key)"
|
|
},
|
|
"workspaceId": {
|
|
"type": "string",
|
|
"description": "Workspace ID to sync with (defaults to the workspace name/key)"
|
|
},
|
|
"baseUrl": {
|
|
"type": "string",
|
|
"description": "Windmill instance URL for this workspace"
|
|
},
|
|
"overrides": {
|
|
"type": "object",
|
|
"description": "Override any top-level sync option for this workspace"
|
|
},
|
|
"promotionOverrides": {
|
|
"type": "object",
|
|
"description": "Overrides applied when using --promotion flag"
|
|
},
|
|
"specificItems": {
|
|
"type": "object",
|
|
"description": "Items to sync per-workspace (stored as <file>.<workspaceName>.<type>.yaml on disk)",
|
|
"properties": {
|
|
"variables": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Variable path patterns to sync per-workspace"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Resource path patterns to sync per-workspace"
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Trigger path patterns to sync per-workspace"
|
|
},
|
|
"folders": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Folder path patterns to sync per-workspace"
|
|
},
|
|
"settings": {
|
|
"type": "boolean",
|
|
"description": "Whether to sync settings per-workspace"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|