From aa6b4d1ccf374350d5b83886b5778b1929dd5166 Mon Sep 17 00:00:00 2001 From: Jiro Date: Fri, 14 Aug 2026 15:09:59 +0900 Subject: [PATCH] feat(web): show build version in sidebar Share release build metadata between tq and the web binary, inject it into the embedded frontend, and render the version at the bottom of the sidebar. Preserve dev fallbacks, expose known commits as hover text, and cover the metadata path with Go and frontend tests. --- .goreleaser.yml | 4 +- Makefile | 6 +- cmd/web/frontend/docs/ui-design-system.ja.md | 5 +- cmd/web/frontend/docs/ui-design-system.md | 5 +- cmd/web/frontend/index.html | 2 + .../layout/sidebar/index.module.css | 8 ++ .../src/components/layout/sidebar/index.tsx | 9 ++ cmd/web/frontend/src/lib/build-info.test.ts | 22 +++++ cmd/web/frontend/src/lib/build-info.ts | 29 +++++++ cmd/web/main.go | 11 ++- cmd/web/main_test.go | 26 ++++++ docs/design/operations.ja.md | 2 +- docs/design/operations.md | 2 +- docs/references/makefile.ja.md | 2 +- docs/references/makefile.md | 2 +- internal/buildinfo/buildinfo.go | 83 +++++++++++++++++++ internal/buildinfo/buildinfo_test.go | 42 ++++++++++ internal/cli/tq/command_test.go | 37 --------- internal/cli/tq/version.go | 76 +---------------- 19 files changed, 247 insertions(+), 126 deletions(-) create mode 100644 cmd/web/frontend/src/lib/build-info.test.ts create mode 100644 cmd/web/frontend/src/lib/build-info.ts create mode 100644 internal/buildinfo/buildinfo.go create mode 100644 internal/buildinfo/buildinfo_test.go diff --git a/.goreleaser.yml b/.goreleaser.yml index 4e989fef..e1929cd1 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -5,7 +5,7 @@ builds: binary: tq id: tq ldflags: - - -s -w -X github.com/version-1/tasq/internal/cli/tq.buildVersion={{.Version}} -X github.com/version-1/tasq/internal/cli/tq.buildCommit={{.ShortCommit}} -X github.com/version-1/tasq/internal/config.defaultHomeProfile={{.Env.TQ_BUILD_PROFILE}} + - -s -w -X github.com/version-1/tasq/internal/buildinfo.version={{.Version}} -X github.com/version-1/tasq/internal/buildinfo.commit={{.ShortCommit}} -X github.com/version-1/tasq/internal/config.defaultHomeProfile={{.Env.TQ_BUILD_PROFILE}} env: - CGO_ENABLED=0 goos: @@ -44,7 +44,7 @@ builds: binary: web id: web ldflags: - - -s -w -X github.com/version-1/tasq/internal/config.defaultHomeProfile={{.Env.TQ_BUILD_PROFILE}} + - -s -w -X github.com/version-1/tasq/internal/buildinfo.version={{.Version}} -X github.com/version-1/tasq/internal/buildinfo.commit={{.ShortCommit}} -X github.com/version-1/tasq/internal/config.defaultHomeProfile={{.Env.TQ_BUILD_PROFILE}} env: - CGO_ENABLED=0 goos: diff --git a/Makefile b/Makefile index becf4901..bcde26f6 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ TQ_INSTALL_DIR ?= $(HOME)/.local/bin TQ_INSTALL_NAME ?= tq TQ_BUILD_COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || printf unknown) TQ_BUILD_PROFILE ?= -TQ_BUILD_LDFLAGS ?= -X github.com/version-1/tasq/internal/cli/tq.buildCommit=$(TQ_BUILD_COMMIT) -X github.com/version-1/tasq/internal/config.defaultHomeProfile=$(TQ_BUILD_PROFILE) +TQ_BUILD_LDFLAGS ?= -X github.com/version-1/tasq/internal/buildinfo.commit=$(TQ_BUILD_COMMIT) -X github.com/version-1/tasq/internal/config.defaultHomeProfile=$(TQ_BUILD_PROFILE) TQ_INSTALL_HOME = $(if $(filter file,$(origin TQ_HOME)),,$(TQ_HOME)) export TQ_HOME @@ -69,10 +69,10 @@ build-tq: ## Build tq for the host into ./bin/tq. build-tq-dev: ## Build tq and service binaries with the dev profile. cd cmd/web/frontend && npm ci && npm run build mkdir -p "$(HOME)/.tasq-dev/system/bin" - go build -ldflags "-X github.com/version-1/tasq/internal/cli/tq.buildCommit=$(TQ_BUILD_COMMIT) -X github.com/version-1/tasq/internal/config.defaultHomeProfile=dev" -o ./tqdev ./cmd/tq + go build -ldflags "-X github.com/version-1/tasq/internal/buildinfo.commit=$(TQ_BUILD_COMMIT) -X github.com/version-1/tasq/internal/config.defaultHomeProfile=dev" -o ./tqdev ./cmd/tq go build -o "$(HOME)/.tasq-dev/system/bin/issue-tracker" ./cmd/issue-tracker go build -o "$(HOME)/.tasq-dev/system/bin/orchestrator" ./cmd/orchestrator - go build -o "$(HOME)/.tasq-dev/system/bin/web" ./cmd/web + go build -ldflags "-X github.com/version-1/tasq/internal/buildinfo.commit=$(TQ_BUILD_COMMIT)" -o "$(HOME)/.tasq-dev/system/bin/web" ./cmd/web .PHONY: dev-check dev-check: diff --git a/cmd/web/frontend/docs/ui-design-system.ja.md b/cmd/web/frontend/docs/ui-design-system.ja.md index 241f3c8e..63f968b8 100644 --- a/cmd/web/frontend/docs/ui-design-system.ja.md +++ b/cmd/web/frontend/docs/ui-design-system.ja.md @@ -363,8 +363,9 @@ documented token になるまでは literal のまま扱います。 - nav 行: 最小高さ `44px`、icon gap `12px`、`--radius-sm`、hover で `--surface-hover`。 - アクティブな route は `--surface-hover` 背景を使用 (border アクセントはなし)。 -- sidebar 下部: settings リンクが `border-top` と theme switch 行で - 仕切られた同じ separator を持ちます。 +- sidebar 下部: settings リンクが `border-top`、同じ separator を持つ theme + switch 行、そして小さく muted な現在の release version を表示します。 + commit が分かる場合のみ hover text で確認できます。 ### Header diff --git a/cmd/web/frontend/docs/ui-design-system.md b/cmd/web/frontend/docs/ui-design-system.md index f7922a6c..fe4032f0 100644 --- a/cmd/web/frontend/docs/ui-design-system.md +++ b/cmd/web/frontend/docs/ui-design-system.md @@ -366,8 +366,9 @@ The application shell is a two-column grid declared in - Nav rows: `44px` min height, `12px` icon gap, `--radius-sm`, and `--surface-hover` hover. - The active route uses `--surface-hover` background (no border accent). -- Bottom of sidebar: settings link separated by `border-top` and a theme switch - row with the same separator. +- Bottom of sidebar: settings link separated by `border-top`, a theme switch + row with the same separator, and the current release version in small muted + text. The commit is available only as hover text when known. ### Header diff --git a/cmd/web/frontend/index.html b/cmd/web/frontend/index.html index 1fe9736a..93baf19b 100644 --- a/cmd/web/frontend/index.html +++ b/cmd/web/frontend/index.html @@ -4,6 +4,8 @@ + +