Report version in registry binary
We've added support to the registry command to report the current version of the distribution package. The version package is generated with a shell script that gets the latest tag and add "+unknown". This allows builds from "go get" and "go install" to have a rough version number. Generated periodically, it will provide a decent indication of what code built the binary. For more accurate versioning, one can build with the "binaries" make target. Linker flags are used to replace the version string with the actual current tag at build time. Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
parent
c4406baf8a
commit
d0abfe0b92
5 changed files with 70 additions and 6 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -22,3 +22,6 @@ _testmain.go
|
||||||
*.exe
|
*.exe
|
||||||
*.test
|
*.test
|
||||||
*.prof
|
*.prof
|
||||||
|
|
||||||
|
# never checkin from the bin file (for now)
|
||||||
|
bin/*
|
||||||
|
|
23
Makefile
23
Makefile
|
@ -1,15 +1,26 @@
|
||||||
# This project makefile is around for generating peices of documentation and
|
# Set an output prefix, which is the local directory if not specified
|
||||||
# code. For most purposes, running it is not necessary.
|
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: default
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@echo Please read the make targets before using this Makefile. It is \
|
@echo Please read the make targets before using this Makefile.
|
||||||
currently only used for documentation and autogenerated files.
|
|
||||||
|
|
||||||
AUTHORS: .mailmap .git/ORIG_HEAD .git/FETCH_HEAD .git/HEAD
|
AUTHORS: .mailmap .git/ORIG_HEAD .git/FETCH_HEAD .git/HEAD
|
||||||
git log --format='%aN <%aE>' | sort -fu >> $@
|
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:
|
clean:
|
||||||
rm -rf AUTHORS
|
rm -rf ${PREFIX}/bin/registry
|
||||||
|
|
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
|
@ -19,12 +20,24 @@ import (
|
||||||
_ "github.com/docker/distribution/storagedriver/filesystem"
|
_ "github.com/docker/distribution/storagedriver/filesystem"
|
||||||
_ "github.com/docker/distribution/storagedriver/inmemory"
|
_ "github.com/docker/distribution/storagedriver/inmemory"
|
||||||
_ "github.com/docker/distribution/storagedriver/s3"
|
_ "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() {
|
func main() {
|
||||||
flag.Usage = usage
|
flag.Usage = usage
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
if showVersion {
|
||||||
|
printVersion(os.Stdout)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
config, err := resolveConfiguration()
|
config, err := resolveConfiguration()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatalf("configuration error: %v", err)
|
fatalf("configuration error: %v", err)
|
||||||
|
@ -46,6 +59,10 @@ func usage() {
|
||||||
flag.PrintDefaults()
|
flag.PrintDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printVersion(w io.Writer) {
|
||||||
|
fmt.Fprintln(w, os.Args[0], version.Package, version.Version)
|
||||||
|
}
|
||||||
|
|
||||||
func fatalf(format string, args ...interface{}) {
|
func fatalf(format string, args ...interface{}) {
|
||||||
fmt.Fprintf(os.Stderr, format+"\n", args...)
|
fmt.Fprintf(os.Stderr, format+"\n", args...)
|
||||||
usage()
|
usage()
|
||||||
|
|
11
version/version.go
Normal file
11
version/version.go
Normal file
|
@ -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"
|
22
version/version.sh
Executable file
22
version/version.sh
Executable file
|
@ -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 <<EOF
|
||||||
|
package version
|
||||||
|
|
||||||
|
// Package is the overall, canonical project import path under which the
|
||||||
|
// package was built.
|
||||||
|
var Package = "$(go list)"
|
||||||
|
|
||||||
|
// 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 = "$(git describe --match 'v[0-9]*' --dirty='.m' --always)+unknown"
|
||||||
|
EOF
|
Loading…
Reference in a new issue