Files
windmill/docs/enterprise.md
hugocasa 9de38f9a09 feat(forks): handle triggers and schedules in wmill workspace merge (#9023)
* feat(forks): handle triggers and schedules in wmill workspace merge

Closes #9001. Brings CLI parity with the merge UI by routing trigger and
schedule diffs through the existing workspace_diff tally infrastructure
and lifting the deploy logic into the shared windmill-utils-internal
module.

- Backend: extend tally + compare to all 10 trigger kinds + schedule;
  new compare_two_trigger_or_schedule helper using to_jsonb minus runtime
  ignore set; CompareSummary gains schedules_changed/triggers_changed.
- Operational-state invariant: fork operations never flip target's
  mode/enabled. Triggers strip mode/enabled in both UI and CLI deploy
  payloads (preserved by is_mode_unspecified on backend). Schedules drop
  the setScheduleEnabled mirror entirely on merge — EditSchedule lacks
  enabled by design.
- Shared module: DeployKind extended with schedule + per-kind triggers;
  DeployProvider gains per-kind dispatch methods.
- Frontend: ~600 lines of client-side trigger-diff machinery deleted;
  rows flow through comparison.diffs like every other kind. Diff drawer
  returns full GET response stripped of runtime fields, matching backend
  semantics. Default selection excludes triggers/schedules (opt-in).
- CLI (merge.ts): per-kind provider, GCP-specific transforms (audience
  reset, base_endpoint with /api stripped to match frontend), summary
  table rows for Schedules/Triggers, default-deselect mirroring the UI.
- Bumps windmill-utils-internal to 1.5.0 (new exports for trigger
  per-kind dispatch); frontend depends on ^1.5.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(enterprise): clarify [ee] prefix applies whenever an EE companion PR exists

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: update ee-repo-ref to 6ee680c25e3413d928fc22002be6deb118092668

This commit updates the EE repository reference after PR #557 was merged in windmill-ee-private.

Previous ee-repo-ref: ad35a056627656fd426fb19856ea945955d4727f

New ee-repo-ref: 6ee680c25e3413d928fc22002be6deb118092668

Automated by sync-ee-ref workflow.

* fix(forks): preserve target state on merge update, mirror source on create

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(forks): strip server-managed trigger fields and honor --include with --skip-conflicts

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2026-05-07 13:29:10 +00:00

2.3 KiB

Enterprise (EE) Development

File Conventions

  • Enterprise files use the *_ee.rs suffix
  • Source lives in windmill-ee-private (sibling repo), symlinked into each crate's src/
  • _ee.rs files are gitignored in the main windmill repo — tracked only in windmill-ee-private
  • Use feature flags: #[cfg(feature = "enterprise")] for enterprise logic
  • The private feature flag gates compilation of *_ee.rs files
  • The license feature flag gates features that require a valid license key at runtime
  • Isolate enterprise code in separate modules

Finding the EE Repo

  • Standard location: ~/windmill-ee-private
  • Worktree location: ~/windmill-ee-private__worktrees/<branch-name>/

Detecting EE Changes

The *_ee.rs files in the windmill repo are symlinks — changes won't appear in git diff of the windmill repo. Check the EE repo directly: git -C <ee-path> status --short

EE PR Workflow (MUST DO whenever the change has an EE companion PR)

If your work requires any change in windmill-ee-private (modifying *_ee.rs files, adding new ones, adjusting EE-only modules, etc.) — i.e. you need to open a companion PR on windmill-ee-private — then the windmill (OSS) PR counts as an EE PR even when its own git diff only touches backend/ee-repo-ref.txt. The symlinked *_ee.rs files won't appear in the OSS diff, but the OSS build pulls them in via the EE ref, so reviewers need to know.

  1. Prefix the windmill PR title with [ee]: [ee] <type>: <description>
  2. Create a matching branch in windmill-ee-private (same branch name)
  3. Commit and push the _ee.rs changes in that branch
  4. Create a companion PR on windmill-ee-private with a link to the windmill PR (no [ee] prefix on this one)
  5. Update ee-repo-ref.txt: Run bash write_latest_ee_ref.sh from backend/
    • Verify it wrote the correct commit hash from your branch, not from main (the script may fall back to ~/windmill-ee-private on main)
    • If wrong, manually write the correct hash
  6. Commit ee-repo-ref.txt in the windmill repo so CI picks up the correct EE ref

Validation

# EE code (always include private to compile *_ee.rs files)
cargo check --features enterprise,private

# EE code that also requires license validation
cargo check --features enterprise,private,license