Skip to main content

W'xOps Portal v0.4.1 — Darlane Sync Improvements & CLI Download Proxy

Xeus Nguyen
Platform Engineer

v0.4.1 is a focused patch on top of the Darlane + CLI release from v0.4.0. It addresses the most-reported developer pain point (darlane sync silently ignoring deleted files), hardens the sync session against pod restarts, and adds an authenticated CLI download proxy through the portal so developers never need direct Gitea credentials.

wxops darlane sync — Delete Propagation Fix

The biggest change in this release: when you deleted a file locally during a darlane sync session, the file persisted in the pod indefinitely. The watcher only handled Write, Create, and Rename events — Remove was silently dropped.

Now: deletes are tracked in a separate map and flushed to the pod as a kubectl exec rm -rf call on the next debounce tick. Delete flushes always run before create/write flushes, so a file that's deleted and immediately recreated lands in the pod in the correct order.

✗ deleted 2 file(s): old_handler.go, old_util.go
↑ synced 1 file(s): handler.go

Initial Full Sync on Startup

darlane sync now performs a full sync of all non-excluded files immediately after the watcher starts. This means the pod is always in a clean state from the moment the session begins — no more "why doesn't the pod have my latest code?" on a fresh debug session.

wxops darlane sync payment-api
# → initial sync: 14 file(s)
# watching ./src → tenant-wxops/payment-api-darlane:/app

Suppress with --no-initial-sync if you want the old behaviour.

Max-Debounce Cap (2 s)

The old debounce reset on every event. During a git checkout or a build emitting hundreds of files, the timer kept resetting and nothing flushed until the burst was completely done — sometimes 10–30 seconds of no syncs.

The debounce now has a 2-second hard cap: even if events are still arriving, the flush fires at the 2-second mark. Large file bursts get their first sync in ≤ 2 s, not after the burst finishes.

kubectl Retry

Pods restart during development. Both sync and delete calls now retry up to 3 times with a 2-second delay between attempts:

⚠ pod not ready, retrying (1/3)…
⚠ pod not ready, retrying (2/3)…
↑ synced 3 file(s): main.go, handler.go, util.go

Graceful SIGINT / SIGTERM

Ctrl-C now flushes any pending batch before exiting instead of dropping it:

^C
stopped.

CLI Download Proxy

Developers previously needed direct Gitea access to download the wxops binary. v0.4.1 adds an authenticated download endpoint to the portal backend:

GET /api/v1/cli/download/:platform

The endpoint calls the Gitea releases API with the portal's service-account token and streams the latest binary back to your authenticated session. The CLI download card on the overview page now links directly to this endpoint — no Gitea credentials required.

Supported platforms: linux-amd64, linux-arm64, darwin-amd64, darwin-arm64, windows-amd64.

A 502 upstream sent too big header error on /auth/callback in Kubernetes deployments was traced to nginx's default 4 kB proxy buffer being too small for the AES-256-GCM Pinniped session cookie (id_token + access_token + refresh_token ≈ 3–4 kB). Fixed by adding proxy_buffer_size 32k to the /auth/ location block.

Also fixed: the Secure cookie flag is now set correctly from the X-Forwarded-Proto header rather than hardcoded, so production HTTPS deployments behind an Ingress controller work without config changes.

See the full Architecture docs or browse the Service Catalog guide to get started with v0.4.1.