Merge pull request #120 from stevvooe/add-version-reporting

Add version reporting to registry binary
This commit is contained in:
Stephen Day 2015-01-30 11:46:32 -08:00
commit fce5115336
8 changed files with 96 additions and 12 deletions

3
.gitignore vendored
View file

@ -22,3 +22,6 @@ _testmain.go
*.exe *.exe
*.test *.test
*.prof *.prof
# never checkin from the bin file (for now)
bin/*

View file

@ -6,3 +6,4 @@ Brian Bland <brian.bland@docker.com>
Josh Hawn <josh.hawn@docker.com> Josh Hawn <josh.hawn@docker.com>
Olivier Gambier <olivier@docker.com> Olivier Gambier <olivier@docker.com>
Stephen J Day <stephen.day@docker.com> Stephen J Day <stephen.day@docker.com>
Tianon Gravi <admwiggin@gmail.com>

View file

@ -1,15 +1,13 @@
FROM golang:1.4 FROM golang:1.4
ENV CONFIG_PATH /etc/docker/registry/config.yml ENV CONFIG_PATH /etc/docker/registry/config.yml
RUN mkdir -pv "$(dirname $CONFIG_PATH)"
ENV DISTRIBUTION_DIR /go/src/github.com/docker/distribution ENV DISTRIBUTION_DIR /go/src/github.com/docker/distribution
ENV GOPATH $DISTRIBUTION_DIR/Godeps/_workspace:$GOPATH
WORKDIR $DISTRIBUTION_DIR WORKDIR $DISTRIBUTION_DIR
COPY . $DISTRIBUTION_DIR COPY . $DISTRIBUTION_DIR
ENV GOPATH $GOPATH:$DISTRIBUTION_DIR/Godeps/_workspace RUN make PREFIX=/go clean binaries
RUN mkdir -pv "$(dirname $CONFIG_PATH)"
RUN go install -v ./cmd/registry
RUN cp -lv ./cmd/registry/config.yml $CONFIG_PATH RUN cp -lv ./cmd/registry/config.yml $CONFIG_PATH
EXPOSE 5000 EXPOSE 5000

View file

@ -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"

View file

@ -19,12 +19,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 {
version.PrintVersion()
return
}
config, err := resolveConfiguration() config, err := resolveConfiguration()
if err != nil { if err != nil {
fatalf("configuration error: %v", err) fatalf("configuration error: %v", err)

26
version/print.go Normal file
View file

@ -0,0 +1,26 @@
package version
import (
"fmt"
"io"
"os"
)
// FprintVersion outputs the version string to the writer, in the following
// format, followed by a newline:
//
// <cmd> <project> <version>
//
// For example, a binary "registry" built from github.com/docker/distribution
// with version "v2.0" would print the following:
//
// registry github.com/docker/distribution v2.0
//
func FprintVersion(w io.Writer) {
fmt.Fprintln(w, os.Args[0], Package, Version)
}
// PrintVersion outputs the version information, from Fprint, to stdout.
func PrintVersion() {
FprintVersion(os.Stdout)
}

11
version/version.go Normal file
View 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
View 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