Skip to content

feat: report the build version at runtime; add release automation - #3

Merged
flaccid merged 2 commits into
mainfrom
ci/release-automation-and-version
Aug 25, 2026
Merged

feat: report the build version at runtime; add release automation#3
flaccid merged 2 commits into
mainfrom
ci/release-automation-and-version

Conversation

@flaccid

@flaccid flaccid commented Aug 25, 2026

Copy link
Copy Markdown
Member

Closes #2. Part of kube-workspaces/deploy#2.

Version at runtime

Nothing recorded which version was running. The Dockerfile built with no
-ldflags, there was no version variable, and no endpoint reported one — so the
only signal was the image tag, which is latest in the default manifests and
therefore says nothing. Reproducing a bug report meant guessing the build.

Version, commit and build date are now compiled in and surfaced:

Surface Output
--version v0.3.0 (commit abc1234, built …, linux/amd64, go1.26.7)
startup log same, so a pod is identifiable from its logs alone
GET /version JSON incl. Go version and platform
/healthz, /readyz gain a version field

Defaults are dev/unknown, so a plain go build still works.

The existing "status" field in the health responses stays first and unchanged
— the container probes and the deployment smoke tests both match on it.

debug.ReadBuildInfo() is not a substitute here: it reports (devel) for a
build that is not driven by go install module@version, which is the case for
the container build.

The workflow passes VERSION from docker/metadata-action rather than
reconstructing it, so the image tag and the reported version cannot drift.

Release automation

Adds the release workflow and .github/release.yml categories, identical across
the five repositories. The note preamble comes from a shared generator in the
deploy repo which states explicitly when a release has no functional changes —
relevant here, since a component is often tagged only to hold the platform
version line.

The workflow defaults to a dry run so notes can be reviewed before tagging.

Verification

  • A real `docker build --build-arg` produces a binary reporting
    `v0.3.0-test (commit deadbeef, …)`
  • Deployed to kind: `/version`, `/healthz` and `/readyz` all serve it, and the
    deployment smoke suite still passes 35/35

Part of kube-workspaces/deploy#2.

Adds a release workflow and the .github/release.yml categories used to generate
notes, both identical across the five repositories so a reader moving between
them sees the same structure.

The note preamble comes from a shared generator in the deploy repo, which
classifies the commits since the last tag. That matters here because this
component often has nothing but CI and docs changes in a cycle and still gets
tagged to hold the platform version line — in that case the notes say so
explicitly rather than leaving someone to infer it from a list of CI commits.

The workflow defaults to a dry run so the notes can be reviewed before anything
is tagged.
Closes #2.

Nothing recorded which version was running. The Dockerfile built with no
-ldflags, there was no version variable, and no endpoint reported one — so the
only signal was the image tag, which is `latest` in the default manifests and
therefore says nothing. Reproducing a bug report meant guessing the build.

Version, commit and build date are now compiled in, defaulting to
dev/unknown so a plain `go build` still works, and surfaced three ways:

  --version          prints and exits
  startup log        so a pod is identifiable from its logs alone
  GET /version       JSON, including Go version and platform

`/healthz` and `/readyz` also gain a version field. The existing "status" field
stays first and unchanged — the container probes and the deployment smoke tests
both match on it.

Note debug.ReadBuildInfo() is not a substitute: it reports "(devel)" for a build
that is not driven by `go install module@version`, which is the case here.

The workflow passes VERSION from docker/metadata-action rather than
reconstructing it, so the image tag and the reported version cannot drift.

Verified end to end: a real docker build with --build-arg produces a binary
reporting "v0.3.0-test (commit deadbeef, ...)", and deployed to kind the
endpoints serve it while the smoke suite still passes 35/35.
@flaccid flaccid added enhancement New feature or request ci CI, build and release tooling labels Aug 25, 2026
@flaccid
flaccid merged commit 49ea011 into main Aug 25, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI, build and release tooling enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bake the version into the binary and expose it at runtime

1 participant