diff --git a/.gitignore b/.gitignore index daf913b1b..306a8fba0 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ _testmain.go *.exe *.test *.prof + +# never checkin from the bin file (for now) +bin/* diff --git a/Makefile b/Makefile index d853dacab..e3477e83f 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,26 @@ -# This project makefile is around for generating peices of documentation and -# code. For most purposes, running it is not necessary. +# Set an output prefix, which is the local directory if not specified +PREFIX?=$(shell pwd) -.PHONY: clean +# Used to populate version variable in main package. +GO_LDFLAGS=-ldflags "-X `go list ./version`.Version `git describe --match 'v[0-9]*' --dirty='.m' --always`" + +.PHONY: clean binaries .DEFAULT: default default: - @echo Please read the make targets before using this Makefile. It is \ - currently only used for documentation and autogenerated files. + @echo Please read the make targets before using this Makefile. AUTHORS: .mailmap .git/ORIG_HEAD .git/FETCH_HEAD .git/HEAD git log --format='%aN <%aE>' | sort -fu >> $@ +# This only needs to be generated by hand when cutting full releases. +version/version.go: + ./version/version.sh > $@ + +${PREFIX}/bin/registry: version/version.go $(shell find . -type f -name '*.go') + go build -o $@ ${GO_LDFLAGS} ./cmd/registry + +binaries: ${PREFIX}/bin/registry + clean: - rm -rf AUTHORS \ No newline at end of file + rm -rf ${PREFIX}/bin/registry diff --git a/cmd/registry/main.go b/cmd/registry/main.go index 436b8f77b..c19a122fa 100644 --- a/cmd/registry/main.go +++ b/cmd/registry/main.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "io" "net/http" _ "net/http/pprof" "os" @@ -19,12 +20,24 @@ import ( _ "github.com/docker/distribution/storagedriver/filesystem" _ "github.com/docker/distribution/storagedriver/inmemory" _ "github.com/docker/distribution/storagedriver/s3" + "github.com/docker/distribution/version" ) +var showVersion bool + +func init() { + flag.BoolVar(&showVersion, "version", false, "show the version and exit") +} + func main() { flag.Usage = usage flag.Parse() + if showVersion { + printVersion(os.Stdout) + return + } + config, err := resolveConfiguration() if err != nil { fatalf("configuration error: %v", err) @@ -46,6 +59,10 @@ func usage() { flag.PrintDefaults() } +func printVersion(w io.Writer) { + fmt.Fprintln(w, os.Args[0], version.Package, version.Version) +} + func fatalf(format string, args ...interface{}) { fmt.Fprintf(os.Stderr, format+"\n", args...) usage() diff --git a/version/version.go b/version/version.go new file mode 100644 index 000000000..2e96cd68f --- /dev/null +++ b/version/version.go @@ -0,0 +1,11 @@ +package version + +// Package is the overall, canonical project import path under which the +// package was built. +var Package = "github.com/docker/distribution" + +// Version indicates which version of the binary is running. This is set to +// the latest release tag by hand, always suffixed by "+unknown". During +// build, it will be replaced by the actual version. The value here will be +// used if the registry is run after a go get based install. +var Version = "v2.0.0-alpha.1+unknown" diff --git a/version/version.sh b/version/version.sh new file mode 100755 index 000000000..53e29ce9b --- /dev/null +++ b/version/version.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# This bash script outputs the current, desired content of version.go, using +# git describe. For best effect, pipe this to the target file. Generally, this +# only needs to updated for releases. The actual value of will be replaced +# during build time if the makefile is used. + +set -e + +cat <