mirror of
https://github.com/docker/docs.git
synced 2026-04-12 14:25:46 +07:00
ignores buildtags, for instance, and somehow didn't pick up some code in the signer. This calls golint on every go file in the repo and also fixes some linting issues, which involves renaming two yubikey functions to avoid stuttering. Signed-off-by: Ying Li <ying.li@docker.com>
208 lines
7.2 KiB
Makefile
208 lines
7.2 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 linux
|
|
NOTARY_BUILDTAGS ?= pkcs11
|
|
NOTARYDIR := /go/src/github.com/docker/notary
|
|
|
|
GO_VERSION := $(shell go version | grep "1\.[6-9]\(\.[0-9]+\)*")
|
|
# check to make sure we have the right version
|
|
ifeq ($(strip $(GO_VERSION)),)
|
|
$(error Bad Go version - please install Go >= 1.6)
|
|
endif
|
|
|
|
# check to be sure pkcs11 lib is always imported with a build tag
|
|
GO_LIST_PKCS11 := $(shell go list -tags "${NOTARY_BUILDTAGS}" -e -f '{{join .Deps "\n"}}' ./... | grep -v /vendor/ | xargs go list -e -f '{{if not .Standard}}{{.ImportPath}}{{end}}' | grep -q pkcs11)
|
|
ifeq ($(GO_LIST_PKCS11),)
|
|
$(info pkcs11 import was not found anywhere without a build tag, yay)
|
|
else
|
|
$(error You are importing pkcs11 somewhere and not using a build tag)
|
|
endif
|
|
|
|
_empty :=
|
|
_space := $(empty) $(empty)
|
|
|
|
# go cover test variables
|
|
COVERDIR=.cover
|
|
COVERPROFILE?=$(COVERDIR)/cover.out
|
|
COVERMODE=count
|
|
PKGS ?= $(shell go list -tags "${NOTARY_BUILDTAGS}" ./... | grep -v /vendor/ | tr '\n' ' ')
|
|
|
|
GO_VERSION = $(shell go version | awk '{print $$3}')
|
|
|
|
.PHONY: clean all fmt vet lint build test binaries cross cover docker-images notary-dockerfile
|
|
.DELETE_ON_ERROR: cover
|
|
.DEFAULT: default
|
|
|
|
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 "+ $@"
|
|
@go build -tags ${NOTARY_BUILDTAGS} -o $@ ${GO_LDFLAGS} ./cmd/notary-server
|
|
|
|
${PREFIX}/bin/notary: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@go build -tags ${NOTARY_BUILDTAGS} -o $@ ${GO_LDFLAGS} ./cmd/notary
|
|
|
|
${PREFIX}/bin/notary-signer: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@go build -tags ${NOTARY_BUILDTAGS} -o $@ ${GO_LDFLAGS} ./cmd/notary-signer
|
|
|
|
ifeq ($(shell uname -s),Darwin)
|
|
${PREFIX}/bin/static/notary-server:
|
|
@echo "notary-server: static builds not supported on OS X"
|
|
|
|
${PREFIX}/bin/static/notary-signer:
|
|
@echo "notary-signer: static builds not supported on OS X"
|
|
else
|
|
${PREFIX}/bin/static/notary-server: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@go build -tags ${NOTARY_BUILDTAGS} -o $@ ${GO_LDFLAGS_STATIC} ./cmd/notary-server
|
|
|
|
${PREFIX}/bin/static/notary-signer: NOTARY_VERSION $(shell find . -type f -name '*.go')
|
|
@echo "+ $@"
|
|
@go build -tags ${NOTARY_BUILDTAGS} -o $@ ${GO_LDFLAGS_STATIC} ./cmd/notary-signer
|
|
endif
|
|
|
|
vet:
|
|
@echo "+ $@"
|
|
ifeq ($(shell uname -s), Darwin)
|
|
@test -z "$(shell find . -iname *test*.go | grep -v _test.go | grep -v vendor | xargs echo "This file should end with '_test':" | tee /dev/stderr)"
|
|
else
|
|
@test -z "$(shell find . -iname *test*.go | grep -v _test.go | grep -v vendor | xargs -r echo "This file should end with '_test':" | tee /dev/stderr)"
|
|
endif
|
|
@test -z "$$(go tool vet -printf=false . 2>&1 | grep -v vendor/ | tee /dev/stderr)"
|
|
|
|
fmt:
|
|
@echo "+ $@"
|
|
@test -z "$$(gofmt -s -l .| grep -v .pb. | grep -v vendor/ | tee /dev/stderr)"
|
|
|
|
lint:
|
|
@echo "+ $@"
|
|
@test -z "$(shell find . -type f -name "*.go" -not -path "./vendor/*" -not -name "*.pb.*" -exec golint {} \; | tee /dev/stderr)"
|
|
|
|
# Requires that the following:
|
|
# go get -u github.com/client9/misspell/cmd/misspell
|
|
#
|
|
# be run first
|
|
|
|
# misspell target, don't include Godeps, binaries, python tests, or git files
|
|
misspell:
|
|
@echo "+ $@"
|
|
@test -z "$$(find . -name '*' | grep -v vendor/ | grep -v bin/ | grep -v misc/ | grep -v .git/ | xargs misspell | tee /dev/stderr)"
|
|
|
|
build:
|
|
@echo "+ $@"
|
|
@go build -tags "${NOTARY_BUILDTAGS}" -v ${GO_LDFLAGS} $(PKGS)
|
|
|
|
# When running `go test ./...`, it runs all the suites in parallel, which causes
|
|
# problems when running with a yubikey
|
|
test: TESTOPTS =
|
|
test:
|
|
@echo Note: when testing with a yubikey plugged in, make sure to include 'TESTOPTS="-p 1"'
|
|
@echo "+ $@ $(TESTOPTS)"
|
|
@echo
|
|
go test -tags "${NOTARY_BUILDTAGS}" $(TESTOPTS) $(PKGS)
|
|
|
|
test-full: TESTOPTS =
|
|
test-full: vet lint
|
|
@echo Note: when testing with a yubikey plugged in, make sure to include 'TESTOPTS="-p 1"'
|
|
@echo "+ $@"
|
|
@echo
|
|
go test -tags "${NOTARY_BUILDTAGS}" $(TESTOPTS) -v $(PKGS)
|
|
|
|
integration:
|
|
buildscripts/integrationtest.sh
|
|
|
|
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 test $(OPTS) $(TESTOPTS) -covermode="$(COVERMODE)" -coverprofile="$(COVERDIR)/$(subst /,-,$(1)).$(subst $(_space),.,$(NOTARY_BUILDTAGS)).coverage.txt" "$(1)" || exit 1;
|
|
endef
|
|
|
|
gen-cover:
|
|
@mkdir -p "$(COVERDIR)"
|
|
$(foreach PKG,$(PKGS),$(call gocover,$(PKG)))
|
|
rm -f "$(COVERDIR)"/*testutils*.coverage.txt
|
|
|
|
# Generates the cover binaries and runs them all in serial, so this can be used
|
|
# run all tests with a yubikey without any problems
|
|
cover: OPTS = -tags "${NOTARY_BUILDTAGS}" -coverpkg "$(shell ./coverpkg.sh $(1) $(NOTARY_PKG))"
|
|
cover: gen-cover covmerge
|
|
@go tool cover -html="$(COVERPROFILE)"
|
|
|
|
# Generates the cover binaries and runs them all in serial, so this can be used
|
|
# run all tests with a yubikey without any problems
|
|
ci: OPTS = -tags "${NOTARY_BUILDTAGS}" -race -coverpkg "$(shell ./coverpkg.sh $(1) $(NOTARY_PKG))"
|
|
# Codecov knows how to merge multiple coverage files, so covmerge is not needed
|
|
ci: gen-cover
|
|
|
|
yubikey-tests: override PKGS = github.com/docker/notary/cmd/notary github.com/docker/notary/trustmanager/yubikey
|
|
yubikey-tests: ci
|
|
|
|
covmerge:
|
|
@gocovmerge $(shell ls -1 $(COVERDIR)/* | tr "\n" " ") > $(COVERPROFILE)
|
|
@go tool cover -func="$(COVERPROFILE)"
|
|
|
|
clean-protos:
|
|
@rm proto/*.pb.go
|
|
|
|
client: ${PREFIX}/bin/notary
|
|
@echo "+ $@"
|
|
|
|
binaries: ${PREFIX}/bin/notary-server ${PREFIX}/bin/notary ${PREFIX}/bin/notary-signer
|
|
@echo "+ $@"
|
|
|
|
static: ${PREFIX}/bin/static/notary-server ${PREFIX}/bin/static/notary-signer
|
|
@echo "+ $@"
|
|
|
|
notary-dockerfile:
|
|
@docker build --rm --force-rm -t notary .
|
|
|
|
server-dockerfile:
|
|
@docker build --rm --force-rm -f server.Dockerfile -t notary-server .
|
|
|
|
signer-dockerfile:
|
|
@docker build --rm --force-rm -f signer.Dockerfile -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
|
|
|
|
cross: notary-dockerfile
|
|
@rm -rf $(CURDIR)/cross
|
|
docker run --rm -v $(CURDIR)/cross:$(NOTARYDIR)/cross -e NOTARY_BUILDTAGS=$(NOTARY_BUILDTAGS) notary buildscripts/cross.sh $(GOOSES)
|
|
|
|
|
|
clean:
|
|
@echo "+ $@"
|
|
@rm -rf "$(COVERDIR)"
|
|
@rm -rf "${PREFIX}/bin/notary-server" "${PREFIX}/bin/notary" "${PREFIX}/bin/notary-signer"
|