From 3c1b435990b0b1d9692161a44d70613154aff3fa Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Sun, 4 Oct 2026 07:02:27 +0200 Subject: [PATCH] Fall back to dev when git describe prints nothing (closes #74) The Makefile examples in `prompts/CODE_STYLEGUIDE_GO.md` and `prompts/GO_HTTP_SERVER_CONVENTIONS.md` now read `VERSION ?= $(or $(shell git describe --tags --always 2>/dev/null),dev)`. When `git describe` prints nothing (outside a git checkout, or where git is missing or refuses the checkout) the old line stamped an empty version without a word; it now falls back to `dev`, the same way in every repo. The comment above each line says so. In a Docker build stage with `.git` present, a real version needs git installed and the checkout trusted, as the canonical `Dockerfile` does; the `Dockerfile` already fails when the version comes out empty, `dev` or `unknown`. Model: opus-5-5 --- TODO.md | 5 +++++ prompts/CODE_STYLEGUIDE_GO.md | 8 +++++--- prompts/GO_HTTP_SERVER_CONVENTIONS.md | 8 +++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/TODO.md b/TODO.md index 73a5f93..ad8770e 100644 --- a/TODO.md +++ b/TODO.md @@ -21,6 +21,11 @@ fmt-check, and commit. # Completed Steps +- 2026-10-04: The Makefile examples in the Go styleguide and the HTTP server + conventions now fall back to `dev` when `git describe` prints nothing (outside + a git checkout, or where git is missing or refuses the checkout), instead of + stamping an empty version (issue 74). The canonical `Dockerfile` already fails + on a `dev` version when `.git` is in the build context. - 2026-10-04: The canonical `.dockerignore` now also keeps out each submodule's `config` (issue 75). A submodule's git directory lives under `.git/modules/`, nested again for its own submodules, and its `config` can hold a credential diff --git a/prompts/CODE_STYLEGUIDE_GO.md b/prompts/CODE_STYLEGUIDE_GO.md index 5ce1289..1e6fd99 100644 --- a/prompts/CODE_STYLEGUIDE_GO.md +++ b/prompts/CODE_STYLEGUIDE_GO.md @@ -1,6 +1,6 @@ --- title: Code Styleguide — Go -last_modified: 2026-10-02 +last_modified: 2026-10-04 --- 1. Try to hard wrap long lines at 77 characters or less. @@ -51,8 +51,10 @@ last_modified: 2026-10-02 # ?= rather than := so that a `VERSION` build argument takes precedence: # where a build stage invokes make, `ARG VERSION` puts it in the # environment and `?=` defers to it. Otherwise `git describe` runs, in a - # build stage on the `.git` the build context carries. - VERSION ?= $(shell git describe --tags --always) + # build stage on the `.git` the build context carries. When it prints + # nothing (outside a git checkout, or where git is missing or refuses the + # checkout), the version falls back to `dev`. + VERSION ?= $(or $(shell git describe --tags --always 2>/dev/null),dev) GOLDFLAGS += -X main.Version=$(VERSION) diff --git a/prompts/GO_HTTP_SERVER_CONVENTIONS.md b/prompts/GO_HTTP_SERVER_CONVENTIONS.md index 0aa35b5..84e1230 100644 --- a/prompts/GO_HTTP_SERVER_CONVENTIONS.md +++ b/prompts/GO_HTTP_SERVER_CONVENTIONS.md @@ -1,6 +1,6 @@ --- title: Go HTTP Server Conventions -last_modified: 2026-10-02 +last_modified: 2026-10-04 --- This document defines the architectural patterns, design decisions, and @@ -987,8 +987,10 @@ Use ldflags to inject version information at build time: # ?= rather than := so that a `VERSION` build argument takes precedence: # where a build stage invokes make, `ARG VERSION` puts it in the # environment and `?=` defers to it. Otherwise `git describe` runs, in a -# build stage on the `.git` the build context carries. -VERSION ?= $(shell git describe --tags --always) +# build stage on the `.git` the build context carries. When it prints +# nothing (outside a git checkout, or where git is missing or refuses the +# checkout), the version falls back to `dev`. +VERSION ?= $(or $(shell git describe --tags --always 2>/dev/null),dev) build: go build -ldflags "-X main.Version=$(VERSION)" ./cmd/httpd