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-10-06 19:58:36 +00:00
all : push
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
TAG ?= 0.9.0-beta.15
REGISTRY ?= gcr.io/google_containers
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-10-06 19:58:36 +00:00
ALL_ARCH = amd64 arm arm64 ppc64le
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-10-08 14:52:02 +00:00
BASEIMAGE ?= gcr.io/google_containers/nginx-slim-$( ARCH) :0.26
2017-10-06 19:58:36 +00:00
i f e q ( $( ARCH ) , a r m )
QEMUARCH = arm
GOARCH = arm
DUMB_ARCH = armhf
e n d i f
i f e q ( $( ARCH ) , a r m 6 4 )
QEMUARCH = aarch64
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
#ifeq ($(ARCH),s390x)
# QEMUARCH=s390x
#endif
TEMP_DIR := $( shell mktemp -d)
DOCKERFILE := $( TEMP_DIR) /rootfs/Dockerfile
all : all -container
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
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