Skip to content

Commit

Permalink
bazel-images: Split image targets per architecture
Browse files Browse the repository at this point in the history
Allow selecting which images are built by architecture. This fixes the problem
of broken "amd64" images where architectures are mixed together because the
target architecture does not implement the image.

Signed-off-by: Jan Schintag <[email protected]>
  • Loading branch information
jschintag committed Oct 9, 2024
1 parent d6f76c9 commit e19c9fa
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 30 deletions.
40 changes: 33 additions & 7 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,25 @@ config_setting(
values = {"define": "release=true"},
)

container_bundle(
name = "build-other-images",
images = {
load("@bazel_skylib//lib:dicts.bzl", "dicts")

build_other_images_default = {
# cmd images
"$(container_prefix)/$(image_prefix)sidecar-shim:$(container_tag)": "//cmd/sidecars:sidecar-shim-image",
# container-disk images
"$(container_prefix)/$(image_prefix)alpine-container-disk-demo:$(container_tag)": "//containerimages:alpine-container-disk-image",
# Kernel boot container
# -
# Customized container-disk images
"$(container_prefix)/$(image_prefix)fedora-with-test-tooling-container-disk:$(container_tag)": "//containerimages:fedora-with-test-tooling",
# testing images
"$(container_prefix)/$(image_prefix)vm-killer:$(container_tag)": "//images/vm-killer:vm-killer-image",
}

build_other_images_aarch64_x86_64 = dicts.add(
build_other_images_default,
{
# cmd images
"$(container_prefix)/$(image_prefix)sidecar-shim:$(container_tag)": "//cmd/sidecars:sidecar-shim-image",
"$(container_prefix)/$(image_prefix)example-hook-sidecar:$(container_tag)": "//cmd/sidecars/smbios:example-hook-sidecar-image",
"$(container_prefix)/$(image_prefix)example-disk-mutation-hook-sidecar:$(container_tag)": "//cmd/sidecars/disk-mutation:example-disk-mutation-hook-sidecar-image",
"$(container_prefix)/$(image_prefix)example-cloudinit-hook-sidecar:$(container_tag)": "//cmd/sidecars/cloudinit:example-cloudinit-hook-sidecar-image",
Expand All @@ -203,24 +217,36 @@ container_bundle(
"$(container_prefix)/$(image_prefix)libguestfs-tools:$(container_tag)": "//cmd/libguestfs:libguestfs-tools-image",
"$(container_prefix)/$(image_prefix)pr-helper:$(container_tag)": "//cmd/pr-helper:pr-helper",
# container-disk images
"$(container_prefix)/$(image_prefix)alpine-container-disk-demo:$(container_tag)": "//containerimages:alpine-container-disk-image",
"$(container_prefix)/$(image_prefix)cirros-container-disk-demo:$(container_tag)": "//containerimages:cirros-container-disk-image",
"$(container_prefix)/$(image_prefix)cirros-custom-container-disk-demo:$(container_tag)": "//containerimages:cirros-custom-container-disk-image",
"$(container_prefix)/$(image_prefix)virtio-container-disk:$(container_tag)": "//containerimages:virtio-container-disk-image",
# Kernel boot container
"$(container_prefix)/$(image_prefix)alpine-ext-kernel-boot-demo:$(container_tag)": "//containerimages:alpine-ext-kernel-boot-demo-container",
# Customized container-disk images
"$(container_prefix)/$(image_prefix)fedora-with-test-tooling-container-disk:$(container_tag)": "//containerimages:fedora-with-test-tooling",
"$(container_prefix)/$(image_prefix)alpine-with-test-tooling-container-disk:$(container_tag)": "//containerimages:alpine-with-test-tooling",
"$(container_prefix)/$(image_prefix)fedora-realtime-container-disk:$(container_tag)": "//containerimages:fedora-realtime",
# testing images
"$(container_prefix)/$(image_prefix)disks-images-provider:$(container_tag)": "//images/disks-images-provider:disks-images-provider-image",
"$(container_prefix)/$(image_prefix)nfs-server:$(container_tag)": "//images/nfs-server:nfs-server-image",
"$(container_prefix)/$(image_prefix)vm-killer:$(container_tag)": "//images/vm-killer:vm-killer-image",
"$(container_prefix)/$(image_prefix)winrmcli:$(container_tag)": "//images/winrmcli:winrmcli-image",
},
)

container_bundle(
name = "build-other-images_s390x",
images = build_other_images_default,
)

container_bundle(
name = "build-other-images_aarch64",
images = build_other_images_aarch64_x86_64,
)

container_bundle(
name = "build-other-images_x86_64",
images = build_other_images_aarch64_x86_64,
)

# This is for generating a bundle of the core components for external processing
container_bundle(
name = "virt-components-bundle",
Expand Down
3 changes: 3 additions & 0 deletions cmd/sidecars/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ container_image(
entrypoint = ["/sidecar-shim"],
files = [":sidecar-shim"],
tars = select({
"@io_bazel_rules_go//go/platform:linux_s390x": [
"//rpm:sidecar-shim_s390x",
],
"@io_bazel_rules_go//go/platform:linux_arm64": [
"//rpm:sidecar-shim_aarch64",
],
Expand Down
4 changes: 2 additions & 2 deletions containerimages/container-disk-images.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,10 @@ container_image(
)
```

Then add new line for the container_bundle rule at the pojects`BUILD.bazel` file
Then add new line for the container_bundle rules for each architecture at the pojects`BUILD.bazel` file
```bash
container_bundle(
name = "build-other-images",
name = "build-other-images_<arch>",
images = {
...
"$(container_prefix)/$(image_prefix)fedora-sriov-lane-container-disk:$(container_tag)": "//containerimages:fedora-extended-container-disk-image",
Expand Down
24 changes: 22 additions & 2 deletions hack/bazel-build-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,33 @@ source hack/config.sh

# vars are uninteresting for the build step, they are interesting for the push step only

case ${ARCHITECTURE} in
"s390x" | "crossbuild-s390x")
other_images="
//:build-other-images_s390x
"
;;
"aarch64" | "crossbuild-aarch64")
other_images="
//:build-other-images_aarch64
//tests:conformance_image
"
;;
*)
other_images="
//:build-other-images_x86_64
//tests:conformance_image
"
;;
esac

bazel build \
--config=${ARCHITECTURE} \
--define container_prefix= \
--define image_prefix= \
--define container_tag= \
//:build-other-images //cmd/virt-operator:virt-operator-image //cmd/virt-api:virt-api-image \
//cmd/virt-controller:virt-controller-image //cmd/virt-handler:virt-handler-image //cmd/virt-launcher:virt-launcher-image //tests:conformance_image
//cmd/virt-operator:virt-operator-image //cmd/virt-api:virt-api-image //cmd/virt-controller:virt-controller-image \
//cmd/virt-handler:virt-handler-image //cmd/virt-launcher:virt-launcher-image ${other_images[@]}

rm -rf ${DIGESTS_DIR}/${ARCHITECTURE}
mkdir -p ${DIGESTS_DIR}/${ARCHITECTURE}
Expand Down
46 changes: 27 additions & 19 deletions hack/bazel-push-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,39 @@ default_targets="
virt-controller
virt-handler
virt-launcher
virt-exportserver
virt-exportproxy
conformance
libguestfs-tools
pr-helper
example-hook-sidecar
example-disk-mutation-hook-sidecar
example-cloudinit-hook-sidecar
alpine-container-disk-demo
cirros-container-disk-demo
cirros-custom-container-disk-demo
virtio-container-disk
alpine-ext-kernel-boot-demo
fedora-with-test-tooling-container-disk
alpine-with-test-tooling-container-disk
fedora-realtime-container-disk
disks-images-provider
nfs-server
vm-killer
winrmcli
sidecar-shim
network-slirp-binding
network-passt-binding
"

case ${ARCHITECTURE} in
"s390x" | "crossbuild-s390x") ;;
*)
default_targets+="
virt-exportserver
virt-exportproxy
conformance
libguestfs-tools
pr-helper
example-hook-sidecar
example-disk-mutation-hook-sidecar
example-cloudinit-hook-sidecar
cirros-container-disk-demo
cirros-custom-container-disk-demo
virtio-container-disk
alpine-ext-kernel-boot-demo
alpine-with-test-tooling-container-disk
fedora-realtime-container-disk
disks-images-provider
nfs-server
winrmcli
network-slirp-binding
network-passt-binding
"
;;
esac

PUSH_TARGETS=(${PUSH_TARGETS:-${default_targets}})

for tag in ${docker_tag} ${docker_tag_alt}; do
Expand Down
6 changes: 6 additions & 0 deletions hack/push-container-manifest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ function podman_push_manifest() {
${KUBEVIRT_CRI} manifest create ${DOCKER_PREFIX}/${image}:${DOCKER_TAG}
for ARCH in ${BUILD_ARCH//,/ }; do
FORMATED_ARCH=$(format_archname ${ARCH})
if [ ! -f ${DIGESTS_DIR}/${FORMATED_ARCH}/bazel-bin/push-$image.digest ]; then
continue
fi
digest=$(cat ${DIGESTS_DIR}/${FORMATED_ARCH}/bazel-bin/push-$image.digest)
${KUBEVIRT_CRI} manifest add ${DOCKER_PREFIX}/${image}:${DOCKER_TAG} ${DOCKER_PREFIX}/${image}@${digest}
done
Expand All @@ -45,6 +48,9 @@ function docker_push_manifest() {
MANIFEST_IMAGES=""
for ARCH in ${BUILD_ARCH//,/ }; do
FORMATED_ARCH=$(format_archname ${ARCH})
if [ ! -f ${DIGESTS_DIR}/${FORMATED_ARCH}/bazel-bin/push-$image.digest ]; then
continue
fi
digest=$(cat ${DIGESTS_DIR}/${FORMATED_ARCH}/bazel-bin/push-$image.digest)
MANIFEST_IMAGES="${MANIFEST_IMAGES} --amend ${DOCKER_PREFIX}/${image}@${digest}"
done
Expand Down

0 comments on commit e19c9fa

Please sign in to comment.