Terrapod is a free, open-source platform replacement for Terraform Enterprise. This release hardens run concurrency and brings the API's upload path under the memory budget that keeps the control plane stable under large states and plans.
Highlights
- Per-workspace run serialization — apply-capable (plan+apply) runs now execute one at a time per workspace. A newer run waits until the in-flight one reaches a terminal state, so two mutating runs can never race the same state. Plan-only runs (speculative PR plans, CLI
plan, drift checks) are exempt and still run concurrently. - Auto-discard of superseded runs — when a newer apply-capable run is queued, older un-applied runs on the same workspace are resolved automatically: a
plannedrun awaiting confirmation isdiscarded,pending/queuedruns arecanceled. A stale plan can no longer apply outdated config, and the workspace lock a staleplannedrun held is released so the newest run can dispatch. In-flight (confirmed/applying) runs are never superseded. - Manual lock blocks apply — a manually-locked workspace is now an operator gate on applies as well as a state lock: apply-capable runs won't start, confirm returns 409, and auto-apply runs settle in
plannedto wait for an unlock. Plan-only runs are never blocked. - Memory-safe upload streaming — runner/manual state, plan-JSON, configuration, and module-tarball uploads now stream straight to storage (or to a capped tempfile on the attached PVC for parse-requiring uploads) instead of buffering the whole body in RAM, removing an OOM risk on large states and monorepo plans.
Bug Fixes
- Audit-log Clear button now reliably resets the view — it previously closed over pre-clear filter values and could appear to do nothing when the prior filter had no matches.
Status
Beta — run-concurrency guarantees and the upload memory budget are now enforced server-side across VCS, CLI, and UI run sources.
Full Changelog: v0.38.4...v0.39.0