Skip to content

Commit 8bd106a

Browse files
committed
Docker multistage build
1 parent f51a997 commit 8bd106a

File tree

3 files changed

+37
-53
lines changed

3 files changed

+37
-53
lines changed

.goreleaser.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
builds:
2+
- binary: kafka-proxy
3+
goos:
4+
- windows
5+
- darwin
6+
- linux
7+
goarch:
8+
- amd64
9+
ldflags: -s -w -X github.com/grepplabs/kafka-proxy/config.Version={{.Version}}
10+
archive:
11+
format: tar.gz
12+
files:
13+
- LICENSE

Dockerfile.build

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
FROM golang:1.10
1+
FROM golang:1.10 as builder
22

3-
ARG target=build
3+
ARG GOOS=linux
4+
ARG GOARCH=amd64
45

56
WORKDIR /go/src/github.com/grepplabs/kafka-proxy
67
COPY . .
7-
RUN make clean test $target
8+
RUN make -e GOARCH=${GOARCH} -e GOOS=${GOOS} clean build
9+
10+
FROM alpine:3.7
11+
12+
RUN apk add --no-cache ca-certificates
13+
14+
COPY --from=builder /go/src/github.com/grepplabs/kafka-proxy/build/kafka-proxy /kafka-proxy
15+
16+
ENTRYPOINT ["/kafka-proxy"]
17+
CMD ["--help"]

Makefile

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
.DEFAULT_GOAL := build
22

3-
.PHONY: clean build build.local build.linux build.osx build.docker build.docker-build.linux build.docker-build.osx
3+
.PHONY: clean build build.docker tag all
44

55
BINARY ?= kafka-proxy
66
SOURCES = $(shell find . -name '*.go' | grep -v /vendor/)
77
VERSION ?= $(shell git describe --tags --always --dirty)
88
GOPKGS = $(shell go list ./... | grep -v /vendor/)
99
BUILD_FLAGS ?=
1010
LDFLAGS ?= -X github.com/grepplabs/kafka-proxy/config.Version=$(VERSION) -w -s
11-
TAG ?= "v0.0.3"
11+
TAG ?= "v0.0.4"
12+
GOARCH ?= amd64
13+
GOOS ?= linux
1214

13-
PLATFORM ?= $(shell uname -s)
14-
ifeq ($(PLATFORM), Darwin)
15-
BUILD_DOCKER_BUILD=build.docker-build.osx
16-
else
17-
BUILD_DOCKER_BUILD=build.docker-build.linux
18-
endif
19-
20-
default: build.local
15+
default: build
2116

2217
test.race:
2318
GOCACHE=off go test -v -race `go list ./...`
@@ -33,54 +28,20 @@ check:
3328
go vet $(GOPKGS)
3429

3530

36-
build.local: build/$(BINARY)
37-
build.linux: build/linux/$(BINARY)
38-
build.osx: build/osx/$(BINARY)
39-
4031
build: build/$(BINARY)
4132

4233
build/$(BINARY): $(SOURCES)
43-
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
44-
45-
build/linux/$(BINARY): $(SOURCES)
46-
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o build/linux/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
47-
48-
build/osx/$(BINARY): $(SOURCES)
49-
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -o build/osx/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
50-
51-
build.docker-build: $(BUILD_DOCKER_BUILD)
52-
53-
build.docker-build.linux:
54-
set -e ;\
55-
buildContainerName=${BINARY}-buildcontainer ;\
56-
docker build -t $$buildContainerName --build-arg target=build.linux -f Dockerfile.build . ;\
57-
buildContainer=$$(docker create $$buildContainerName) ;\
58-
echo "containerId: $$buildContainer" ;\
59-
mkdir -p build ;\
60-
docker cp $$buildContainer:/go/src/github.com/grepplabs/kafka-proxy/build/linux/${BINARY} build/${BINARY} ;\
61-
docker rm $$buildContainer ;\
62-
docker rmi $$buildContainerName ;\
63-
64-
build.docker-build.osx:
65-
set -e ;\
66-
buildContainerName=${BINARY}-buildcontainer ;\
67-
docker build -t $$buildContainerName --build-arg target=build.osx -f Dockerfile.build . ;\
68-
buildContainer=$$(docker create $$buildContainerName) ;\
69-
echo "containerId: $$buildContainer" ;\
70-
mkdir -p build ;\
71-
docker cp $$buildContainer:/go/src/github.com/grepplabs/kafka-proxy/build/osx/${BINARY} build/${BINARY} ;\
72-
docker rm $$buildContainer ;\
73-
docker rmi $$buildContainerName ;\
34+
GOOS=$(GOOS) GOARCH=$(GOARCH) CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
35+
36+
docker.build:
37+
docker build --build-arg GOOS=$(GOOS) --build-arg GOARCH=$(GOARCH) -f Dockerfile.build .
7438

7539
tag:
7640
git tag $(TAG)
7741

78-
release: clean build.linux build.osx
42+
release: clean
7943
git push origin $(TAG)
80-
github-release release -u grepplabs -r $(BINARY) --tag $(TAG)
81-
github-release upload -u grepplabs -r $(BINARY) -t $(TAG) -f build/linux/$(BINARY) -n linux/amd64/$(BINARY)
82-
github-release upload -u grepplabs -r $(BINARY) -t $(TAG) -f build/osx/$(BINARY) -n darwin/amd64/$(BINARY)
83-
github-release info -u grepplabs -r $(BINARY)
44+
curl -sL https://git.io/goreleaser | bash
8445

8546
protoc.local-auth:
8647
protoc -I plugin/local-auth/proto/ plugin/local-auth/proto/auth.proto --go_out=plugins=grpc:plugin/local-auth/proto/

0 commit comments

Comments
 (0)