|
15 | 15 |
|
16 | 16 | set -euo pipefail |
17 | 17 |
|
18 | | -if [ "$#" -ne 1 ]; then |
19 | | - echo "Usage: $0 VERSION" >&2 |
20 | | - exit 1 |
21 | | -fi |
| 18 | +source ./scripts/test_lib.sh |
22 | 19 |
|
23 | | -VERSION=${1} |
| 20 | +VERSION=${1:-} |
24 | 21 | if [ -z "$VERSION" ]; then |
25 | 22 | echo "Usage: ${0} VERSION" >&2 |
26 | 23 | exit 1 |
27 | 24 | fi |
28 | 25 |
|
29 | | -ARCH=$(go env GOARCH) |
30 | | -VERSION="${VERSION}-${ARCH}" |
31 | | -DOCKERFILE="Dockerfile" |
| 26 | +PLATFORMS=${2:-"linux/amd64,linux/arm64,linux/ppc64le,linux/s390x"} |
32 | 27 |
|
33 | | -if [ -z "${BINARYDIR:-}" ]; then |
34 | | - RELEASE="etcd-${1}"-$(go env GOOS)-${ARCH} |
35 | | - BINARYDIR="${RELEASE}" |
36 | | - TARFILE="${RELEASE}.tar.gz" |
37 | | - TARURL="https://github.com/etcd-io/etcd/releases/download/${1}/${TARFILE}" |
38 | | - if ! curl -f -L -o "${TARFILE}" "${TARURL}" ; then |
39 | | - echo "Failed to download ${TARURL}." |
40 | | - exit 1 |
41 | | - fi |
42 | | - tar -zvxf "${TARFILE}" |
| 28 | +if [ -n "${CI:-}" ]; then |
| 29 | + docker run --privileged --rm tonistiigi/binfmt --install all |
| 30 | + docker buildx create \ |
| 31 | + --name multiarch-multiplatform-builder \ |
| 32 | + --driver docker-container \ |
| 33 | + --bootstrap --use |
43 | 34 | fi |
44 | 35 |
|
45 | | -BINARYDIR=${BINARYDIR:-.} |
46 | | -BUILDDIR=${BUILDDIR:-.} |
47 | | - |
48 | | -IMAGEDIR=${BUILDDIR}/image-docker |
49 | | - |
50 | | -mkdir -p "${IMAGEDIR}"/var/etcd |
51 | | -mkdir -p "${IMAGEDIR}"/var/lib/etcd |
52 | | -cp "${BINARYDIR}"/etcd "${BINARYDIR}"/etcdctl "${BINARYDIR}"/etcdutl "${IMAGEDIR}" |
53 | | - |
54 | | -cat ./"${DOCKERFILE}" > "${IMAGEDIR}"/Dockerfile |
| 36 | +if [ -z "${REGISTRY:-}" ]; then |
| 37 | + docker build --build-arg="VERSION=${VERSION}" \ |
| 38 | + --build-arg="BUILD_DIR=${BUILD_DIR}" \ |
| 39 | + --platform="${PLATFORMS}" \ |
| 40 | + -t "gcr.io/etcd-development/etcd:${VERSION}" \ |
| 41 | + -t "quay.io/coreos/etcd:${VERSION}" \ |
| 42 | + . |
| 43 | + # we should deprecate publishing tags for specific architectures and use the multi-arch image |
| 44 | + for arch in amd64 arm64 ppc64le s390x; do |
| 45 | + log_callout "Building ${arch} docker image..." |
| 46 | + docker build --build-arg="VERSION=${VERSION}" \ |
| 47 | + --build-arg="BUILD_DIR=${BUILD_DIR}" \ |
| 48 | + --platform="linux/${arch}" \ |
| 49 | + -t "gcr.io/etcd-development/etcd:${VERSION}-${arch}" \ |
| 50 | + -t "quay.io/coreos/etcd:${VERSION}-${arch}" \ |
| 51 | + . |
| 52 | + done |
55 | 53 |
|
56 | | -if [ -z "${TAG:-}" ]; then |
57 | | - # Fix incorrect image "Architecture" using buildkit |
58 | | - # From https://stackoverflow.com/q/72144329/ |
59 | | - DOCKER_BUILDKIT=1 docker build --build-arg="ARCH=${ARCH}" -t "gcr.io/etcd-development/etcd:${VERSION}" "${IMAGEDIR}" |
60 | | - DOCKER_BUILDKIT=1 docker build --build-arg="ARCH=${ARCH}" -t "quay.io/coreos/etcd:${VERSION}" "${IMAGEDIR}" |
61 | 54 | else |
62 | | - docker build -t "${TAG}:${VERSION}" "${IMAGEDIR}" |
| 55 | + docker buildx build --build-arg="VERSION=${VERSION}" \ |
| 56 | + --build-arg="BUILD_DIR=${BUILD_DIR}" \ |
| 57 | + --platform="${PLATFORMS}" \ |
| 58 | + -t "${REGISTRY}/etcd:${VERSION}" \ |
| 59 | + --push \ |
| 60 | + . |
| 61 | + # we should deprecate publishing tags for specific architectures and use the multi-arch image |
| 62 | + for arch in amd64 arm64 ppc64le s390x; do |
| 63 | + log_callout "Building ${arch} docker image..." |
| 64 | + docker buildx build --build-arg="VERSION=${VERSION}" \ |
| 65 | + --build-arg="BUILD_DIR=${BUILD_DIR}" \ |
| 66 | + --platform="linux/${arch}" \ |
| 67 | + -t "${REGISTRY}/etcd:${VERSION}-${arch}" \ |
| 68 | + --push \ |
| 69 | + . |
| 70 | + done |
63 | 71 | fi |
0 commit comments