Skip to content

Commit ada75e9

Browse files
committed
Build a manifest list
Retool some of the build/test to produce a manifest-list rather than a single image.
1 parent 76bda81 commit ada75e9

File tree

4 files changed

+97
-81
lines changed

4 files changed

+97
-81
lines changed

Dockerfile.in

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
FROM ARG_FROM
15+
FROM {ARG_FROM}
1616

1717
MAINTAINER Tim Hockin <[email protected]>
1818

19-
ADD bin/ARG_ARCH/ARG_BIN /ARG_BIN
19+
ADD bin/{ARG_OS}_{ARG_ARCH}/{ARG_BIN} /{ARG_BIN}
2020

2121
RUN apk update --no-cache && apk add \
2222
ca-certificates \
@@ -28,4 +28,4 @@ RUN apk update --no-cache && apk add \
2828
ENV HOME /tmp
2929

3030
USER nobody:nobody
31-
ENTRYPOINT ["/ARG_BIN"]
31+
ENTRYPOINT ["/{ARG_BIN}"]

Makefile

Lines changed: 83 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ PKG := k8s.io/git-sync
2121
# Where to push the docker image.
2222
REGISTRY ?= staging-k8s.gcr.io
2323

24-
# Which architecture to build - see $(ALL_ARCH) for options.
25-
ARCH ?= amd64
24+
# Which platform to build - see $(ALL_PLATFORMS) for options.
25+
PLATFORM ?= linux/amd64
26+
27+
OS := $(firstword $(subst /, ,$(PLATFORM)))
28+
ARCH := $(lastword $(subst /, ,$(PLATFORM)))
2629

2730
# This version-strategy uses git tags to set the version string
2831
VERSION := $(shell git describe --tags --always --dirty)
@@ -36,27 +39,29 @@ VERSION := $(shell git describe --tags --always --dirty)
3639

3740
SRC_DIRS := cmd pkg # directories which hold app source (not vendored)
3841

39-
ALL_ARCH := amd64
42+
ALL_PLATFORMS := linux/amd64
4043

41-
# TODO: get a baseimage that works for other architectures
42-
# arm arm64 ppc64le
44+
# TODO: get a baseimage that works for other platforms
45+
# linux/arm linux/arm64 linux/ppc64le
4346

4447
# Set default base image dynamically for each arch
45-
ifeq ($(ARCH),amd64)
46-
BASEIMAGE?=alpine:3.7
47-
endif
48-
ifeq ($(ARCH),arm)
49-
BASEIMAGE?=armel/busybox
50-
endif
51-
ifeq ($(ARCH),arm64)
52-
BASEIMAGE?=aarch64/busybox
53-
endif
54-
ifeq ($(ARCH),ppc64le)
55-
BASEIMAGE?=ppc64le/busybox
48+
ifeq ($(PLATFORM),linux/amd64)
49+
BASEIMAGE ?= alpine:3.8
50+
#endif
51+
#ifeq ($(PLATFORM),linux/arm)
52+
# BASEIMAGE ?= armel/busybox
53+
#endif
54+
#ifeq ($(PLATFORM),linux/arm64)
55+
# BASEIMAGE ?= aarch64/busybox
56+
#endif
57+
#ifeq ($(PLATFORM),linux/ppc64le)
58+
# BASEIMAGE ?= ppc64le/busybox
59+
else
60+
$(error Unsupported platform '$(PLATFORM)')
5661
endif
5762

58-
IMAGE := $(REGISTRY)/$(BIN)-$(ARCH)
59-
LEGACY_IMAGE := $(REGISTRY)/$(BIN)
63+
IMAGE := $(REGISTRY)/$(BIN)
64+
TAG := $(VERSION)__$(OS)_$(ARCH)
6065

6166
BUILD_IMAGE ?= golang:1.11-alpine
6267

@@ -74,86 +79,92 @@ container-%:
7479
push-%:
7580
@$(MAKE) --no-print-directory ARCH=$* push
7681

77-
all-build: $(addprefix build-, $(ALL_ARCH))
82+
all-build: $(addprefix build-, $(ALL_PLATFORMS))
7883

79-
all-container: $(addprefix container-, $(ALL_ARCH))
84+
all-container: $(addprefix container-, $(ALL_PLATFORMS))
8085

81-
all-push: $(addprefix push-, $(ALL_ARCH))
86+
all-push: $(addprefix push-, $(ALL_PLATFORMS))
8287

83-
build: bin/$(ARCH)/$(BIN)
88+
build: bin/$(OS)_$(ARCH)/$(BIN)
8489

