2017-10-17 22:50:27 +00:00
# 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.
2017-11-12 03:40:10 +00:00
all : all -container
2016-11-11 01:45:20 +00:00
BUILDTAGS =
2017-10-06 19:58:36 +00:00
# Use the 0.0 tag for testing, it shouldn't clobber any release builds
2017-11-09 18:59:37 +00:00
TAG ?= 0.9.0-beta.17
2017-10-24 20:16:24 +00:00
REGISTRY ?= quay.io/kubernetes-ingress-controller
2017-10-06 19:58:36 +00:00
GOOS ?= linux
DOCKER ?= gcloud docker --
SED_I ?= sed -i
GOHOSTOS ?= $( shell go env GOHOSTOS)
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
i f e q ( $( GOHOSTOS ) , d a r w i n )
SED_I = sed -i ''
e n d i f
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
REPO_INFO = $( shell git config --get remote.origin.url)
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
i f n d e f C O M M I T
COMMIT := git-$( shell git rev-parse --short HEAD)
e n d i f
2016-11-11 01:45:20 +00:00
2017-10-06 20:11:04 +00:00
PKG = k8s.io/ingress-nginx
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
ARCH ?= $( shell go env GOARCH)
GOARCH = ${ ARCH }
DUMB_ARCH = ${ ARCH }
2016-11-11 01:45:20 +00:00
2017-11-12 03:40:10 +00:00
ALL_ARCH = amd64 arm arm64 ppc64le s390x
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
QEMUVERSION = v2.9.1
IMGNAME = nginx-ingress-controller
IMAGE = $( REGISTRY) /$( IMGNAME)
MULTI_ARCH_IMG = $( IMAGE) -$( ARCH)
# Set default base image dynamically for each arch
2017-11-12 04:00:28 +00:00
BASEIMAGE ?= quay.io/kubernetes-ingress-controller/nginx-slim-$( ARCH) :0.28
2017-10-06 19:58:36 +00:00
i f e q ( $( ARCH ) , a r m )
2017-10-24 03:30:20 +00:00
QEMUARCH = arm
2017-10-06 19:58:36 +00:00
GOARCH = arm
DUMB_ARCH = armhf
e n d i f
i f e q ( $( ARCH ) , a r m 6 4 )
2017-11-12 03:40:10 +00:00
QEMUARCH = aarch64
2017-10-06 19:58:36 +00:00
e n d i f
i f e q ( $( ARCH ) , p p c 6 4 l e )
QEMUARCH = ppc64le
GOARCH = ppc64le
DUMB_ARCH = ppc64el
e n d i f
2017-11-12 03:40:10 +00:00
i f e q ( $( ARCH ) , s 3 9 0 x )
QEMUARCH = s390x
e n d i f
2017-10-06 19:58:36 +00:00
TEMP_DIR := $( shell mktemp -d)
DOCKERFILE := $( TEMP_DIR) /rootfs/Dockerfile
2017-10-24 03:30:20 +00:00
image-info :
echo -n '{"image":"$(IMAGE)","tag":"$(TAG)"}'
2017-10-06 19:58:36 +00:00
sub-container-% :
$( MAKE) ARCH = $* build container
sub-push-% :
$( MAKE) ARCH = $* push
all-container : $( addprefix sub -container -,$ ( ALL_ARCH ) )
all-push : $( addprefix sub -push -,$ ( ALL_ARCH ) )
container : .container -$( ARCH )
.container-$(ARCH) :
2017-10-17 18:57:58 +00:00
cp -RP ./* $( TEMP_DIR)
2017-10-06 19:58:36 +00:00
$( SED_I) 's|BASEIMAGE|$(BASEIMAGE)|g' $( DOCKERFILE)
$( SED_I) " s|QEMUARCH| $( QEMUARCH) |g " $( DOCKERFILE)
$( SED_I) " s|DUMB_ARCH| $( DUMB_ARCH) |g " $( DOCKERFILE)
i f e q ( $( ARCH ) , a m d 6 4 )
# When building "normally" for amd64, remove the whole line, it has no part in the amd64 image
$( SED_I) "/CROSS_BUILD_/d" $( DOCKERFILE)
e l s e
# When cross-building, only the placeholder "CROSS_BUILD_" should be removed
# Register /usr/bin/qemu-ARCH-static as the handler for ARM binaries in the kernel
$( DOCKER) run --rm --privileged multiarch/qemu-user-static:register --reset
curl -sSL https://github.com/multiarch/qemu-user-static/releases/download/$( QEMUVERSION) /x86_64_qemu-$( QEMUARCH) -static.tar.gz | tar -xz -C $( TEMP_DIR) /rootfs
$( SED_I) "s/CROSS_BUILD_//g" $( DOCKERFILE)
e n d i f
$( DOCKER) build -t $( MULTI_ARCH_IMG) :$( TAG) $( TEMP_DIR) /rootfs
i f e q ( $( ARCH ) , a m d 6 4 )
# This is for to maintain the backward compatibility
$( DOCKER) tag $( MULTI_ARCH_IMG) :$( TAG) $( IMAGE) :$( TAG)
e n d i f
push : .push -$( ARCH )
.push-$(ARCH) :
$( DOCKER) push $( MULTI_ARCH_IMG) :$( TAG)
i f e q ( $( ARCH ) , a m d 6 4 )
$( DOCKER) push $( IMAGE) :$( TAG)
e n d i f
2016-11-11 01:45:20 +00:00
clean :
2017-10-06 19:58:36 +00:00
$( DOCKER) rmi -f $( MULTI_ARCH_IMG) :$( TAG) || true
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
build : clean
CGO_ENABLED = 0 GOOS = ${ GOOS } GOARCH = ${ GOARCH } go build -a -installsuffix cgo \
2017-10-06 20:11:04 +00:00
-ldflags " -s -w -X ${ PKG } /version.RELEASE= ${ TAG } -X ${ PKG } /version.COMMIT= ${ COMMIT } -X ${ PKG } /version.REPO= ${ REPO_INFO } " \
-o ${ TEMP_DIR } /rootfs/nginx-ingress-controller ${ PKG } /cmd/nginx
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
fmt :
@echo " + $@ "
@go list -f '{{if len .TestGoFiles}}"gofmt -s -l {{.Dir}}"{{end}}' $( shell go list ${ PKG } /... | grep -v vendor) | xargs -L 1 sh -c
2016-11-11 01:45:20 +00:00
2017-10-06 19:58:36 +00:00
lint :
@echo " + $@ "
2017-10-17 22:50:27 +00:00
@go list -f '{{if len .TestGoFiles}}"golint {{.Dir}}/..."{{end}}' $( shell go list ${ PKG } /... | grep -v vendor | grep -v '/test/e2e' ) | xargs -L 1 sh -c
2017-10-06 19:58:36 +00:00
test : fmt lint vet
@echo " + $@ "
2017-10-17 22:50:27 +00:00
@go test -v -race -tags " $( BUILDTAGS) cgo " $( shell go list ${ PKG } /... | grep -v vendor | grep -v '/test/e2e' )
e2e-image : sub -container -amd 64
TAG = $( TAG) IMAGE = $( MULTI_ARCH_IMG) docker tag $( IMAGE) :$( TAG) $( IMAGE) :test
docker images
e2e-test :
@go test -o e2e-tests -c ./test/e2e
@KUBECONFIG= ${ HOME } /.kube/config INGRESSNGINXCONFIG = ${ HOME } /.kube/config ./e2e-tests
2017-10-06 19:58:36 +00:00
cover :
@echo " + $@ "
2017-10-17 22:50:27 +00:00
@go list -f '{{if len .TestGoFiles}}"go test -coverprofile={{.Dir}}/.coverprofile {{.ImportPath}}"{{end}}' $( shell go list ${ PKG } /... | grep -v vendor | grep -v '/test/e2e' ) | xargs -L 1 sh -c
2017-10-06 19:58:36 +00:00
gover
2017-11-06 14:17:40 +00:00
goveralls -coverprofile= gover.coverprofile -service travis-ci -repotoken $$ COVERALLS_TOKEN
2016-12-15 12:50:02 +00:00
2017-10-06 19:58:36 +00:00
vet :
@echo " + $@ "
@go vet $( shell go list ${ PKG } /... | grep -v vendor)
2017-06-30 20:19:41 +00:00
2017-10-06 19:58:36 +00:00
release : all -container all -push
echo "done"
2017-10-06 20:11:04 +00:00
2017-10-17 22:50:27 +00:00
.PHONY : docker -build
2017-10-06 20:11:04 +00:00
docker-build : all -container
2017-10-17 22:50:27 +00:00
.PHONY : docker -push
docker-push : all -push
2017-10-21 01:24:57 +00:00
.PHONY : check_dead_links
check_dead_links :
docker run -t -v $$ PWD:/tmp rubygem/awesome_bot --allow-dupe --allow-redirect $( shell find $$ PWD -name "*.md" -mindepth 1 -printf '%P\n' | grep -v vendor | grep -v Changelog.md)