diff --git a/Makefile b/Makefile index 076689d..9fbe63a 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,14 @@ -.PHONY: build install test clean version +.PHONY: build install test coverage clean -# Get version from git tag, fallback to dev -VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") -COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") -DATE ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") - -# Ldflags to inject version information -LDFLAGS := -ldflags "-X git.membo.co.uk/dtomlinson/gitlocal/cmd.Version=$(VERSION) \ - -X git.membo.co.uk/dtomlinson/gitlocal/cmd.Commit=$(COMMIT) \ - -X git.membo.co.uk/dtomlinson/gitlocal/cmd.Date=$(DATE)" - -# Build the binary +# Build the binary (Go automatically embeds VCS info) build: - @echo "Building gitlocal $(VERSION)..." - go build $(LDFLAGS) -o gitlocal . + @echo "Building gitlocal..." + go build -o gitlocal . # Install to $GOPATH/bin install: - @echo "Installing gitlocal $(VERSION)..." - go install $(LDFLAGS) . + @echo "Installing gitlocal..." + go install . # Run tests test: @@ -35,9 +25,3 @@ coverage: clean: @echo "Cleaning..." rm -f gitlocal coverage.out - -# Show version that would be built -version: - @echo "Version: $(VERSION)" - @echo "Commit: $(COMMIT)" - @echo "Date: $(DATE)" diff --git a/README.md b/README.md index a7d1a30..c99c019 100644 --- a/README.md +++ b/README.md @@ -134,25 +134,27 @@ cd gitlocal # Install dependencies go mod download -# Build with version info (recommended - uses Makefile) +# Build the binary make build - -# Or install to $GOPATH/bin with version info -make install - -# Build without version info (not recommended) +# or go build -o gitlocal -# Check version that would be built -make version +# Install to $GOPATH/bin +make install +# or +go install ``` -The Makefile automatically injects version information from git tags: -- `Version`: Git tag (e.g., `v0.1.0`) or commit hash if no tag exists -- `Commit`: Short commit hash -- `Date`: Build timestamp +**Version Information:** +Go automatically embeds version information from git when building. The `gitlocal version` command reads this embedded metadata to display: +- Version (from git tag, e.g., `v0.1.0`) +- Commit hash (short SHA) +- Build timestamp -**Note:** Version information is automatically included when installing via `go install` (no Makefile needed). The tool reads version info from Go's build metadata. +This works automatically for: +- `go install` (remote installation) +- `go build` (local builds) +- Pre-built binaries (when built from a git repo) Check the version after installing: ```bash diff --git a/cmd/version.go b/cmd/version.go index 41a37f7..20c3103 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -7,42 +7,30 @@ import ( "github.com/spf13/cobra" ) -var ( - // Version is set via -ldflags during build (for make install) - // Falls back to module version from go install - Version = "dev" - // Commit is set via -ldflags during build - Commit = "unknown" - // Date is set via -ldflags during build - Date = "unknown" -) - var versionCmd = &cobra.Command{ Use: "version", Short: "Print version information", Long: `Display the version, commit hash, and build date of gitlocal.`, Run: func(cmd *cobra.Command, args []string) { - version := Version - commit := Commit - date := Date + version := "dev" + commit := "unknown" + date := "unknown" - // If installed via 'go install', read version from build info - if version == "dev" { - if info, ok := debug.ReadBuildInfo(); ok { - version = info.Main.Version + // Read version from build info (works for both 'go install' and 'go build') + if info, ok := debug.ReadBuildInfo(); ok { + version = info.Main.Version - // Extract commit and date from build settings - for _, setting := range info.Settings { - switch setting.Key { - case "vcs.revision": - if len(setting.Value) > 7 { - commit = setting.Value[:7] - } else { - commit = setting.Value - } - case "vcs.time": - date = setting.Value + // Extract commit and date from build settings + for _, setting := range info.Settings { + switch setting.Key { + case "vcs.revision": + if len(setting.Value) > 7 { + commit = setting.Value[:7] + } else { + commit = setting.Value } + case "vcs.time": + date = setting.Value } } }