8000 Releases · kvey/skaffold · GitHub
[go: up one dir, main page]

Skip to content

Releases

v2.24.0-serval.1 — helm subprocess reuse (-42% render)

Choose a tag to compare

@kvey kvey released this 07 Aug 02:54

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 in SKAFFOLD_CMDLINE at
    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.

0