85-
bin/$(ARCH)/$(BIN): build-dirs
90+
bin/$(OS)_$(ARCH)/$(BIN): build-dirs
8691
@echo "building: $@"
87-
@docker run \
88-
-i \
89-
-u $$(id -u):$$(id -g) \
90-
-v $$(pwd)/.go:/go \
91-
-v $$(pwd):/go/src/$(PKG) \
92-
-v $$(pwd)/bin/$(ARCH):/go/bin \
93-
-v $$(pwd)/bin/$(ARCH):/go/bin/linux_$(ARCH) \
94-
-v $$(pwd)/.go/std/$(ARCH):/usr/local/go/pkg/linux_$(ARCH)_static \
95-
-v $$(pwd)/.go/cache:/.cache \
96-
-w /go/src/$(PKG) \
97-
--rm \
98-
$(BUILD_IMAGE) \
99-
/bin/sh -c " \
100-
ARCH=$(ARCH) \
101-
VERSION=$(VERSION) \
102-
PKG=$(PKG) \
103-
./build/build.sh \
92+
@docker run \
93+
-i \
94+
-u $$(id -u):$$(id -g) \
95+
-v $$(pwd)/.go:/go \
96+
-v $$(pwd):/go/src/$(PKG) \
97+
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin \
98+
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin/$(OS)_$(ARCH) \
99+
-v $$(pwd)/.go/std/$(OS)_$(ARCH):/usr/local/go/pkg/$(OS)_$(ARCH)_static \
100+
-v $$(pwd)/.go/cache:/.cache \
101+
-w /go/src/$(PKG) \
102+
--rm \
103+
$(BUILD_IMAGE) \
104+
/bin/sh -c " \
105+
ARCH=$(ARCH) \
106+
OS=$(OS) \
107+
VERSION=$(VERSION) \
108+
PKG=$(PKG) \
109+
./build/build.sh \
104110
"
105111

106-
DOTFILE_IMAGE = $(subst /,_,$(IMAGE))-$(VERSION)
112+
DOTFILE_IMAGE = $(subst /,_,$(IMAGE))-$(TAG)
107113

108114
container: .container-$(DOTFILE_IMAGE) container-name
109-
.container-$(DOTFILE_IMAGE): bin/$(ARCH)/$(BIN) Dockerfile.in
115+
.container-$(DOTFILE_IMAGE): bin/$(OS)_$(ARCH)/$(BIN) Dockerfile.in
110116
@sed \
111-
-e 's|ARG_BIN|$(BIN)|g' \
112-
-e 's|ARG_ARCH|$(ARCH)|g' \
113-
-e 's|ARG_FROM|$(BASEIMAGE)|g' \
114-
Dockerfile.in > .dockerfile-$(ARCH)
115-
@docker build -t $(IMAGE):$(VERSION) -f .dockerfile-$(ARCH) .
116-
@docker images -q $(IMAGE):$(VERSION) > $@
117-
@if [ "$(ARCH)" = "amd64" ]; then \
118-
docker tag $(IMAGE):$(VERSION) $(LEGACY_IMAGE):$(VERSION); \
119-
fi
117+
-e 's|{ARG_BIN}|$(BIN)|g' \
118+
-e 's|{ARG_ARCH}|$(ARCH)|g' \
119+
-e 's|{ARG_OS}|$(OS)|g' \
120+
-e 's|{ARG_FROM}|$(BASEIMAGE)|g' \
121+
Dockerfile.in > .dockerfile-$(OS)_$(ARCH)
122+
@docker build -t $(IMAGE):$(TAG) -f .dockerfile-$(OS)_$(ARCH) .
123+
@docker images -q $(IMAGE):$(TAG) > $@
120124

121125
container-name:
122-
@echo "container: $(IMAGE):$(VERSION)"
126+
@echo "container: $(IMAGE):$(TAG)"
123127

124128
push: .push-$(DOTFILE_IMAGE) push-name
125129
.push-$(DOTFILE_IMAGE): .container-$(DOTFILE_IMAGE)
126-
@gcloud docker -- push $(IMAGE):$(VERSION)
127-
@docker images -q $(IMAGE):$(VERSION) > $@
128-
@if [ "$(ARCH)" = "amd64" ]; then \
129-
gcloud docker -- push $(LEGACY_IMAGE):$(VERSION); \
130-
fi
130+
@docker push $(IMAGE):$(TAG)
131+
@docker images -q $(IMAGE):$(TAG) > $@
131132

