Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System tests: the continuing multiarch saga #10646

Merged
merged 1 commit into from
Jun 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 42 additions & 23 deletions test/system/build-testimage
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ chmod 755 pause
# - check for updates @ https://hub.docker.com/_/alpine
# busybox-extras provides httpd needed in 500-networking.bats
cat >Containerfile <<EOF
ARG ARCH=please-override-arch
FROM docker.io/\${ARCH}/alpine:3.12.0
ARG REPO=please-override-repo
FROM docker.io/\${REPO}/alpine:3.13.5
RUN apk add busybox-extras
ADD testimage-id pause /home/podman/
LABEL created_by=$create_script
Expand All @@ -74,17 +74,46 @@ EOF
# --squash-all : needed by 'tree' test in 070-build.bats
podman rmi -f testimage &> /dev/null || true

# There should always be a testimage tagged ':0000000<X>' (eight digits,
# zero-padded sequence ID) in the same location; this is used by tests
# which need to pull a non-locally-cached image. This image will rarely
# if ever need to change, nor in fact does it even have to be a copy of
# this testimage since all we use it for is 'true'.
# However, it does need to be multiarch :-(
zerotag_latest=$(skopeo list-tags docker://quay.io/libpod/testimage |\
jq -r '.Tags[]' |\
sort --version-sort |\
grep '^000' |\
tail -n 1)
zerotag_next=$(printf "%08d" $((zerotag_latest + 1)))

# We don't always need to push the :00xx image, but build it anyway.
zeroimg=quay.io/libpod/testimage:${zerotag_next}
buildah manifest create $zeroimg

# We need to use buildah because (as of 2021-02-23) only buildah has --manifest
# and because Dan says arch emulation is not currently working on podman
# (no further details).
# Arch emulation on Fedora requires the qemu-user-static package.
for arch in amd64 arm64v8 ppc64le s390x;do
for arch in amd64 arm64 ppc64le s390x;do
# docker.io repo is usually the same name as the desired arch; except
# for arm64, where podman needs to have the arch be 'arm64' but the
# image lives in 'arm64v8'.
repo=$arch
if [[ $repo = "arm64" ]]; then
repo="${repo}v8"
fi

${BUILDAH} bud \
--arch=$arch \
--build-arg ARCH=$arch \
--build-arg REPO=$repo \
--manifest=testimage \
--squash \
.

# The zero-tag image
${BUILDAH} pull --arch $arch docker.io/$repo/busybox:1.33.1
${BUILDAH} manifest add $zeroimg docker.io/$repo/busybox:1.33.1
done

# Clean up
Expand All @@ -94,23 +123,13 @@ rm -rf $tmpdir
# Tag image and push (all arches) to quay.
remote_tag=quay.io/libpod/testimage:$YMD
podman tag testimage ${remote_tag}
${BUILDAH} manifest push --all ${remote_tag} docker://${remote_tag}
cat <<EOF

# Side note: there should always be a testimage tagged ':0000000<X>'
# (eight digits, zero-padded sequence ID) in the same location; this is
# used by tests which need to pull a non-locally-cached image. This
# image will rarely if ever need to change, nor in fact does it even
# have to be a copy of this testimage since all we use it for is 'true'.
# However, it does need to be multiarch :-(
#
# As of 2021-02-24 it is simply busybox, because it is super small,
# but it's complicated because of multiarch:
#
# img=quay.io/libpod/testimage:0000000<current+1>
# buildah manifest create $img
# for arch in amd64 arm64v8 ppc64le s390x;do
# buildah pull --arch $arch docker.io/$arch/busybox:1.32.0
# buildah manifest add $img docker.io/$arch/busybox:1.32.0
# done
# buildah manifest push --all $img docker://$img
#
If you're happy with these images, run:

${BUILDAH} manifest push --all ${remote_tag} docker://${remote_tag}
${BUILDAH} manifest push --all ${zeroimg} docker://${zeroimg}

(You do not always need to push the :0000 image)

EOF
9 changes: 5 additions & 4 deletions test/system/helpers.bash
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ PODMAN=${PODMAN:-podman}
PODMAN_TEST_IMAGE_REGISTRY=${PODMAN_TEST_IMAGE_REGISTRY:-"quay.io"}
PODMAN_TEST_IMAGE_USER=${PODMAN_TEST_IMAGE_USER:-"libpod"}
PODMAN_TEST_IMAGE_NAME=${PODMAN_TEST_IMAGE_NAME:-"testimage"}
PODMAN_TEST_IMAGE_TAG=${PODMAN_TEST_IMAGE_TAG:-"20210427"}
PODMAN_TEST_IMAGE_TAG=${PODMAN_TEST_IMAGE_TAG:-"20210610"}
PODMAN_TEST_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:$PODMAN_TEST_IMAGE_TAG"
PODMAN_TEST_IMAGE_ID=

# Remote image that we *DO NOT* fetch or keep by default; used for testing pull
# This changed from 0 to 1 on 2021-02-24 due to multiarch considerations; it
# should change only very rarely.
PODMAN_NONLOCAL_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:00000002"
# This has changed in 2021, from 0 through 3, various iterations of getting
# multiarch to work. It should change only very rarely.
PODMAN_NONLOCAL_IMAGE_TAG=${PODMAN_NONLOCAL_IMAGE_TAG:-"00000003"}
PODMAN_NONLOCAL_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:$PODMAN_NONLOCAL_IMAGE_TAG"

# Because who wants to spell that out each time?
IMAGE=$PODMAN_TEST_IMAGE_FQN
Expand Down