Repository navigation
Releases
v2.24.0-serval.1 — helm subprocess reuse (-42% render)
Serval build of Skaffold: upstream v2.24.0 (b0d643a5b) plus one performance
commit. No behaviour changes — rendered output is byte-identical to upstream.
What this fixes
Skaffold does two pieces of per-call work that are invariant for the lifetime of
the process, paid once per release on the deploy path and once per config
on the render path:
- The Helm v4 post-renderer plugin. The generated plugin manifest depends only
on the Skaffold binary path — everything that varies per release (labels, image
replacement, debug settings, kubeconfig) travels inSKAFFOLD_CMDLINEat
invocation time. So the plugin installed for release N is byte-identical to the
one for release N+1 apart from its random name. It is now installed once and
removed at process shutdown. helm version. The helm binary on PATH cannot change mid-run. Memoized.
This only affects Helm >= 4.0.0-beta.1. On Helm v3 upstream passes
--post-renderer <executable> and installs no plugin at all, which is why the
cost is invisible to most Skaffold users.
Measured
On a 21-config / 21-release monorepo, skaffold render, warm caches, alternating
A/B against the same commit, 6 runs each, machine at load ~9:
| upstream v2.24.0 | this build | |
|---|---|---|
| helm subprocesses | 107 | 45 (plugin 42→2, version 23→1) |
| wall clock (mean) | 33.63s | 19.61s |
−14.0s, −42%. The distributions do not overlap: upstream 32.01–35.21s, this
build 19.03–20.70s. Rendered output byte-identical (179,484 bytes).
Install
# mise.toml
"ubi:kvey/skaffold" = "2.24.0-serval.1"Binaries are provided for darwin/linux on amd64/arm64. skaffold version reports
v2.24.0-serval.1, which satisfies version gates expecting >= v2.17.0.
Upstream status
The underlying issue — Helm releases rendered and deployed serially — is
#8363 (open, P3)
and #5417 (closed,
P3), both acknowledged and unstaffed since 2021. The per-release plugin churn
addressed here appears unreported upstream, and is cleanly separable into two
commits for a PR.