mirror of https://github.com/docker/docs.git
153 lines
4.4 KiB
Makefile
153 lines
4.4 KiB
Makefile
# Set an output prefix, which is the local directory if not specified
|
|
PREFIX?=$(shell pwd)
|
|
|
|
# Populate version variables
|
|
# Add to compile time flags
|
|
NOTARY_PKG := github.com/docker/notary
|
|
NOTARY_VERSION := $(shell cat NOTARY_VERSION)
|
|
GITCOMMIT := $(shell git rev-parse --short HEAD)
|
|
GITUNTRACKEDCHANGES := $(shell git status --porcelain --untracked-files=no)
|
|
ifneq ($(GITUNTRACKEDCHANGES),)
|
|
GITCOMMIT := $(GITCOMMIT)-dirty
|
|
endif
|
|
CTIMEVAR=-X $(NOTARY_PKG)/version.GitCommit=$(GITCOMMIT) -X $(NOTARY_PKG)/version.NotaryVersion=$(NOTARY_VERSION)
|
|
GO_LDFLAGS=-ldflags "-w $(CTIMEVAR)"
|
|
GO_LDFLAGS_STATIC=-ldflags "-w $(CTIMEVAR) -extldflags -static"
|
|
GOOSES = darwin freebsd linux
|
|
GOARCHS = amd64
|
|
GO_EXC = go
|
|
NOTARYDIR := /go/src/github.com/docker/notary
|
|
|
|
# go cover test variables
|
|
COVERDIR=.cover
|
|
COVERPROFILE=$(COVERDIR)/cover.out
|
|
COVERMODE=count
|
|
PKGS = $(shell go list ./... | tr '\n' ' ')
|
|
|
|
GO_VERSION = $(shell go version | awk '{print $$3}')
|
|
|
|
.PHONY: clean all fmt vet lint build test binaries cross cover docker-images
|
|
.DELETE_ON_ERROR: cover
|
|
.DEFAULT: default
|
|
|
|
go_version:
|
|
ifneq ("$(GO_VERSION)", "go1.5.1")
|
|
$(error Requires go version 1.5.1 - found $(GO_VERSION))
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
|
|
all: AUTHORS clean fmt vet fmt lint build test binaries
|
|
|
|
AUTHORS: .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/notary-server: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@godep go build -o $@ ${GO_LDFLAGS} ./cmd/notary-server
|
|
|
|
${PREFIX}/bin/notary: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@godep go build -o $@ ${GO_LDFLAGS} ./cmd/notary
|
|
|
|
${PREFIX}/bin/notary-signer: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@godep go build -o $@ ${GO_LDFLAGS} ./cmd/notary-signer
|
|
|
|
vet: go_version
|
|
@echo "+ $@"
|
|
@test -z "$$(go tool vet -printf=false . 2>&1 | grep -v Godeps/_workspace/src/ | tee /dev/stderr)"
|
|
|
|
fmt:
|
|
@echo "+ $@"
|
|
@test -z "$$(gofmt -s -l .| grep -v .pb. | grep -v Godeps/_workspace/src/ | tee /dev/stderr)"
|
|
|
|
lint:
|
|
@echo "+ $@"
|
|
@test -z "$$(golint ./... | grep -v .pb. | grep -v Godeps/_workspace/src/ | tee /dev/stderr)"
|
|
|
|
build: go_version
|
|
@echo "+ $@"
|
|
@go build -v ${GO_LDFLAGS} ./...
|
|
|
|
test: OPTS =
|
|
test: go_version
|
|
@echo "+ $@ $(OPTS)"
|
|
go test $(OPTS) ./...
|
|
|
|
test-full: vet lint
|
|
@echo "+ $@"
|
|
go test -v ./...
|
|
|
|
protos:
|
|
@protoc --go_out=plugins=grpc:. proto/*.proto
|
|
|
|
|
|
# This allows coverage for a package to come from tests in different package.
|
|
# Requires that the following:
|
|
# go get github.com/wadey/gocovmerge; go install github.com/wadey/gocovmerge
|
|
#
|
|
# be run first
|
|
|
|
define gocover
|
|
$(GO_EXC) test $(OPTS) -covermode="$(COVERMODE)" -coverprofile="$(COVERDIR)/$(subst /,-,$(1)).cover" "$(1)" || exit 1;
|
|
endef
|
|
|
|
gen-cover: go_version
|
|
@rm -rf "$(COVERDIR)"
|
|
@mkdir -p "$(COVERDIR)"
|
|
$(foreach PKG,$(PKGS),$(call gocover,$(PKG)))
|
|
|
|
cover: GO_EXC := go
|
|
OPTS = -coverpkg "$(shell ./coverpkg.sh $(1) $(NOTARY_PKG))"
|
|
cover: gen-cover
|
|
@gocovmerge $(shell ls -1 $(COVERDIR)/* | tr "\n" " ") > $(COVERPROFILE)
|
|
@go tool cover -func="$(COVERPROFILE)"
|
|
@go tool cover -html="$(COVERPROFILE)"
|
|
|
|
# Codecov knows how to merge multiple coverage files
|
|
ci: OPTS = -race -coverpkg "$(shell ./coverpkg.sh $(1) $(NOTARY_PKG))"
|
|
GO_EXC := godep go
|
|
ci: gen-cover
|
|
@gocovmerge $(shell ls -1 $(COVERDIR)/* | tr "\n" " ") > $(COVERPROFILE)
|
|
@go tool cover -func="$(COVERPROFILE)"
|
|
|
|
clean-protos:
|
|
@rm proto/*.pb.go
|
|
|
|
binaries: go_version ${PREFIX}/bin/notary-server ${PREFIX}/bin/notary ${PREFIX}/bin/notary-signer
|
|
@echo "+ $@"
|
|
|
|
define template
|
|
mkdir -p ${PREFIX}/cross/$(1)/$(2);
|
|
GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build -o ${PREFIX}/cross/$(1)/$(2)/notary -a -tags "static_build netgo" -installsuffix netgo ${GO_LDFLAGS_STATIC} ./cmd/notary;
|
|
endef
|
|
|
|
cross: go_version
|
|
$(foreach GOARCH,$(GOARCHS),$(foreach GOOS,$(GOOSES),$(call template,$(GOOS),$(GOARCH))))
|
|
|
|
|
|
notary-dockerfile:
|
|
@docker build --rm --force-rm -t notary .
|
|
|
|
server-dockerfile:
|
|
@docker build --rm --force-rm -f Dockerfile.server -t notary-server .
|
|
|
|
signer-dockerfile:
|
|
@docker build --rm --force-rm -f Dockerfile.signer -t notary-signer .
|
|
|
|
docker-images: notary-dockerfile server-dockerfile signer-dockerfile
|
|
|
|
shell: notary-dockerfile
|
|
docker run --rm -it -v $(CURDIR)/cross:$(NOTARYDIR)/cross -v $(CURDIR)/bin:$(NOTARYDIR)/bin notary bash
|
|
|
|
|
|
clean:
|
|
@echo "+ $@"
|
|
@rm -rf "${PREFIX}/bin/notary-server" "${PREFIX}/bin/notary" "${PREFIX}/bin/notary-signer"
|