132133
push-name:
133-
@echo "pushed: $(IMAGE):$(VERSION)"
134+
@echo "pushed: $(IMAGE):$(TAG)"
135+
136+
# This depends on github.com/estesp/manifest-tool in $PATH.
137+
manifest-list: container
138+
manifest-tool \
139+
--username=oauth2accesstoken \
140+
--password=$$(gcloud auth print-access-token) \
141+
push from-args \
142+
--platforms "$(ALL_PLATFORMS)" \
143+
--template $(REGISTRY)/$(BIN):$(VERSION)__OS_ARCH \
144+
--target $(REGISTRY)/$(BIN):$(VERSION)
134145

135146
version:
136147
@echo $(VERSION)
137148

138149
test: build-dirs
139-
@docker run \
140-
-ti \
141-
-u $$(id -u):$$(id -g) \
142-
-v $$(pwd)/.go:/go \
143-
-v $$(pwd):/go/src/$(PKG) \
144-
-v $$(pwd)/bin/$(ARCH):/go/bin \
145-
-v $$(pwd)/.go/std/$(ARCH):/usr/local/go/pkg/linux_$(ARCH)_static \
146-
-v $$(pwd)/.go/cache:/.cache \
147-
-w /go/src/$(PKG) \
148-
$(BUILD_IMAGE) \
149-
/bin/sh -c " \
150-
./build/test.sh $(SRC_DIRS) \
150+
@docker run \
151+
-ti \
152+
-u $$(id -u):$$(id -g) \
153+
-v $$(pwd)/.go:/go \
154+
-v $$(pwd):/go/src/$(PKG) \
155+
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin \
156+
-v $$(pwd)/.go/std/$(OS)_$(ARCH):/usr/local/go/pkg/$(OS)_$(ARCH)_static \
157+
-v $$(pwd)/.go/cache:/.cache \
158+
-w /go/src/$(PKG) \
159+
$(BUILD_IMAGE) \
160+
/bin/sh -c " \
161+
./build/test.sh $(SRC_DIRS) \
151162
"
152163
@./test_e2e.sh
153164

154165
build-dirs:
155-
@mkdir -p bin/$(ARCH)
156-
@mkdir -p .go/src/$(PKG) .go/pkg .go/bin .go/std/$(ARCH) .go/cache
166+
@mkdir -p bin/$(OS)_$(ARCH)
167+
@mkdir -p .go/src/$(PKG) .go/pkg .go/bin .go/std/$(OS)_$(ARCH) .go/cache
157168

158169
clean: container-clean bin-clean
159170

build/build.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,26 @@ set -o errexit
1818
set -o nounset
1919
set -o pipefail
2020

21-
if [ -z "${PKG}" ]; then
21+
if [ -z "${PKG:-}" ]; then
2222
echo "PKG must be set"
2323
exit 1
2424
fi
25-
if [ -z "${ARCH}" ]; then
25+
if [ -z "${ARCH:-}" ]; then
2626
echo "ARCH must be set"
2727
exit 1
2828
fi
29-
if [ -z "${VERSION}" ]; then
29+
if [ -z "${OS:-}" ]; then
30+
echo "OS must be set"
31+
exit 1
32+
fi
33+
if [ -z "${VERSION:-}" ]; then
3034
echo "VERSION must be set"
3135
exit 1
3236
fi
3337

3438
export CGO_ENABLED=0
3539
export GOARCH="${ARCH}"
40+
export GOOS="${OS}"
3641

3742
go install \
3843
-installsuffix "static" \

test_e2e.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ trap finish INT EXIT
6161
# #####################
6262

6363
# Build it
64-
make container REGISTRY=e2e TAG=$(make -s version)
64+
make container REGISTRY=e2e VERSION=$(make -s version)
6565

6666
DIR=""
6767
for i in $(seq 1 10); do
@@ -76,14 +76,14 @@ echo "test root is $DIR"
7676

7777
CONTAINER_NAME=git-sync-$RANDOM
7878
function GIT_SYNC() {
79-
#./bin/amd64/git-sync "$@"
79+
#./bin/linux_amd64/git-sync "$@"
8080
docker run \
8181
--name $CONTAINER_NAME \
8282
-i \
8383
-u $(id -u):$(id -g) \
8484
-v "$DIR":"$DIR" \
8585
--rm \
86-
e2e/git-sync-amd64:$(make -s version) \
86+
e2e/git-sync:$(make -s version) \
8787
"$@"
8888
}
8989

0 commit comments

Comments
 (0)