Add hooks to push manifest

This commit is contained in:
ViViDboarder 2020-02-11 13:30:39 -08:00
parent 5794cd86e1
commit 68e7586753
4 changed files with 132 additions and 5 deletions

38
hooks/build Executable file
View File

@ -0,0 +1,38 @@
#!/bin/bash
set -ex
# Extract arch repo from a docker tag suffix
REPO=""
case "$DOCKER_TAG" in
*amd64)
REPO="library"
;;
*arm32v5)
REPO="arm32v5"
;;
*arm32v6)
REPO="arm32v6"
;;
*arm32v7)
REPO="arm32v7"
;;
*arm64v8)
REPO="arm64v8"
;;
*i386)
REPO="i386"
;;
*ppc64le)
REPO="ppc64le"
;;
*s390x)
REPO="s390x"
;;
*)
REPO="library"
;;
esac
docker build \
--build-arg REPO="$REPO" \
--tag "$IMAGE_NAME" .

55
hooks/post_push Executable file
View File

@ -0,0 +1,55 @@
#!/bin/bash
# Use manifest-tool to create the manifest, given the experimental
# "docker manifest" command isn't available yet on Docker Hub.
TAG_ROOT=${DOCKER_TAG%-*}
TARGET_ARCH=""
case "$DOCKER_TAG" in
*amd64)
TARGET_ARCH="amd64"
;;
*arm32v5)
TARGET_ARCH="arm/v5"
;;
*arm32v6)
TARGET_ARCH="arm/v6"
;;
*arm32v7)
TARGET_ARCH="arm/v7"
;;
*arm64v8)
TARGET_ARCH="arm64/v8"
;;
*i386)
TARGET_ARCH="i386"
;;
*ppc64le)
TARGET_ARCH="ppc64le"
;;
*s390x)
TARGET_ARCH="s390x"
;;
*)
echo "Unknown target arch, skip manifest push"
exit 0
;;
esac
# If the tag is essentially only the arch, we use latest
if [[ "$TAG_ROOT" == "$TARGET_ARCH" ]]; then
TAG_ROOT="latest"
fi
curl -Lo manifest-tool https://github.com/estesp/manifest-tool/releases/download/v1.0.0/manifest-tool-linux-amd64
chmod +x manifest-tool
# Generate manifest file for this repo and tag root
sed "s#{DOCKER_REPO}#${DOCKER_REPO%:*}#;s#{TAG_ROOT}#${TAG_ROOT}#" multi-arch-manifest-tmpl.yml > multi-arch-manifest.yml
./manifest-tool push from-spec --ignore-missing multi-arch-manifest.yml
# Fix arch for image tags
./manifest-tool push from-args \
--platforms "linux/$TARGET_ARCH" \
--template "$DOCKER_REPO:$DOCKER_TAG" \
--target "$DOCKER_REPO:$DOCKER_TAG"

View File

@ -1,8 +1,4 @@
#!/bin/bash
BUILD_ARCH=$(echo "${DOCKERFILE_PATH}" | cut -d '.' -f 2)
[ "${BUILD_ARCH}" == "Dockerfile" ] && \
{ echo 'qemu-user-static: Registration not required for current arch'; exit 0; }
set -ex
docker run --rm --privileged multiarch/qemu-user-static:register --reset

View File

@ -0,0 +1,38 @@
---
image: "{DOCKER_REPO}:{TAG_ROOT}"
manifests:
- image: "{DOCKER_REPO}:{TAG_ROOT}"
platform:
architecture: amd64
os: linux
- image: "{DOCKER_REPO}:{TAG_ROOT}-amd64"
platform:
architecture: amd64
os: linux
- image: "{DOCKER_REPO}:{TAG_ROOT}-arm32v6"
platform:
architecture: arm
os: linux
variant: v6
- image: "{DOCKER_REPO}:{TAG_ROOT}-arm32v7"
platform:
architecture: arm
os: linux
variant: v7
- image: "{DOCKER_REPO}:{TAG_ROOT}-arm64v8"
platform:
architecture: arm64
os: linux
variant: v8
- image: "{DOCKER_REPO}:{TAG_ROOT}-i386"
platform:
architecture: i386
os: linux
- image: "{DOCKER_REPO}:{TAG_ROOT}-s390x"
platform:
architecture: s390x
os: linux
- image: "{DOCKER_REPO}:{TAG_ROOT}-ppc64le"
platform:
architecture: ppc64le
os: linux