* feat(cli): add GitHub Actions CI and raw app sync tests - Add CLI tests GitHub Action that runs on Linux and Windows - Add build check job that runs on CLI and openapi.yaml changes - Uses Rust cargo backend instead of Docker for better CI compatibility - Add cargo_backend.ts and test_backend.ts for test infrastructure - Fix Windows path separator bug in raw_apps.ts (use "/" for relative paths) - Fix PostgreSQL URL parsing in cargo_backend.ts - Update tests to use gitBranches format instead of deprecated overrides - Add raw_app_sync.test.ts for raw app sync workflow testing (ignored for now - needs EE) - Skip tests that require EE features (git sync settings, raw apps) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): Fix Windows path compatibility issues in tests - Use fromFileUrl() in cargo_backend.ts for proper Windows path handling - Normalize path separators to forward slashes in resource_folders.ts - Fix readDirRecursive to return normalized paths in test helper - Use forward slashes consistently in buildMetadataPath and detection functions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): Use SEP in test assertions instead of modifying logic - Revert resource_folders.ts to use SEP as intended - Update test assertions to use SEP for platform-specific paths - Keep readDirRecursive normalization for consistent test comparisons Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): Use SEP for all path separators in test assertions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): Use resolve() for proper cross-platform path handling in cargo_backend String concatenation with path separators creates malformed paths on Windows. Use path.resolve() instead for proper cross-platform path resolution. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(backend): Add cfg attributes for Windows compatibility - Add #[cfg(unix)] to anyhow::anyhow import (only used in unix cfg block) - Add #[cfg(not(windows))] to parse_file function (uses cat, only for cgroups) - Remove unused std::io import, use std::io::Result directly Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Windows compilation + convert integration tests to withTestBackend - Fix unused import SYSTEM_ROOT in csharp_executor.rs on Windows by requiring both windows and csharp feature - Fix unused variable id in handle_child.rs on Windows by adding #[allow(unused_variables)] since id is only used in cfg(unix) code - Convert all RUN_INTEGRATION_TESTS dependent tests in sync_pull_push.test.ts to use withTestBackend pattern for automatic backend setup Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: configurable test features with CI_MINIMAL_FEATURES env var - Default: full features (zip, private, enterprise) for local development - CI mode: minimal features (zip only) when CI_MINIMAL_FEATURES=true - Add shouldSkipOnCI() helper for tests requiring EE features - Update EE-dependent tests to use shouldSkipOnCI() - Add test instructions to cli/README.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: enable raw app tests (not EE-dependent) Raw apps work with minimal features. 2 tests pass, 2 have test logic bugs to investigate separately: - "delete file and push" - file deletion not syncing correctly - "dry-run push shows expected changes" - JSON output parsing issue Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: gate cgroups module to Linux only cgroups are Linux-specific, the module was causing dead_code warnings on Windows compilation. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(ci): add CI_MINIMAL_FEATURES env var to CLI tests workflow Set CI_MINIMAL_FEATURES=true in both Linux and Windows test jobs so the backend compiles with minimal features (zip only) and EE-dependent tests self-skip via shouldSkipOnCI(). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): raw app tests and backend startup timing - Add 5s delay after backend ready for migrations to complete - Fix dry-run JSON output parsing (handle pretty-printed JSON) - Temporarily ignore "delete file" test (needs isSuperset fix) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): raw app file deletion sync - Add deepEqual check for files in raw_apps.ts isSuperset comparison - Handle raw_app file deletions in sync.ts by re-pushing the entire app - Fix test to remove CSS import before deleting the file When deleting a file from a raw app, the sync now properly updates the backend with the new file list (excluding the deleted file). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): Windows path separators in tests Normalize paths for cross-platform comparison by converting backslashes to forward slashes before path assertions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cli): normalize featurePaths in multi_instance_workspace test Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(cli): add mixed case paths sync tests for Windows compatibility Add comprehensive tests for sync pull/push with capitalized folder paths to catch Windows case-insensitivity issues: - Scripts in f/MyFolder/MyScript - Flows in f/MyFlows/DataProcessor - Apps in f/MyApps/Dashboard - Variables in f/MyVars/ApiKey - Deeply nested paths with mixed case - Multiple resources in same capitalized folder - CamelCase folder names with numbers Each test verifies the full pull -> modify -> push -> verify cycle. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(cli): add idempotency check to mixed case paths tests After each push, pull again with --dry-run --json-output and verify that no changes are detected. This ensures the sync is stable and catches issues where pull/push cycles cause spurious diffs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
136 lines
3.0 KiB
Markdown
136 lines
3.0 KiB
Markdown
# Windmill CLI
|
|
|
|
A simple CLI allowing interactions with windmill from the command line.
|
|

