First release with the VCS archive streaming + caching pipeline. Operators upgrading from v0.19 must ensure their cluster's default storage class (or the explicit api.ephemeralStorage.storageClass they pin) has a Delete reclaim policy — see breaking-change note below.
Highlights
- VCS poller streams tarballs to disk — large monorepos no longer OOM-kill the api pod. The poll cycle pipeline (download → strip → upload) writes through a per-pod ephemeral PVC instead of buffering whole tarballs in process memory.
- Single-flight tarball cache — concurrent workspace polls of the same
(repo, sha)coalesce on one download via in-processasyncio.Lock, then re-use the result via an object-storage cache (vcs_archives/{conn_id}/{owner}/{repo}/{sha}.tar.gz). Cuts both GitHub API quota usage and per-cycle latency on multi-workspace monorepos. - Agent pool list now shows status, not listener counts — replaces the misleading "1/1" display. Listener detail page gains a Replicas column derived from per-pod heartbeat tracking. Listener heartbeats now carry
pod_name.
Breaking changes
- New
api.ephemeralStorageHelm block (defaultenabled: true,size: 50Gi). Each api pod replica gets its own generic-ephemeral-volume PVC for streaming VCS tarballs. Pick astorageClasswhose reclaim policy isDelete—Retain-flavoured classes (e.g. AWS EBSxfs-retain) leak PVs on every pod restart. See docs/deployment.md for AWS EKS / k3s guidance. - Pool JSON drops
listener-summary— replaced bystatus: "online" | "offline"onGET /api/v2/organizations/default/agent-poolsandGET /api/v2/agent-pools/{id}. The Terraform provider doesn't read this field, but external integrators hitting the API directly must update. - Listener join token defaults changed in v0.19 carry through unchanged (
max_uses=2, 1h expiry).
Bug fixes
- VCS poller no longer leaves "Run canceled" statuses on the previous SHA when a new commit lands without queueing a new run for the new SHA — the runs that started on the old SHA are now properly cancelled and the new SHA gets fresh runs.
- Listener pod replicas are tracked individually via per-pod TTL keys, so the agent pool detail page can show the actual fleet size instead of always reporting one listener per Deployment.
Status
Beta — battle-tested in a multi-cluster operator deployment. The streaming + cache changes were driven by a real OOM incident and verified end-to-end before tagging.
Full Changelog: v0.19.0...v0.20.0