2016-02-22 00:13:08 +00:00
all : push
2016-11-10 22:56:29 +00:00
BUILDTAGS =
2016-12-11 17:14:53 +00:00
# Use the 0.0 tag for testing, it shouldn't clobber any release builds
2017-06-30 14:11:11 +00:00
TAG ?= 0.9.0-beta.10
2017-06-28 00:18:08 +00:00
REGISTRY ?= gcr.io/google_containers
2016-11-10 22:56:29 +00:00
GOOS ?= linux
2017-02-02 10:22:44 +00:00
DOCKER ?= gcloud docker --
2016-02-22 00:13:08 +00:00
2016-04-06 14:46:06 +00:00
REPO_INFO = $( shell git config --get remote.origin.url)
2016-11-10 22:56:29 +00:00
i f n d e f C O M M I T
COMMIT := git-$( shell git rev-parse --short HEAD)
2016-04-06 14:46:06 +00:00
e n d i f
2016-11-10 22:56:29 +00:00
PKG = k8s.io/ingress/controllers/nginx
2017-06-28 00:18:08 +00:00
ARCH ?= $( shell go env GOARCH)
GOARCH = ${ ARCH }
DUMB_ARCH = ${ ARCH }
ALL_ARCH = amd64 arm ppc64le
QEMUVERSION = v2.7.0
IMGNAME = nginx-ingress-controller
IMAGE = $( REGISTRY) /$( IMGNAME)
MULTI_ARCH_IMG = $( IMAGE) -$( ARCH)
# Set default base image dynamically for each arch
BASEIMAGE ?= gcr.io/google_containers/nginx-slim-$( ARCH) :0.20
i f e q ( $( ARCH ) , a r m )
QEMUARCH = arm
GOARCH = arm
DUMB_ARCH = armhf
e n d i f
#ifeq ($(ARCH),arm64)
# QEMUARCH=aarch64
#endif
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)
all : all -container
sub-container-% :
$( MAKE) ARCH = $* build container
sub-push-% :
$( MAKE) ARCH = $* push
2016-11-10 22:56:29 +00:00
2017-06-28 00:18:08 +00:00
all-container : $( addprefix sub -container -,$ ( ALL_ARCH ) )
2016-11-10 22:56:29 +00:00
2017-06-28 00:18:08 +00:00
all-push : $( addprefix sub -push -,$ ( ALL_ARCH ) )
container : .container -$( ARCH )
.container-$(ARCH) :
cp -r ./* $( TEMP_DIR)
cd $( TEMP_DIR) && sed -i 's|BASEIMAGE|$(BASEIMAGE)|g' rootfs/Dockerfile
cd $( TEMP_DIR) && sed -i " s|QEMUARCH| $( QEMUARCH) |g " rootfs/Dockerfile
cd $( TEMP_DIR) && sed -i " s|DUMB_ARCH| $( DUMB_ARCH) |g " rootfs/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
cd $( TEMP_DIR) && sed -i "/CROSS_BUILD_/d" rootfs/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
cd $( TEMP_DIR) && sed -i "s/CROSS_BUILD_//g" rootfs/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) : .container -$( 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
clean :
$( DOCKER) rmi -f $( MULTI_ARCH_IMG) :$( TAG) || true
build : clean
CGO_ENABLED = 0 GOOS = ${ GOOS } GOARCH = ${ GOARCH } go build -a -installsuffix cgo \
-ldflags " -s -w -X ${ PKG } /pkg/version.RELEASE= ${ TAG } -X ${ PKG } /pkg/version.COMMIT= ${ COMMIT } -X ${ PKG } /pkg/version.REPO= ${ REPO_INFO } " \
2017-06-30 02:26:21 +00:00
-o ${ TEMP_DIR } /rootfs/nginx-ingress-controller ${ PKG } /pkg/cmd/controller
2016-11-10 22:56:29 +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
lint :
@echo " + $@ "
@go list -f '{{if len .TestGoFiles}}"golint {{.Dir}}/..."{{end}}' $( shell go list ${ PKG } /... | grep -v vendor) | xargs -L 1 sh -c
test : fmt lint vet
@echo " + $@ "
@go test -v -race -tags " $( BUILDTAGS) cgo " $( shell go list ${ PKG } /... | grep -v vendor)
2016-02-22 00:13:08 +00:00
2016-11-10 22:56:29 +00:00
cover :
@echo " + $@ "
@go list -f '{{if len .TestGoFiles}}"go test -coverprofile={{.Dir}}/.coverprofile {{.ImportPath}}"{{end}}' $( shell go list ${ PKG } /... | grep -v vendor) | xargs -L 1 sh -c
gover
goveralls -coverprofile= gover.coverprofile -service travis-ci -repotoken ${ COVERALLS_TOKEN }
2016-02-22 00:13:08 +00:00
2016-11-10 22:56:29 +00:00
vet :
@echo " + $@ "
@go vet $( shell go list ${ PKG } /... | grep -v vendor)