From 1266a263fc6e77d2435e66d3438d5632082e6fc1 Mon Sep 17 00:00:00 2001 From: sneak Date: Wed, 17 Jun 2026 05:39:11 +0200 Subject: [PATCH] Add author/homepage/license to version + banner; date format fixes - globals.go: add Homepage and License constants. - version command: show author, homepage, license, build date. - Startup banner reformatted to: vaultik X by Author (commit Y, built on Z) starting up at T. https://sneak.berlin/go/vaultik - Commit date now formatted as YYYY-MM-DD (called "build date" in user-facing output, since the binary was at least compiled once on the date of commit). Makefile/Dockerfile use git --format=%cs. goreleaser slices its RFC3339 .CommitDate template var to 10 chars. --- .goreleaser.yaml | 2 +- Dockerfile | 2 +- Makefile | 2 +- internal/cli/app.go | 8 +++++--- internal/cli/version.go | 10 +++++++--- internal/globals/globals.go | 6 ++++++ 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 627cec6..d47dd2f 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -22,7 +22,7 @@ builds: - -s -w - -X 'sneak.berlin/go/vaultik/internal/globals.Version={{ .Version }}' - -X 'sneak.berlin/go/vaultik/internal/globals.Commit={{ .Commit }}' - - -X 'sneak.berlin/go/vaultik/internal/globals.CommitDate={{ .CommitDate }}' + - -X 'sneak.berlin/go/vaultik/internal/globals.CommitDate={{ slice .CommitDate 0 10 }}' archives: - id: default diff --git a/Dockerfile b/Dockerfile index fc50065..72ea9b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ COPY . . RUN make test # Build (pure Go, no CGO required since we use modernc.org/sqlite) -RUN CGO_ENABLED=0 go build -ldflags "-X 'sneak.berlin/go/vaultik/internal/globals.Version=${VERSION}' -X 'sneak.berlin/go/vaultik/internal/globals.Commit=$(git rev-parse HEAD 2>/dev/null || echo unknown)' -X 'sneak.berlin/go/vaultik/internal/globals.CommitDate=$(git show -s --format=%cI HEAD 2>/dev/null || echo unknown)'" -o /vaultik ./cmd/vaultik +RUN CGO_ENABLED=0 go build -ldflags "-X 'sneak.berlin/go/vaultik/internal/globals.Version=${VERSION}' -X 'sneak.berlin/go/vaultik/internal/globals.Commit=$(git rev-parse HEAD 2>/dev/null || echo unknown)' -X 'sneak.berlin/go/vaultik/internal/globals.CommitDate=$(git show -s --format=%cs HEAD 2>/dev/null || echo unknown)'" -o /vaultik ./cmd/vaultik # Runtime stage # alpine:3.21, 2026-02-25 diff --git a/Makefile b/Makefile index 796e281..5e12f85 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ VERSION := 1.0.0-rc.1 # Build variables GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown") -GIT_COMMIT_DATE := $(shell git show -s --format=%cI HEAD 2>/dev/null || echo "unknown") +GIT_COMMIT_DATE := $(shell git show -s --format=%cs HEAD 2>/dev/null || echo "unknown") # Linker flags LDFLAGS := -X 'sneak.berlin/go/vaultik/internal/globals.Version=$(VERSION)' \ diff --git a/internal/cli/app.go b/internal/cli/app.go index 4ec7063..4217d54 100644 --- a/internal/cli/app.go +++ b/internal/cli/app.go @@ -46,9 +46,11 @@ func setupGlobals(lc fx.Lifecycle, g *globals.Globals, v *vaultik.Vaultik, opts // user-facing output is suppressed. v.UI = ui.NewWithColor(io.Discard, false) } else { - v.UI.Banner("%s %s (commit %s, %s) invoked at %s by %s", - g.Appname, g.Version, g.ShortCommit(), g.CommitDate, - g.StartTime.Format(time.RFC3339), globals.Author) + v.UI.Banner("%s %s by %s (commit %s, built on %s) starting up at %s.", + g.Appname, g.Version, globals.Author, + g.ShortCommit(), g.CommitDate, + g.StartTime.Format(time.RFC3339)) + v.UI.Banner("%s", globals.Homepage) } return nil }, diff --git a/internal/cli/version.go b/internal/cli/version.go index 2c632c2..cbe3344 100644 --- a/internal/cli/version.go +++ b/internal/cli/version.go @@ -17,9 +17,13 @@ func NewVersionCommand() *cobra.Command { Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { fmt.Printf("vaultik %s\n", globals.Version) - fmt.Printf(" commit: %s\n", globals.Commit) - fmt.Printf(" go: %s\n", runtime.Version()) - fmt.Printf(" os/arch: %s/%s\n", runtime.GOOS, runtime.GOARCH) + fmt.Printf(" commit: %s\n", globals.Commit) + fmt.Printf(" build date: %s\n", globals.CommitDate) + fmt.Printf(" go: %s\n", runtime.Version()) + fmt.Printf(" os/arch: %s/%s\n", runtime.GOOS, runtime.GOARCH) + fmt.Printf(" author: %s\n", globals.Author) + fmt.Printf(" homepage: %s\n", globals.Homepage) + fmt.Printf(" license: %s\n", globals.License) if globals.Version == "dev" { fmt.Println() fmt.Println("This is a development build (no version information embedded).") diff --git a/internal/globals/globals.go b/internal/globals/globals.go index f91c58c..80c538b 100644 --- a/internal/globals/globals.go +++ b/internal/globals/globals.go @@ -19,6 +19,12 @@ var CommitDate string = "unknown" // Author identifies the upstream author of vaultik. const Author = "Jeffrey Paul " +// Homepage is the canonical URL for vaultik. +const Homepage = "https://sneak.berlin/go/vaultik" + +// License is the SPDX identifier for the project license. +const License = "MIT" + // Globals contains application-wide configuration and metadata. type Globals struct { Appname string