forked from TrueCloudLab/distribution
97cb7f35b0
Remove redundant AUTHORS file in favor of relying on .mailmap for keeping track of author names. Move older changelogs to release directory. Move release checklist to releases README. Signed-off-by: Derek McGowan <derek@mcgstyle.net>
102 lines
3.2 KiB
Makefile
102 lines
3.2 KiB
Makefile
# Root directory of the project (absolute path).
|
|
ROOTDIR=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
|
|
|
# Used to populate version variable in main package.
|
|
VERSION=$(shell git describe --match 'v[0-9]*' --dirty='.m' --always)
|
|
REVISION=$(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)
|
|
|
|
|
|
PKG=github.com/docker/distribution
|
|
|
|
# Project packages.
|
|
PACKAGES=$(shell go list -tags "${BUILDTAGS}" ./... | grep -v /vendor/)
|
|
INTEGRATION_PACKAGE=${PKG}
|
|
COVERAGE_PACKAGES=$(filter-out ${PKG}/registry/storage/driver/%,${PACKAGES})
|
|
|
|
|
|
# Project binaries.
|
|
COMMANDS=registry digest registry-api-descriptor-template
|
|
|
|
# Allow turning off function inlining and variable registerization
|
|
ifeq (${DISABLE_OPTIMIZATION},true)
|
|
GO_GCFLAGS=-gcflags "-N -l"
|
|
VERSION:="$(VERSION)-noopt"
|
|
endif
|
|
|
|
WHALE = "+"
|
|
|
|
# Go files
|
|
#
|
|
TESTFLAGS_RACE=
|
|
GOFILES=$(shell find . -type f -name '*.go')
|
|
GO_TAGS=$(if $(BUILDTAGS),-tags "$(BUILDTAGS)",)
|
|
GO_LDFLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PKG) $(EXTRA_LDFLAGS)'
|
|
|
|
BINARIES=$(addprefix bin/,$(COMMANDS))
|
|
|
|
# Flags passed to `go test`
|
|
TESTFLAGS ?= -v $(TESTFLAGS_RACE)
|
|
TESTFLAGS_PARALLEL ?= 8
|
|
|
|
.PHONY: all build binaries check clean test test-race test-full integration coverage
|
|
.DEFAULT: all
|
|
|
|
all: binaries
|
|
|
|
# This only needs to be generated by hand when cutting full releases.
|
|
version/version.go:
|
|
@echo "$(WHALE) $@"
|
|
./version/version.sh > $@
|
|
|
|
check: ## run all linters (TODO: enable "unused", "varcheck", "ineffassign", "unconvert", "staticheck", "goimports", "structcheck")
|
|
@echo "$(WHALE) $@"
|
|
gometalinter --config .gometalinter.json ./...
|
|
|
|
test: ## run tests, except integration test with test.short
|
|
@echo "$(WHALE) $@"
|
|
@go test ${GO_TAGS} -test.short ${TESTFLAGS} $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES})
|
|
|
|
test-race: ## run tests, except integration test with test.short and race
|
|
@echo "$(WHALE) $@"
|
|
@go test ${GO_TAGS} -race -test.short ${TESTFLAGS} $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES})
|
|
|
|
test-full: ## run tests, except integration tests
|
|
@echo "$(WHALE) $@"
|
|
@go test ${GO_TAGS} ${TESTFLAGS} $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES})
|
|
|
|
integration: ## run integration tests
|
|
@echo "$(WHALE) $@"
|
|
@go test ${TESTFLAGS} -parallel ${TESTFLAGS_PARALLEL} ${INTEGRATION_PACKAGE}
|
|
|
|
coverage: ## generate coverprofiles from the unit tests
|
|
@echo "$(WHALE) $@"
|
|
@rm -f coverage.txt
|
|
@go test ${GO_TAGS} -i ${TESTFLAGS} $(filter-out ${INTEGRATION_PACKAGE},${COVERAGE_PACKAGES}) 2> /dev/null
|
|
@( for pkg in $(filter-out ${INTEGRATION_PACKAGE},${COVERAGE_PACKAGES}); do \
|
|
go test ${GO_TAGS} ${TESTFLAGS} \
|
|
-cover \
|
|
-coverprofile=profile.out \
|
|
-covermode=atomic $$pkg || exit; \
|
|
if [ -f profile.out ]; then \
|
|
cat profile.out >> coverage.txt; \
|
|
rm profile.out; \
|
|
fi; \
|
|
done )
|
|
|
|
FORCE:
|
|
|
|
# Build a binary from a cmd.
|
|
bin/%: cmd/% FORCE
|
|
@echo "$(WHALE) $@${BINARY_SUFFIX}"
|
|
@go build ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@${BINARY_SUFFIX} ${GO_LDFLAGS} ${GO_TAGS} ./$<
|
|
|
|
binaries: $(BINARIES) ## build binaries
|
|
@echo "$(WHALE) $@"
|
|
|
|
build:
|
|
@echo "$(WHALE) $@"
|
|
@go build ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${GO_LDFLAGS} ${GO_TAGS} $(PACKAGES)
|
|
|
|
clean: ## clean up binaries
|
|
@echo "$(WHALE) $@"
|
|
@rm -f $(BINARIES)
|