Stamp the git tag or short commit into the binary (closes #10)
check / check (push) Failing after 3s

rtnetmon had no version. main.Version is now set at link time and logged
in the first startup line. The Dockerfile takes it from the VERSION build
argument when one is given, otherwise from `git describe --tags --always`
of the .git the build context now carries, and fails the build if the
context carries .git and no version comes out. .dockerignore follows the
canonical copy: .git is sent, .git/config, which can hold a credential,
is not.

Model: opus-5-5
This commit is contained in:
2026-10-02 06:24:22 +00:00
parent 769511dec2
commit 51d2bd24df
5 changed files with 55 additions and 21 deletions
+15 -1
View File
@@ -34,4 +34,18 @@ WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /rtnetmon ./cmd/rtnetmon/
# The version stamped into the binary: the VERSION build argument when one
# is given, otherwise `git describe --tags --always` of the .git the build
# context carries: the tag on a tagged commit, tag-N-gHASH on a commit after
# one, the short commit when no tag is reachable. git ships in this base
# image. A context that carries .git and still yields no version fails the
# build. With neither, as from a source tarball, the binary reports dev.
ARG VERSION
RUN version="${VERSION:-$(git describe --tags --always)}"; \
if [ -e .git ] && { [ -z "$version" ] || [ "$version" = dev ] || \
[ "$version" = unknown ]; }; then \
echo "no version could be derived although the build context carries .git" >&2; \
exit 1; \
fi; \
CGO_ENABLED=0 go build -trimpath -ldflags="-X main.Version=${version:-dev}" \
-o /rtnetmon ./cmd/rtnetmon/