|
# 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.
|
|
|
|
# cover-html creates coverage report for whole project excluding vendor and opens result in the default browser
|
|
.PHONY: cover cover-html
|
|
.DEFAULT_GOAL := build
|
|
|
|
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'))
|
|
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
|
|
gocovmerge `ls *.coverprofile` > cover.out
|
|
rm *.coverprofile
|
|
|
|
cover-html: cover
|
|
go tool cover -html cover.out
|
|
|
|
.PHONY: go-lint
|
|
|
|
# Run the golangci-lint tool
|
|
go-lint:
|
|
golangci-lint run --timeout=15m ./...
|
|
|
|
.PHONY: licensecheck
|
|
|
|
# Run the licensecheck script to check for license headers
|
|
licensecheck:
|
|
@echo ">> checking license header"
|
|
@licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \
|
|
awk 'NR<=5' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \
|
|
done); \
|
|
if [ -n "$${licRes}" ]; then \
|
|
echo "license header checking failed:"; echo "$${licRes}"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
.PHONY: lint
|
|
|
|
# Run all the linters
|
|
lint: licensecheck go-lint
|
|
|
|
|
|
# The verify target runs tasks similar to the CI tasks, but without code coverage
|
|
.PHONY: verify test
|
|
|
|
test:
|
|
go test -race -coverprofile=profile.cov ./...
|
|
|
|
# The build targets allow to build the binary and docker image
|
|
.PHONY: build build.docker build.mini
|
|
|
|
BINARY ?= external-dns
|
|
SOURCES = $(shell find . -name '*.go')
|
|
IMAGE_STAGING = gcr.io/k8s-staging-external-dns/$(BINARY)
|
|
IMAGE ?= us.gcr.io/k8s-artifacts-prod/external-dns/$(BINARY)
|
|
VERSION ?= $(shell git describe --tags --always --dirty)
|
|
BUILD_FLAGS ?= -v
|
|
LDFLAGS ?= -X sigs.k8s.io/external-dns/pkg/apis/externaldns.Version=$(VERSION) -w -s
|
|
|
|
build: build/$(BINARY)
|
|
|
|
build/$(BINARY): $(SOURCES)
|
|
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
|
|
|
|
build.push: build.docker
|
|
docker push "$(IMAGE):$(VERSION)"
|
|
|
|
build.docker:
|
|
docker build --rm --tag "$(IMAGE):$(VERSION)" --build-arg VERSION="$(VERSION)" .
|
|
|
|
build.mini:
|
|
docker build --rm --tag "$(IMAGE):$(VERSION)-mini" --build-arg VERSION="$(VERSION)" -f Dockerfile.mini .
|
|
|
|
clean:
|
|
@rm -rf build
|
|
|
|
# Builds and push container images to the staging bucket.
|
|
.PHONY: release.staging
|
|
|
|
release.staging:
|
|
IMAGE=$(IMAGE_STAGING) $(MAKE) build.docker build.push
|
|
|
|
release.prod:
|
|
$(MAKE) build.docker build.push
|