Makefile 2.27 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Copyright 2017 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Yerken's avatar
Yerken committed
15
16
# cover-html creates coverage report for whole project excluding vendor and opens result in the default browser
.PHONY: cover cover-html
17
.DEFAULT_GOAL := build
Yerken's avatar
Yerken committed
18
19
20
21
22

cover:
	go get github.com/wadey/gocovmerge
	$(eval PKGS := $(shell go list ./... | grep -v /vendor/))
	$(eval PKGS_DELIM := $(shell echo $(PKGS) | sed -e 's/ /,/g'))
23
	go list -f '{{if or (len .TestGoFiles) (len .XTestGoFiles)}}go test -test.v -test.timeout=120s -covermode=count -coverprofile={{.Name}}_{{len .Imports}}_{{len .Deps}}.coverprofile -coverpkg $(PKGS_DELIM) {{.ImportPath}}{{end}}' $(PKGS) | xargs -0 sh -c
Yerken's avatar
Yerken committed
24
25
26
27
28
29
	gocovmerge `ls *.coverprofile` > cover.out
	rm *.coverprofile

cover-html: cover
	go tool cover -html cover.out

njuettner's avatar
njuettner committed
30
31
32
33
34
35
.PHONY: lint

# Run all the linters
lint:
	golangci-lint run ./...

Yerken's avatar
Yerken committed
36

37
# The verify target runs tasks similar to the CI tasks, but without code coverage
ideahitme's avatar
ideahitme committed
38
.PHONY: verify test
Yerken's avatar
Yerken committed
39

ideahitme's avatar
ideahitme committed
40
test:
41
	go test -v -race $(shell go list ./... | grep -v /vendor/)
ideahitme's avatar
ideahitme committed
42

43
# The build targets allow to build the binary and docker image
44
.PHONY: build build.docker build.mini
45

46
47
BINARY        ?= external-dns
SOURCES        = $(shell find . -name '*.go')
48
IMAGE         ?= registry.opensource.zalan.do/teapot/$(BINARY)
49
50
VERSION       ?= $(shell git describe --tags --always --dirty)
BUILD_FLAGS   ?= -v
Julian Vassev's avatar
Julian Vassev committed
51
LDFLAGS       ?= -X github.com/kubernetes-incubator/external-dns/pkg/apis/externaldns.Version=$(VERSION) -w -s
52
53
54
55

build: build/$(BINARY)

build/$(BINARY): $(SOURCES)
56
	CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
57

58
59
60
build.push: build.docker
	docker push "$(IMAGE):$(VERSION)"

61
build.docker:
62
63
	docker build --rm --tag "$(IMAGE):$(VERSION)" .

64
65
build.mini:
	docker build --rm --tag "$(IMAGE):$(VERSION)" -f Dockerfile.mini .
66

67
68
clean:
	@rm -rf build