Stamp the tag or short commit in a plain docker build (closes #166) #167

Merged
clawbot merged 1 commits from issue-166-docker-build-version into next 2026-10-02 06:01:42 +02:00
4 changed files with 34 additions and 9 deletions
+5 -1
View File
@@ -1,4 +1,8 @@
.git # .git is sent without its config. Without a VERSION build argument the
# stage that compiles runs `git describe --tags --always` on .git, which
# does not need .git/config; that file can hold a credential, such as a
# password in a remote URL or the token the CI checkout step stores there.
.git/config
.gitignore .gitignore
.DS_Store .DS_Store
.env* .env*
+17 -6
View File
@@ -43,12 +43,23 @@ COPY . .
RUN make test RUN make test
# VERSION is declared here, not earlier: a new value reruns only the # VERSION is declared here, not earlier: a new value reruns only the
# build, not script/bootstrap or the tests. CGO stays enabled for # build, not script/bootstrap or the tests. Given none, the version is
# govips; -trimpath keeps build paths out of the binary, and -s -w # `git describe --tags --always` of the .git in the build context (git
# leave out the symbol table and debug information. # comes from script/bootstrap): the tag on a tagged commit, tag-N-gHASH
ARG VERSION=dev # after one, the short commit when no tag is reachable. A context that
RUN CGO_ENABLED=1 GOTOOLCHAIN=auto go build -trimpath \ # carries .git and still yields no version fails the build; one without
-ldflags "-s -w -X main.Version=${VERSION}" \ # .git, as from a source tarball, stamps an empty version. CGO stays
# enabled for govips; -trimpath keeps build paths out of the binary, and
# -s -w leave out the symbol table and debug information.
ARG VERSION
RUN version="${VERSION:-$(git describe --tags --always)}"; \
if [ -e .git ] && { [ -z "$version" ] || [ "$version" = dev ] || \
[ "$version" = unknown ]; }; then \
echo "the build context carries .git but yields no version" >&2; \
exit 1; \
fi; \
CGO_ENABLED=1 GOTOOLCHAIN=auto go build -trimpath \
-ldflags "-s -w -X main.Version=${version}" \
-o /pixad ./cmd/pixad -o /pixad ./cmd/pixad
# Runtime stage # Runtime stage
+7
View File
@@ -29,6 +29,13 @@ P2: security: referer blacklist
# Completed Steps # Completed Steps
- 2026-10-02 a plain `docker build .` stamps the tag or short commit, not
`dev` (closes #166): `.dockerignore` lets `.git` into the build context,
without `.git/config`; with no `VERSION` build argument the `Dockerfile`
takes the version from `git describe --tags --always`, and fails the build if
the context carries `.git` and no version comes out; `ARG VERSION` has no
default; pixad logs its version, with its name and architecture, as its first
log line at startup.
- 2026-09-29 the container makes `/var/lib/pixa` usable by itself (closes - 2026-09-29 the container makes `/var/lib/pixa` usable by itself (closes
#159): `deploy/docker-entrypoint.sh` creates the directory if it is missing, #159): `deploy/docker-entrypoint.sh` creates the directory if it is missing,
gives the directory and everything in it to `pixad` when the directory or one gives the directory and everything in it to `pixad` when the directory or one
+4 -1
View File
@@ -56,6 +56,9 @@ func run(_ *cobra.Command, _ []string) {
middleware.New, middleware.New,
healthcheck.New, healthcheck.New,
), ),
fx.Invoke(func(*server.Server) {}), fx.Invoke(
func(log *logger.Logger) { log.Identify() },
func(*server.Server) {},
),
).Run() ).Run()
} }