|
|
|
|
You can find more information in
|
|
[Windmill Docs](https://www.windmill.dev/docs/advanced/cli)
|
|
|
|
## Installation
|
|
|
|
Install the `wmill` CLI tool using `npm install -g windmill-cli`.
|
|
|
|
Update to the latest version using `wmill upgrade`.
|
|
|
|
## Workspaces
|
|
|
|
To get started run `wmill workspace add` or use the instructions from the
|
|
workspace settings.
|
|
|
|
## Running Flows & Scripts
|
|
|
|
Run a script or flow using `wmill flow/script run u/username/path/to/script` and
|
|
pass any inputs using `--data` + Inputs specified as a JSON string or a file
|
|
using `@ <filename>` or stdin using @-.
|
|
|
|
Curl-style syntax using `-d @-` for stdin or `-d @<filename>` is also supported.
|
|
|
|
Flow Steps and Logs will be streamed during execution automatically.
|
|
|
|

|
|
|
|
## Pushing Resources, Scripts & More
|
|
|
|
The CLI can push specifications to a windmill instance. See the
|
|
[examples/](./examples/) folder for formats.
|
|
|
|
## Switch to a different workspace
|
|
|
|
```
|
|
wmill workspace switch <workspace_name>
|
|
```
|
|
|
|
## Sync a workspace
|
|
|
|
### Pull
|
|
|
|
```
|
|
wmill sync pull
|
|
```
|
|
|
|
### Push
|
|
|
|
```
|
|
wmill sync push
|
|
```
|
|
|
|
We recommend using the --yaml option to use yaml instead of json as the encoding
|
|
format. Yaml will be made the default soon.
|
|
|
|
### Pushing individual files
|
|
|
|
You can push individual resources using
|
|
`wmill <type> push <file_name> \<remote_name\>`. This does not require a special
|
|
folder layout or file name, as this is given at runtime.
|
|
|
|
## Listing
|
|
|
|
All commands support listing by just not providing a subcommand, ie
|
|
`wmill script` will result in a list of scripts. Some allow additional options,
|
|
learn about this by specifying `--help`.
|
|
|
|
## User Management
|
|
|
|
You can add & remove users via `wmill user add/remove`, and list them using
|
|
`wmill user`
|
|
|
|
## Pulling
|
|
|
|
You can pull the entire workspace using `wmill pull`
|
|
|
|
## Completion
|
|
|
|
The CLI comes with completions out of the box via `wmill completions <shell>`.
|
|
(Via [cliffy](https://cliffy.io/))
|
|
|
|
### Bash
|
|
|
|
To enable bash completions add the following line to your `~/.bashrc`:
|
|
|
|
```
|
|
source <(wmill completions bash)
|
|
```
|
|
|
|
### Fish
|
|
|
|
To enable fish completions add the following line to your
|
|
`~/.config/fish/config.fish`:
|
|
|
|
```
|
|
source (wmill completions fish | psub)
|
|
```
|
|
|
|
### Zsh
|
|
|
|
To enable zsh completions add the following line to your `~/.zshrc`:
|
|
|
|
```
|
|
source <(wmill completions zsh)
|
|
```
|
|
|
|
## Development
|
|
|
|
### Running Tests
|
|
|
|
**Prerequisites:**
|
|
- PostgreSQL running locally (default: `postgres://postgres:changeme@localhost:5432`)
|
|
- Rust toolchain installed
|
|
|
|
**Run tests locally (full features):**
|
|
|
|
```bash
|
|
deno test --allow-all --no-check
|
|
```
|
|
|
|
**Run tests in CI mode (minimal features, skips EE tests):**
|
|
|
|
```bash
|
|
CI_MINIMAL_FEATURES=true deno test --allow-all --no-check
|
|
```
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `CI_MINIMAL_FEATURES` | Set to `true` to skip EE-dependent tests |
|
|
| `DATABASE_URL` | PostgreSQL connection string |
|
|
| `EE_LICENSE_KEY` | Enterprise license key for EE features |
|