Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 19c7114

Browse files
authored
Merge pull request #10 from chris-crone/simple-ci
Rework build for CI
2 parents 3b66b4e + ec966d5 commit 19c7114

File tree

5 files changed

+64
-27
lines changed

5 files changed

+64
-27
lines changed

.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
.git
12
*.docker-app
3+
*.tar.gz
24
_build/

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
*.tar.gz
12
*.docker-app
23
_build/

Dockerfile

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
ARG GO_VERSION=1.10
2-
ARG RUN_BASE_TAG=3.7
3-
ARG BUILD_BASE_TAG=${GO_VERSION}-alpine${RUN_BASE_TAG}
1+
ARG ALPINE_VERSION=3.7
2+
ARG GO_VERSION=1.10.1
3+
ARG TAG=unknown
44

5-
FROM golang:${BUILD_BASE_TAG} AS build
5+
FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS build
66
RUN apk add --no-cache \
7-
make
7+
build-base \
8+
git
89
WORKDIR /go/src/github.com/docker/lunchbox/
910
COPY . .
10-
RUN make bin
1111

12-
FROM alpine:${RUN_BASE_TAG} AS run
13-
COPY --from=build /go/src/github.com/docker/lunchbox/_build/bin/docker-app /
14-
ENTRYPOINT ["/docker-app"]
12+
FROM build AS bin-build
13+
ARG TAG
14+
RUN make TAG=${TAG} bin-all
15+
16+
FROM build AS test
17+
ARG TAG
18+
RUN make TAG=${TAG} unit-test e2e-test

Jenkinsfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
node('gcp-linux-worker-0') {
2+
stage('Build') {
3+
dir('src/github.com/docker/lunchbox') {
4+
checkout scm
5+
sh 'docker image prune -f'
6+
sh 'make ci-lint'
7+
sh 'make ci-test'
8+
sh 'make ci-bin-linux'
9+
sh 'make ci-bin-darwin'
10+
sh 'make ci-bin-windows'
11+
archiveArtifacts '*.tar.gz'
12+
}
13+
}
14+
}

Makefile

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
PKG_NAME := github.com/docker/lunchbox
22
BIN_NAME := docker-app
33

4-
TAG := ${shell git describe --always --dirty}
4+
TAG ?= $(shell git describe --always --dirty)
55

66
IMAGE_NAME := docker-app
77

8-
GO_VERSION := 1.10
9-
RUN_BASE_TAG := 3.7
8+
ALPINE_VERSION := 3.7
9+
GO_VERSION := 1.10.1
1010

1111
IMAGE_BUILD_ARGS := \
12+
--build-arg ALPINE_VERSION=$(ALPINE_VERSION) \
1213
--build-arg GO_VERSION=$(GO_VERSION) \
13-
--build-arg RUN_BASE_TAG=$(RUN_BASE_TAG)
14+
--build-arg BIN_NAME=$(BIN_NAME) \
15+
--build-arg TAG=$(TAG)
1416

15-
LDFLAGS :=
17+
LDFLAGS := "-s -w"
18+
19+
#####################
20+
# Local Development #
21+
#####################
1622

1723
EXEC_EXT :=
1824
ifeq ($(OS),Windows_NT)
@@ -26,22 +32,18 @@ CHECK_GO_ENV:
2632
(echo "Invalid Go environment" && false)
2733

2834
bin: CHECK_GO_ENV
29-
@echo "Building _build/bin/$(BIN_NAME)$(EXEC_EXT)..."
30-
@go build -ldflags=$(LDFLAGS) -i -o _build/bin/$(BIN_NAME)$(EXEC_EXT) ./
35+
@echo "Building _build/$(BIN_NAME)$(EXEC_EXT)..."
36+
go build -ldflags=$(LDFLAGS) -i -o _build/$(BIN_NAME)$(EXEC_EXT)
3137

38+
OS_LIST ?= darwin linux windows
3239
bin-all: CHECK_GO_ENV
33-
@echo "Building for all archs in _build/$(TAG)"
34-
GOOS=windows go build -ldflags=$(LDFLAGS) -i -o _build/$(TAG)/$(BIN_NAME)-windows.exe ./
35-
GOOS=linux go build -ldflags=$(LDFLAGS) -i -o _build/$(TAG)/$(BIN_NAME)-linux ./
36-
GOOS=darwin go build -ldflags=$(LDFLAGS) -i -o _build/$(TAG)/$(BIN_NAME)-macos ./
40+
@echo "Building for all platforms..."
41+
$(foreach OS, $(OS_LIST), GOOS=$(OS) go build -ldflags=$(LDFLAGS) -i -o _build/$(TAG)/$(BIN_NAME)-$(OS)$(if $(filter windows, $(OS)),.exe,) || exit 1;)
3742

3843
release:
3944
gsutil cp -r _build/$(TAG) gs://docker_app
4045

41-
image:
42-
@docker build -t $(IMAGE_NAME) $(IMAGE_BUILD_ARGS) . --target run
43-
44-
test: lint unit-test e2e-test
46+
test check: lint unit-test e2e-test
4547

4648
lint:
4749
@echo "Linting..."
@@ -50,14 +52,28 @@ lint:
5052

5153
e2e-test:
5254
@echo "Running e2e tests..."
53-
@go test ./e2e/
55+
go test ./e2e/
5456

5557
unit-test:
5658
@echo "Running unit tests..."
57-
@go test $(shell go list ./... | grep -vE '/vendor/|/e2e')
59+
go test $(shell go list ./... | grep -vE '/vendor/|/e2e')
5860

5961
clean:
6062
rm -Rf ./_build
6163

62-
.PHONY: bin image test lint e2e-test unit-test clean
64+
######
65+
# CI #
66+
######
67+
68+
ci-lint: lint
69+
70+
ci-test:
71+
docker build -t $(IMAGE_NAME)-test $(IMAGE_BUILD_ARGS) . --target=test
72+
73+
ci-bin-%:
74+
@echo "Building tarball for $*..."
75+
docker build -t $(IMAGE_NAME)-bin-all $(IMAGE_BUILD_ARGS) . --target=bin-build
76+
docker run --rm $(IMAGE_NAME)-bin-all tar -cz $(BIN_NAME)-$*$(if $(filter windows, $*),.exe,) -C /go/src/$(PKG_NAME)/_build/$(TAG)/ > $(BIN_NAME)-$*-$(TAG).tar.gz
77+
78+
.PHONY: bin bin-all release test check lint e2e-test unit-test clean ci-lint ci-test
6379
.DEFAULT: all

0 commit comments

Comments
 (0)