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-09-08 14:34:59 +00:00
TAG ?= 0.9.0-beta.13
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 --
2017-07-18 20:41:07 +00:00
SED_I ?= sed -i
GOHOSTOS ?= $( shell go env GOHOSTOS)
i f e q ( $( GOHOSTOS ) , d a r w i n )
SED_I = sed -i ''
e n d i f
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 }
2017-08-08 03:08:02 +00:00
ALL_ARCH = amd64 arm arm64 ppc64le
2017-06-28 00:18:08 +00:00
2017-08-08 03:08:02 +00:00
QEMUVERSION = v2.9.1
2017-06-28 00:18:08 +00:00
IMGNAME = nginx-ingress-controller
IMAGE = $( REGISTRY) /$( IMGNAME)
MULTI_ARCH_IMG = $( IMAGE) -$( ARCH)
# Set default base image dynamically for each arch
2017-09-08 14:34:59 +00:00
BASEIMAGE ?= gcr.io/google_containers/nginx-slim-$( ARCH) :0.24
2017-06-28 00:18:08 +00:00
i f e q ( $( ARCH ) , a r m )
QEMUARCH = arm
GOARCH = arm
DUMB_ARCH = armhf
e n d i f
2017-08-08 03:08:02 +00:00
i f e q ( $( ARCH ) , a r m 6 4 )
QEMUARCH = aarch64
e n d i f
2017-06-28 00:18:08 +00:00
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
2017-08-08 03:08:02 +00:00
TEMP_DIR := $( shell mktemp -d)
2017-08-03 15:10:30 +00:00
DOCKERFILE := $( TEMP_DIR) /rootfs/Dockerfile
2017-06-28 00:18:08 +00:00
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)
2017-08-03 15:10:30 +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)
2017-06-28 00:18:08 +00:00
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
2017-08-03 15:10:30 +00:00
$( SED_I) "/CROSS_BUILD_/d" $( DOCKERFILE)
2017-06-28 00:18:08 +00:00
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
2017-08-03 15:10:30 +00:00
$( SED_I) "s/CROSS_BUILD_//g" $( DOCKERFILE)
2017-06-28 00:18:08 +00:00
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 )
2017-06-30 20:19:41 +00:00
.push-$(ARCH) :
2017-06-28 00:18:08 +00:00
$( 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
2017-06-30 20:19:41 +00:00
clean :
2017-06-28 00:18:08 +00:00
$( 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)
2017-06-30 20:19:41 +00:00
release : all -container all -push
echo "done"