Build a manifest list
Retool some of the build/test to produce a manifest-list rather than a single image.
This commit is contained in:
parent
76bda81e0f
commit
ada75e9c6c
|
|
@ -12,11 +12,11 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM ARG_FROM
|
||||
FROM {ARG_FROM}
|
||||
|
||||
MAINTAINER Tim Hockin <thockin@google.com>
|
||||
|
||||
ADD bin/ARG_ARCH/ARG_BIN /ARG_BIN
|
||||
ADD bin/{ARG_OS}_{ARG_ARCH}/{ARG_BIN} /{ARG_BIN}
|
||||
|
||||
RUN apk update --no-cache && apk add \
|
||||
ca-certificates \
|
||||
|
|
@ -28,4 +28,4 @@ RUN apk update --no-cache && apk add \
|
|||
ENV HOME /tmp
|
||||
|
||||
USER nobody:nobody
|
||||
ENTRYPOINT ["/ARG_BIN"]
|
||||
ENTRYPOINT ["/{ARG_BIN}"]
|
||||
|
|
|
|||
155
Makefile
155
Makefile
|
|
@ -21,8 +21,11 @@ PKG := k8s.io/git-sync
|
|||
# Where to push the docker image.
|
||||
REGISTRY ?= staging-k8s.gcr.io
|
||||
|
||||
# Which architecture to build - see $(ALL_ARCH) for options.
|
||||
ARCH ?= amd64
|
||||
# Which platform to build - see $(ALL_PLATFORMS) for options.
|
||||
PLATFORM ?= linux/amd64
|
||||
|
||||
OS := $(firstword $(subst /, ,$(PLATFORM)))
|
||||
ARCH := $(lastword $(subst /, ,$(PLATFORM)))
|
||||
|
||||
# This version-strategy uses git tags to set the version string
|
||||
VERSION := $(shell git describe --tags --always --dirty)
|
||||
|
|
@ -36,27 +39,29 @@ VERSION := $(shell git describe --tags --always --dirty)
|
|||
|
||||
SRC_DIRS := cmd pkg # directories which hold app source (not vendored)
|
||||
|
||||
ALL_ARCH := amd64
|
||||
ALL_PLATFORMS := linux/amd64
|
||||
|
||||
# TODO: get a baseimage that works for other architectures
|
||||
# arm arm64 ppc64le
|
||||
# TODO: get a baseimage that works for other platforms
|
||||
# linux/arm linux/arm64 linux/ppc64le
|
||||
|
||||
# Set default base image dynamically for each arch
|
||||
ifeq ($(ARCH),amd64)
|
||||
BASEIMAGE?=alpine:3.7
|
||||
endif
|
||||
ifeq ($(ARCH),arm)
|
||||
BASEIMAGE?=armel/busybox
|
||||
endif
|
||||
ifeq ($(ARCH),arm64)
|
||||
BASEIMAGE?=aarch64/busybox
|
||||
endif
|
||||
ifeq ($(ARCH),ppc64le)
|
||||
BASEIMAGE?=ppc64le/busybox
|
||||
ifeq ($(PLATFORM),linux/amd64)
|
||||
BASEIMAGE ?= alpine:3.8
|
||||
#endif
|
||||
#ifeq ($(PLATFORM),linux/arm)
|
||||
# BASEIMAGE ?= armel/busybox
|
||||
#endif
|
||||
#ifeq ($(PLATFORM),linux/arm64)
|
||||
# BASEIMAGE ?= aarch64/busybox
|
||||
#endif
|
||||
#ifeq ($(PLATFORM),linux/ppc64le)
|
||||
# BASEIMAGE ?= ppc64le/busybox
|
||||
else
|
||||
$(error Unsupported platform '$(PLATFORM)')
|
||||
endif
|
||||
|
||||
IMAGE := $(REGISTRY)/$(BIN)-$(ARCH)
|
||||
LEGACY_IMAGE := $(REGISTRY)/$(BIN)
|
||||
IMAGE := $(REGISTRY)/$(BIN)
|
||||
TAG := $(VERSION)__$(OS)_$(ARCH)
|
||||
|
||||
BUILD_IMAGE ?= golang:1.11-alpine
|
||||
|
||||
|
|
@ -74,86 +79,92 @@ container-%:
|
|||
push-%:
|
||||
@$(MAKE) --no-print-directory ARCH=$* push
|
||||
|
||||
all-build: $(addprefix build-, $(ALL_ARCH))
|
||||
all-build: $(addprefix build-, $(ALL_PLATFORMS))
|
||||
|
||||
all-container: $(addprefix container-, $(ALL_ARCH))
|
||||
all-container: $(addprefix container-, $(ALL_PLATFORMS))
|
||||
|
||||
all-push: $(addprefix push-, $(ALL_ARCH))
|
||||
all-push: $(addprefix push-, $(ALL_PLATFORMS))
|
||||
|
||||
build: bin/$(ARCH)/$(BIN)
|
||||
build: bin/$(OS)_$(ARCH)/$(BIN)
|
||||
|
||||
bin/$(ARCH)/$(BIN): build-dirs
|
||||
bin/$(OS)_$(ARCH)/$(BIN): build-dirs
|
||||
@echo "building: $@"
|
||||
@docker run \
|
||||
-i \
|
||||
-u $$(id -u):$$(id -g) \
|
||||
-v $$(pwd)/.go:/go \
|
||||
-v $$(pwd):/go/src/$(PKG) \
|
||||
-v $$(pwd)/bin/$(ARCH):/go/bin \
|
||||
-v $$(pwd)/bin/$(ARCH):/go/bin/linux_$(ARCH) \
|
||||
-v $$(pwd)/.go/std/$(ARCH):/usr/local/go/pkg/linux_$(ARCH)_static \
|
||||
-v $$(pwd)/.go/cache:/.cache \
|
||||
-w /go/src/$(PKG) \
|
||||
--rm \
|
||||
$(BUILD_IMAGE) \
|
||||
/bin/sh -c " \
|
||||
ARCH=$(ARCH) \
|
||||
VERSION=$(VERSION) \
|
||||
PKG=$(PKG) \
|
||||
./build/build.sh \
|
||||
@docker run \
|
||||
-i \
|
||||
-u $$(id -u):$$(id -g) \
|
||||
-v $$(pwd)/.go:/go \
|
||||
-v $$(pwd):/go/src/$(PKG) \
|
||||
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin \
|
||||
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin/$(OS)_$(ARCH) \
|
||||
-v $$(pwd)/.go/std/$(OS)_$(ARCH):/usr/local/go/pkg/$(OS)_$(ARCH)_static \
|
||||
-v $$(pwd)/.go/cache:/.cache \
|
||||
-w /go/src/$(PKG) \
|
||||
--rm \
|
||||
$(BUILD_IMAGE) \
|
||||
/bin/sh -c " \
|
||||
ARCH=$(ARCH) \
|
||||
OS=$(OS) \
|
||||
VERSION=$(VERSION) \
|
||||
PKG=$(PKG) \
|
||||
./build/build.sh \
|
||||
"
|
||||
|
||||
DOTFILE_IMAGE = $(subst /,_,$(IMAGE))-$(VERSION)
|
||||
DOTFILE_IMAGE = $(subst /,_,$(IMAGE))-$(TAG)
|
||||
|
||||
container: .container-$(DOTFILE_IMAGE) container-name
|
||||
.container-$(DOTFILE_IMAGE): bin/$(ARCH)/$(BIN) Dockerfile.in
|
||||
.container-$(DOTFILE_IMAGE): bin/$(OS)_$(ARCH)/$(BIN) Dockerfile.in
|
||||
@sed \
|
||||
-e 's|ARG_BIN|$(BIN)|g' \
|
||||
-e 's|ARG_ARCH|$(ARCH)|g' \
|
||||
-e 's|ARG_FROM|$(BASEIMAGE)|g' \
|
||||
Dockerfile.in > .dockerfile-$(ARCH)
|
||||
@docker build -t $(IMAGE):$(VERSION) -f .dockerfile-$(ARCH) .
|
||||
@docker images -q $(IMAGE):$(VERSION) > $@
|
||||
@if [ "$(ARCH)" = "amd64" ]; then \
|
||||
docker tag $(IMAGE):$(VERSION) $(LEGACY_IMAGE):$(VERSION); \
|
||||
fi
|
||||
-e 's|{ARG_BIN}|$(BIN)|g' \
|
||||
-e 's|{ARG_ARCH}|$(ARCH)|g' \
|
||||
-e 's|{ARG_OS}|$(OS)|g' \
|
||||
-e 's|{ARG_FROM}|$(BASEIMAGE)|g' \
|
||||
Dockerfile.in > .dockerfile-$(OS)_$(ARCH)
|
||||
@docker build -t $(IMAGE):$(TAG) -f .dockerfile-$(OS)_$(ARCH) .
|
||||
@docker images -q $(IMAGE):$(TAG) > $@
|
||||
|
||||
container-name:
|
||||
@echo "container: $(IMAGE):$(VERSION)"
|
||||
@echo "container: $(IMAGE):$(TAG)"
|
||||
|
||||
push: .push-$(DOTFILE_IMAGE) push-name
|
||||
.push-$(DOTFILE_IMAGE): .container-$(DOTFILE_IMAGE)
|
||||
@gcloud docker -- push $(IMAGE):$(VERSION)
|
||||
@docker images -q $(IMAGE):$(VERSION) > $@
|
||||
@if [ "$(ARCH)" = "amd64" ]; then \
|
||||
gcloud docker -- push $(LEGACY_IMAGE):$(VERSION); \
|
||||
fi
|
||||
@docker push $(IMAGE):$(TAG)
|
||||
@docker images -q $(IMAGE):$(TAG) > $@
|
||||
|
||||
push-name:
|
||||
@echo "pushed: $(IMAGE):$(VERSION)"
|
||||
@echo "pushed: $(IMAGE):$(TAG)"
|
||||
|
||||
# This depends on github.com/estesp/manifest-tool in $PATH.
|
||||
manifest-list: container
|
||||
manifest-tool \
|
||||
--username=oauth2accesstoken \
|
||||
--password=$$(gcloud auth print-access-token) \
|
||||
push from-args \
|
||||
--platforms "$(ALL_PLATFORMS)" \
|
||||
--template $(REGISTRY)/$(BIN):$(VERSION)__OS_ARCH \
|
||||
--target $(REGISTRY)/$(BIN):$(VERSION)
|
||||
|
||||
version:
|
||||
@echo $(VERSION)
|
||||
|
||||
test: build-dirs
|
||||
@docker run \
|
||||
-ti \
|
||||
-u $$(id -u):$$(id -g) \
|
||||
-v $$(pwd)/.go:/go \
|
||||
-v $$(pwd):/go/src/$(PKG) \
|
||||
-v $$(pwd)/bin/$(ARCH):/go/bin \
|
||||
-v $$(pwd)/.go/std/$(ARCH):/usr/local/go/pkg/linux_$(ARCH)_static \
|
||||
-v $$(pwd)/.go/cache:/.cache \
|
||||
-w /go/src/$(PKG) \
|
||||
$(BUILD_IMAGE) \
|
||||
/bin/sh -c " \
|
||||
./build/test.sh $(SRC_DIRS) \
|
||||
@docker run \
|
||||
-ti \
|
||||
-u $$(id -u):$$(id -g) \
|
||||
-v $$(pwd)/.go:/go \
|
||||
-v $$(pwd):/go/src/$(PKG) \
|
||||
-v $$(pwd)/bin/$(OS)_$(ARCH):/go/bin \
|
||||
-v $$(pwd)/.go/std/$(OS)_$(ARCH):/usr/local/go/pkg/$(OS)_$(ARCH)_static \
|
||||
-v $$(pwd)/.go/cache:/.cache \
|
||||
-w /go/src/$(PKG) \
|
||||
$(BUILD_IMAGE) \
|
||||
/bin/sh -c " \
|
||||
./build/test.sh $(SRC_DIRS) \
|
||||
"
|
||||
@./test_e2e.sh
|
||||
|
||||
build-dirs:
|
||||
@mkdir -p bin/$(ARCH)
|
||||
@mkdir -p .go/src/$(PKG) .go/pkg .go/bin .go/std/$(ARCH) .go/cache
|
||||
@mkdir -p bin/$(OS)_$(ARCH)
|
||||
@mkdir -p .go/src/$(PKG) .go/pkg .go/bin .go/std/$(OS)_$(ARCH) .go/cache
|
||||
|
||||
clean: container-clean bin-clean
|
||||
|
||||
|
|
|
|||
|
|
@ -18,21 +18,26 @@ set -o errexit
|
|||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
if [ -z "${PKG}" ]; then
|
||||
if [ -z "${PKG:-}" ]; then
|
||||
echo "PKG must be set"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${ARCH}" ]; then
|
||||
if [ -z "${ARCH:-}" ]; then
|
||||
echo "ARCH must be set"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${VERSION}" ]; then
|
||||
if [ -z "${OS:-}" ]; then
|
||||
echo "OS must be set"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${VERSION:-}" ]; then
|
||||
echo "VERSION must be set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export CGO_ENABLED=0
|
||||
export GOARCH="${ARCH}"
|
||||
export GOOS="${OS}"
|
||||
|
||||
go install \
|
||||
-installsuffix "static" \
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ trap finish INT EXIT
|
|||
# #####################
|
||||
|
||||
# Build it
|
||||
make container REGISTRY=e2e TAG=$(make -s version)
|
||||
make container REGISTRY=e2e VERSION=$(make -s version)
|
||||
|
||||
DIR=""
|
||||
for i in $(seq 1 10); do
|
||||
|
|
@ -76,14 +76,14 @@ echo "test root is $DIR"
|
|||
|
||||
CONTAINER_NAME=git-sync-$RANDOM
|
||||
function GIT_SYNC() {
|
||||
#./bin/amd64/git-sync "$@"
|
||||
#./bin/linux_amd64/git-sync "$@"
|
||||
docker run \
|
||||
--name $CONTAINER_NAME \
|
||||
-i \
|
||||
-u $(id -u):$(id -g) \
|
||||
-v "$DIR":"$DIR" \
|
||||
--rm \
|
||||
e2e/git-sync-amd64:$(make -s version) \
|
||||
e2e/git-sync:$(make -s version) \
|
||||
"$@"
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue