From a63b9755c7cf0dcca00d6c1c0777eb291bd19d6f Mon Sep 17 00:00:00 2001 From: Jason Montleon Date: Mon, 8 Nov 2021 18:07:04 -0500 Subject: [PATCH] Enable multiarch builds (#135) --- .travis.yml | 76 +++++++++++++++++++++ Dockerfile-velero-restic-restore-helper.ubi | 2 +- Dockerfile.ubi | 4 +- 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..be11ca5ddf --- /dev/null +++ b/.travis.yml @@ -0,0 +1,76 @@ +os: linux +services: docker +dist: focal +language: go +go: stable + +env: + global: + - IMAGE1: quay.io/konveyor/velero + - IMAGE2: quay.io/konveyor/velero-restic-restore-helper + - DEFAULT_BRANCH: konveyor-dev + - DOCKERFILE1: Dockerfile.ubi + - DOCKERFILE2: Dockerfile-velero-restic-restore-helper.ubi + - DOCKER_CLI_EXPERIMENTAL: enabled + - GOPROXY: https://goproxy.io,direct + +before_install: +- | + if [ "${TRAVIS_BRANCH}" == "${DEFAULT_BRANCH}" ]; then + export TAG=latest + else + export TAG="${TRAVIS_BRANCH}" + fi + +# Builds routinely fail due to download failures inside alternate arch docker containers +# Here we are downloading outside the docker container and copying the deps in +# Also use -v for downloads/builds to stop no output failures from lxd env buffering. +before_script: +- go mod vendor -v +- git clone https://github.com/konveyor/restic -b konveyor-dev +- pushd restic; go mod vendor -v; popd +- sed -i 's|-mod=mod|-mod=vendor|g' ${DOCKERFILE1} +- sed -i 's|-mod=mod|-mod=vendor|g' ${DOCKERFILE2} +- sed -i 's|go build|go build -v|g' ${DOCKERFILE1} +- sed -i 's|go build|go build -v|g' ${DOCKERFILE2} +- sed -i 's|^RUN mkdir -p \$APP_ROOT/src/github.com/restic \\$|COPY --chown=1001 restic/ $APP_ROOT/src/github.com/restic/restic|g' ${DOCKERFILE1} +- sed -i 's|&& cd \$APP_ROOT/src/github.com/restic \\$||g' ${DOCKERFILE1} +- sed -i 's|&& git clone https://github.com/konveyor/restic -b konveyor-dev$||g' ${DOCKERFILE1} + +script: +- docker build -t ${IMAGE1}:${TAG}-${TRAVIS_ARCH} -f ${DOCKERFILE1} . +- docker build -t ${IMAGE2}:${TAG}-${TRAVIS_ARCH} -f ${DOCKERFILE2} . +- if [ -n "${QUAY_ROBOT}" ]; then docker login quay.io -u "${QUAY_ROBOT}" -p ${QUAY_TOKEN}; fi +- if [ -n "${QUAY_ROBOT}" ]; then docker push ${IMAGE1}:${TAG}-${TRAVIS_ARCH}; fi +- if [ -n "${QUAY_ROBOT}" ]; then docker push ${IMAGE2}:${TAG}-${TRAVIS_ARCH}; fi + +jobs: + include: + - stage: build images + arch: ppc64le + - arch: s390x + - arch: arm64 + - arch: amd64 + - stage: push manifest + language: shell + arch: amd64 + before_script: [] + script: + - | + if [ -n "${QUAY_ROBOT}" ]; then + docker login quay.io -u "${QUAY_ROBOT}" -p ${QUAY_TOKEN} + docker manifest create \ + ${IMAGE1}:${TAG} \ + ${IMAGE1}:${TAG}-amd64 \ + ${IMAGE1}:${TAG}-ppc64le \ + ${IMAGE1}:${TAG}-s390x \ + ${IMAGE1}:${TAG}-aarch64 + docker manifest create \ + ${IMAGE2}:${TAG} \ + ${IMAGE2}:${TAG}-amd64 \ + ${IMAGE2}:${TAG}-ppc64le \ + ${IMAGE2}:${TAG}-s390x \ + ${IMAGE2}:${TAG}-aarch64 + docker manifest push ${IMAGE1}:${TAG} + docker manifest push ${IMAGE2}:${TAG} + fi diff --git a/Dockerfile-velero-restic-restore-helper.ubi b/Dockerfile-velero-restic-restore-helper.ubi index b12de2fb3e..3f86b2d7ca 100644 --- a/Dockerfile-velero-restic-restore-helper.ubi +++ b/Dockerfile-velero-restic-restore-helper.ubi @@ -1,4 +1,4 @@ -FROM registry.access.redhat.com/ubi8/go-toolset:1.14.7 AS builder +FROM quay.io/konveyor/builder:latest AS builder ENV GOPATH=$APP_ROOT COPY . $APP_ROOT/src/github.com/vmware-tanzu/velero WORKDIR $APP_ROOT/src/github.com/vmware-tanzu/velero diff --git a/Dockerfile.ubi b/Dockerfile.ubi index 9d6a0ed3b7..79423af971 100644 --- a/Dockerfile.ubi +++ b/Dockerfile.ubi @@ -1,11 +1,11 @@ # TODO! Find a real ubi8 image for golang 1.16 -FROM quay.io/app-sre/boilerplate:image-v2.1.0 AS builder +FROM quay.io/konveyor/builder:latest AS builder ENV GOPATH=$APP_ROOT COPY . /go/src/github.com/vmware-tanzu/velero WORKDIR /go/src/github.com/vmware-tanzu/velero RUN CGO_ENABLED=0 GOOS=linux go build -a -mod=mod -ldflags '-extldflags "-static" -X github.com/vmware-tanzu/velero/pkg/buildinfo.Version=konveyor-dev' -o /go/src/velero github.com/vmware-tanzu/velero/cmd/velero -FROM registry.access.redhat.com/ubi8/go-toolset:1.14.7 AS restic-builder +FROM quay.io/konveyor/builder:latest AS restic-builder ENV GOPATH=$APP_ROOT RUN mkdir -p $APP_ROOT/src/github.com/restic \ && cd $APP_ROOT/src/github.com/restic \