From eccc76df635796ff2a2e9613f645e6a0888dfe70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Fri, 15 Sep 2023 10:13:47 +0200 Subject: [PATCH 1/3] ci: cache: Use the cached artefacts from ORAS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the previous series related to the artefacts we build, we've switching from storing the artefacts on Jenkins, to storing those in the ghcr.io/kata-containers/cached-artefacts/${artefact_name}. Now, let's take advantage of that and actually use the artefacts coming from that "package" (as GitHub calls it). NOTE: One thing that I've noticed that we're missing, is storing and checking the sha256sum of the artefact. The storing part will be done in a different commit, and the checking the sha256sum will be done in a different PR, as we need to ensure those were pushed to the registry before actually taking the bullet to check for them. Fixes: #7834 -- part 2 Signed-off-by: Fabiano FidĂȘncio --- .../local-build/kata-deploy-binaries.sh | 48 +++++-------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh index 3e8061233..b03e92d82 100755 --- a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh +++ b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh @@ -35,16 +35,13 @@ readonly nydus_builder="${static_build_dir}/nydus/build.sh" readonly rootfs_builder="${repo_root_dir}/tools/packaging/guest-image/build_image.sh" -readonly jenkins_url="http://jenkins.katacontainers.io" -readonly cached_artifacts_path="lastSuccessfulBuild/artifact/artifacts" - ARCH=${ARCH:-$(uname -m)} MEASURED_ROOTFS=${MEASURED_ROOTFS:-no} USE_CACHE="${USE_CACHE:-"yes"}" -ARTEFACT_REGISTRY="${ARTEFACT_REGISTRY:-}" +ARTEFACT_REGISTRY="${ARTEFACT_REGISTRY:-ghcr.io}" ARTEFACT_REGISTRY_USERNAME="${ARTEFACT_REGISTRY_USERNAME:-}" ARTEFACT_REGISTRY_PASSWORD="${ARTEFACT_REGISTRY_PASSWORD:-}" -TARGET_BRANCH="${TARGET_BRANCH:=}" +TARGET_BRANCH="${TARGET_BRANCH:-main}" PUSH_TO_REGISTRY="${PUSH_TO_REGISTRY:-}" workdir="${WORKDIR:-$PWD}" @@ -114,35 +111,29 @@ EOF exit "${return_code}" } - -cleanup_and_fail() { - rm -f "${component_tarball_path}" - return 1 -} - install_cached_tarball_component() { if [ "${USE_CACHE}" != "yes" ]; then return 1 fi local component="${1}" - local jenkins_build_url="${2}" - local current_version="${3}" - local current_image_version="${4}" - local component_tarball_name="${5}" - local component_tarball_path="${6}" + local current_version="${2}" + local current_image_version="${3}" + local component_tarball_name="${4}" + local component_tarball_path="${5}" - local cached_version=$(curl -sfL "${jenkins_build_url}/latest" | awk '{print $1}') || cached_version="none" - local cached_image_version=$(curl -sfL "${jenkins_build_url}/latest_image" | awk '{print $1}') || cached_image_version="none" + oras pull ${ARTEFACT_REGISTRY}/kata-containers/cached-artefacts/${build_target}:latest-${TARGET_BRANCH}-$(uname -m) + + cached_version="$(cat ${component}-version)" + cached_image_version="$(cat ${component}-builder-image-version)" + + rm -f ${component}-version + rm -f ${component}-builder-image-version [ "${cached_image_version}" != "${current_image_version}" ] && return 1 [ "${cached_version}" != "${current_version}" ] && return 1 info "Using cached tarball of ${component}" - echo "Downloading tarball from: ${jenkins_build_url}/${component_tarball_name}" - wget "${jenkins_build_url}/${component_tarball_name}" || return $(cleanup_and_fail) - wget "${jenkins_build_url}/sha256sum-${component_tarball_name}" || return $(cleanup_and_fail) - sha256sum -c "sha256sum-${component_tarball_name}" || return $(cleanup_and_fail) mv "${component_tarball_name}" "${component_tarball_path}" } @@ -155,7 +146,6 @@ install_image() { image_type+="-${variant}" fi - local jenkins="${jenkins_url}/job/kata-containers-main-rootfs-${image_type}-${ARCH}/${cached_artifacts_path}" local component="rootfs-${image_type}" local osbuilder_last_commit="$(get_last_modification "${repo_root_dir}/tools/osbuilder")" @@ -171,7 +161,6 @@ install_image() { install_cached_tarball_component \ "${component}" \ - "${jenkins}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -206,7 +195,6 @@ install_initrd() { initrd_type+="-${variant}" fi - local jenkins="${jenkins_url}/job/kata-containers-main-rootfs-${initrd_type}-${ARCH}/${cached_artifacts_path}" local component="rootfs-${initrd_type}" local osbuilder_last_commit="$(get_last_modification "${repo_root_dir}/tools/osbuilder")" @@ -224,7 +212,6 @@ install_initrd() { install_cached_tarball_component \ "${component}" \ - "${jenkins}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -266,7 +253,6 @@ install_cached_kernel_tarball_component() { install_cached_tarball_component \ "${kernel_name}" \ - "${jenkins_url}/job/kata-containers-main-${kernel_name}-${ARCH}/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -280,7 +266,6 @@ install_cached_kernel_tarball_component() { # SEV specific code path install_cached_tarball_component \ "${kernel_name}" \ - "${jenkins_url}/job/kata-containers-main-${kernel_name}-$(uname -m)/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "kata-static-kernel-sev-modules.tar.xz" \ @@ -406,7 +391,6 @@ install_qemu_helper() { install_cached_tarball_component \ "${qemu_name}" \ - "${jenkins_url}/job/kata-containers-main-${qemu_name}-${ARCH}/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -458,7 +442,6 @@ install_firecracker() { install_cached_tarball_component \ "firecracker" \ - "${jenkins_url}/job/kata-containers-main-firecracker-$(uname -m)/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -483,7 +466,6 @@ install_clh_helper() { install_cached_tarball_component \ "cloud-hypervisor${suffix}" \ - "${jenkins_url}/job/kata-containers-main-clh-$(uname -m)${suffix}/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -526,7 +508,6 @@ install_virtiofsd() { install_cached_tarball_component \ "virtiofsd" \ - "${jenkins_url}/job/kata-containers-main-virtiofsd-${ARCH}/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -549,7 +530,6 @@ install_nydus() { install_cached_tarball_component \ "nydus" \ - "${jenkins_url}/job/kata-containers-main-nydus-$(uname -m)/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -578,7 +558,6 @@ install_shimv2() { install_cached_tarball_component \ "shim-v2" \ - "${jenkins_url}/job/kata-containers-main-shim-v2-${ARCH}/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ @@ -614,7 +593,6 @@ install_ovmf() { install_cached_tarball_component \ "${component_name}" \ - "${jenkins_url}/job/kata-containers-main-ovmf-${ovmf_type}-$(uname -m)/${cached_artifacts_path}" \ "${latest_artefact}" \ "${latest_builder_image}" \ "${final_tarball_name}" \ From 4533a7a4163dd1a4d8d206a2911ba96e1fd04cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Fri, 15 Sep 2023 10:25:26 +0200 Subject: [PATCH 2/3] ci: cache: Also store the ${component} sha256sum MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is something that was done by our Jenkins jobs, but that I ended up missing when writing d0c257b3a77f83f13886d15a5721440ca5647fd9. Now, let's also add the sha256sum to the cached artefact, and in a coming up PR (after this one is merged) we will also start checking for that. Signed-off-by: Fabiano FidĂȘncio --- .../local-build/kata-deploy-binaries.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh index b03e92d82..3868c7295 100755 --- a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh +++ b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh @@ -713,8 +713,10 @@ handle_build() { fi tar tvf "${final_tarball_path}" - echo "${latest_artefact}" > ${workdir}/${build_target}-version - echo "${latest_builder_image}" > ${workdir}/${build_target}-builder-image-version + pushd ${workdir} + echo "${latest_artefact}" > ${build_target}-version + echo "${latest_builder_image}" > ${build_target}-builder-image-version + sha256sum "${final_tarball_name}" > ${build_target}-sha256sum if [ "${PUSH_TO_REGISTRY}" = "yes" ]; then if [ -z "${ARTEFACT_REGISTRY}" ] || @@ -724,13 +726,13 @@ handle_build() { die "ARTEFACT_REGISTRY, ARTEFACT_REGISTRY_USERNAME, ARTEFACT_REGISTRY_PASSWORD and TARGET_BRANCH must be passed to the script when pushing the artefacts to the registry!" fi - pushd ${workdir} - echo "${ARTEFACT_REGISTRY_PASSWORD}" | oras login "${ARTEFACT_REGISTRY}" -u "${ARTEFACT_REGISTRY_USERNAME}" --password-stdin + echo "${ARTEFACT_REGISTRY_PASSWORD}" | oras login "${ARTEFACT_REGISTRY}" -u "${ARTEFACT_REGISTRY_USERNAME}" --password-stdin - oras push ${ARTEFACT_REGISTRY}/kata-containers/cached-artefacts/${build_target}:latest-${TARGET_BRANCH}-$(uname -m) ${final_tarball_name} ${build_target}-version ${build_target}-builder-image-version - oras logout "${ARTEFACT_REGISTRY}" - popd + oras push ${ARTEFACT_REGISTRY}/kata-containers/cached-artefacts/${build_target}:latest-${TARGET_BRANCH}-$(uname -m) ${final_tarball_name} ${build_target}-version ${build_target}-builder-image-version ${build_target}-sha256sum + oras logout "${ARTEFACT_REGISTRY}" fi + + popd } silent_mode_error_trap() { From 460988c5f70eb2a4948da84c8bb4bcf9d16e25bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Fri, 15 Sep 2023 10:27:55 +0200 Subject: [PATCH 3/3] ci: cache: Remove the script used to cache artefacts on Jenkins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That's not needed anymore, as we've switched to using ORAS and an OCI registry to cache the artefacts. Signed-off-by: Fabiano FidĂȘncio --- .../static-build/cache_components_main.sh | 264 ------------------ 1 file changed, 264 deletions(-) delete mode 100755 tools/packaging/static-build/cache_components_main.sh diff --git a/tools/packaging/static-build/cache_components_main.sh b/tools/packaging/static-build/cache_components_main.sh deleted file mode 100755 index dbfa66f63..000000000 --- a/tools/packaging/static-build/cache_components_main.sh +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash -# Copyright (c) 2022 Intel Corporation -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -o errexit -set -o nounset -set -o pipefail - -script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -source "${script_dir}/../scripts/lib.sh" - -KERNEL_FLAVOUR="${KERNEL_FLAVOUR:-kernel}" # kernel | kernel-nvidia-gpu | kernel-experimental | kernel-arm-experimental | kernel-dragonball-experimental | kernel-tdx-experimental | kernel-nvidia-gpu-tdx-experimental | kernel-nvidia-gpu-snp -OVMF_FLAVOUR="${OVMF_FLAVOUR:-x86_64}" # x86_64 | tdx -QEMU_FLAVOUR="${QEMU_FLAVOUR:-qemu}" # qemu | qemu-tdx-experimental | qemu-snp-experimental -ROOTFS_IMAGE_TYPE="${ROOTFS_IMAGE_TYPE:-image}" # image | initrd - -cache_clh_artifacts() { - local clh_tarball_name="kata-static-cloud-hypervisor.tar.xz" - local current_clh_version="$(get_from_kata_deps "assets.hypervisor.cloud_hypervisor.version")" - create_cache_asset "${clh_tarball_name}" "${current_clh_version}" "" -} - -cache_firecracker_artifacts() { - local fc_tarball_name="kata-static-firecracker.tar.xz" - local current_fc_version="$(get_from_kata_deps "assets.hypervisor.firecracker.version")" - create_cache_asset "${fc_tarball_name}" "${current_fc_version}" "" -} - -cache_kernel_artifacts() { - local kernel_tarball_name="kata-static-${KERNEL_FLAVOUR}.tar.xz" - local current_kernel_image="$(get_kernel_image_name)" - local current_kernel_kata_config_version="$(cat ${repo_root_dir}/tools/packaging/kernel/kata_config_version)" - # Changes to tools/packaging/kernel are covered by the kata_config_version check - local kernel_last_commit="$(get_last_modification ${repo_root_dir}/tools/packaging/static-build/kernel)" - local kernel_modules_tarball_path="${repo_root_dir}/tools/packaging/kata-deploy/local-build/build/kata-static-kernel-sev-modules.tar.xz" - - # The ${vendor}-gpu kernels are based on an already existing entry, and does not require - # adding a new entry to the versions.yaml. - # - # With this in mind, let's just make sure we get the version from correct entry in the - # versions.yaml file. - case ${KERNEL_FLAVOUR} in - *"nvidia-gpu"*) - KERNEL_FLAVOUR=${KERNEL_FLAVOUR//"-nvidia-gpu"/} - ;; - *) - ;; - esac - - case ${KERNEL_FLAVOUR} in - "kernel-sev"|"kernel-snp") - # In these cases, like "kernel-foo", it must be set to "kernel.foo" when looking at - # the versions.yaml file - current_kernel_version="$(get_from_kata_deps "assets.${KERNEL_FLAVOUR/-/.}.version")" - ;; - *) - current_kernel_version="$(get_from_kata_deps "assets.${KERNEL_FLAVOUR}.version")" - ;; - esac - - local current_component_version="${current_kernel_version}-${current_kernel_kata_config_version}-${kernel_last_commit}" - create_cache_asset "${kernel_tarball_name}" "${current_component_version}" "${current_kernel_image}" - if [[ "${KERNEL_FLAVOUR}" == "kernel-sev" ]]; then - module_dir="${repo_root_dir}/tools/packaging/kata-deploy/local-build/build/kernel-sev/builddir/kata-linux-${current_kernel_version#v}-${current_kernel_kata_config_version}/lib/modules/${current_kernel_version#v}" - if [ ! -f "${kernel_modules_tarball_path}" ]; then - tar cvfJ "${kernel_modules_tarball_path}" "${module_dir}/kernel/drivers/virt/coco/efi_secret/" - fi - create_cache_asset "kata-static-kernel-sev-modules.tar.xz" "${current_component_version}" "${current_kernel_image}" - fi -} - -cache_nydus_artifacts() { - local nydus_tarball_name="kata-static-nydus.tar.xz" - local current_nydus_version="$(get_from_kata_deps "externals.nydus.version")" - create_cache_asset "${nydus_tarball_name}" "${current_nydus_version}" "" -} - -cache_ovmf_artifacts() { - local current_ovmf_version="$(get_from_kata_deps "externals.ovmf.${OVMF_FLAVOUR}.version")" - case ${OVMF_FLAVOUR} in - "tdx") - ovmf_tarball_name="kata-static-tdvf.tar.xz" - ;; - "x86_64") - ovmf_tarball_name="kata-static-ovmf.tar.xz" - ;; - *) - ovmf_tarball_name="kata-static-ovmf-${OVMF_FLAVOUR}.tar.xz" - ;; - esac - - local current_ovmf_image="$(get_ovmf_image_name)" - create_cache_asset "${ovmf_tarball_name}" "${current_ovmf_version}" "${current_ovmf_image}" -} - -cache_qemu_artifacts() { - local qemu_tarball_name="kata-static-${QEMU_FLAVOUR}.tar.xz" - local current_qemu_version=$(get_from_kata_deps "assets.hypervisor.${QEMU_FLAVOUR}.version") - [ -z "${current_qemu_version}" ] && current_qemu_version=$(get_from_kata_deps "assets.hypervisor.${QEMU_FLAVOUR}.tag") - local qemu_sha=$(calc_qemu_files_sha256sum) - local current_qemu_image="$(get_qemu_image_name)" - create_cache_asset "${qemu_tarball_name}" "${current_qemu_version}-${qemu_sha}" "${current_qemu_image}" -} - -cache_rootfs_artifacts() { - local osbuilder_last_commit="$(get_last_modification "${repo_root_dir}/tools/osbuilder")" - local guest_image_last_commit="$(get_last_modification "${repo_root_dir}/tools/packaging/guest-image")" - local agent_last_commit="$(get_last_modification "${repo_root_dir}/src/agent")" - local libs_last_commit="$(get_last_modification "${repo_root_dir}/src/libs")" - local gperf_version="$(get_from_kata_deps "externals.gperf.version")" - local libseccomp_version="$(get_from_kata_deps "externals.libseccomp.version")" - local rust_version="$(get_from_kata_deps "languages.rust.meta.newest-version")" - local rootfs_tarball_name="kata-static-rootfs-${ROOTFS_IMAGE_TYPE}.tar.xz" - local current_rootfs_version="${osbuilder_last_commit}-${guest_image_last_commit}-${agent_last_commit}-${libs_last_commit}-${gperf_version}-${libseccomp_version}-${rust_version}-${ROOTFS_IMAGE_TYPE}" - create_cache_asset "${rootfs_tarball_name}" "${current_rootfs_version}" "" -} - -cache_shim_v2_artifacts() { - local shim_v2_tarball_name="kata-static-shim-v2.tar.xz" - local shim_v2_last_commit="$(get_last_modification "${repo_root_dir}/src/runtime")" - local protocols_last_commit="$(get_last_modification "${repo_root_dir}/src/libs/protocols")" - local runtime_rs_last_commit="$(get_last_modification "${repo_root_dir}/src/runtime-rs")" - local golang_version="$(get_from_kata_deps "languages.golang.meta.newest-version")" - local rust_version="$(get_from_kata_deps "languages.rust.meta.newest-version")" - local current_shim_v2_version="${shim_v2_last_commit}-${protocols_last_commit}-${runtime_rs_last_commit}-${golang_version}-${rust_version}" - local current_shim_v2_image="$(get_shim_v2_image_name)" - create_cache_asset "${shim_v2_tarball_name}" "${current_shim_v2_version}" "${current_shim_v2_image}" -} - -cache_virtiofsd_artifacts() { - local virtiofsd_tarball_name="kata-static-virtiofsd.tar.xz" - local current_virtiofsd_version="$(get_from_kata_deps "externals.virtiofsd.version")-$(get_from_kata_deps "externals.virtiofsd.toolchain")" - local current_virtiofsd_image="$(get_virtiofsd_image_name)" - create_cache_asset "${virtiofsd_tarball_name}" "${current_virtiofsd_version}" "${current_virtiofsd_image}" -} - -create_cache_asset() { - local component_name="${1}" - local component_version="${2}" - local component_image="${3}" - - sudo cp "${repo_root_dir}/tools/packaging/kata-deploy/local-build/build/${component_name}" . - sudo chown -R "${USER}:${USER}" . - sha256sum "${component_name}" > "sha256sum-${component_name}" - cat "sha256sum-${component_name}" - echo "${component_version}" > "latest" - cat "latest" - echo "${component_image}" > "latest_image" - cat "latest_image" -} - -help() { -echo "$(cat << EOF -Usage: $0 "[options]" - Description: - Builds the cache of several kata components. - Options: - -c Cloud hypervisor cache - -F Firecracker cache - -k Kernel cache - * Export KERNEL_FLAVOUR="kernel | kernel-nvidia-gpu | kernel-experimental | kernel-arm-experimental | kernel-dragonball-experimental | kernel-tdx-experimental | kernel-nvidia-gpu-tdx-experimental | kernel-nvidia-gpu-snp" for a specific build - The default KERNEL_FLAVOUR value is "kernel" - -n Nydus cache - -q QEMU cache - * Export QEMU_FLAVOUR="qemu | qemu-tdx-experimental | qemu-snp-experimental" for a specific build - The default QEMU_FLAVOUR value is "qemu" - -r RootFS cache - * Export ROOTFS_IMAGE_TYPE="image|initrd" for one of those two types - The default ROOTFS_IMAGE_TYPE value is "image" - -s Shim v2 cache - -v VirtioFS cache - -h Shows help -EOF -)" -} - -main() { - local cloud_hypervisor_component="${cloud_hypervisor_component:-}" - local firecracker_component="${firecracker_component:-}" - local kernel_component="${kernel_component:-}" - local nydus_component="${nydus_component:-}" - local ovmf_component="${ovmf_component:-}" - local qemu_component="${qemu_component:-}" - local rootfs_component="${rootfs_component:-}" - local shim_v2_component="${shim_v2_component:-}" - local virtiofsd_component="${virtiofsd_component:-}" - local OPTIND - while getopts ":cFknoqrsvh:" opt - do - case "$opt" in - c) - cloud_hypervisor_component="1" - ;; - F) - firecracker_component="1" - ;; - k) - kernel_component="1" - ;; - n) - nydus_component="1" - ;; - o) - ovmf_component="1" - ;; - q) - qemu_component="1" - ;; - r) - rootfs_component="1" - ;; - s) - shim_v2_component="1" - ;; - v) - virtiofsd_component="1" - ;; - h) - help - exit 0; - ;; - :) - echo "Missing argument for -$OPTARG"; - help - exit 1; - ;; - esac - done - shift $((OPTIND-1)) - - [[ -z "${cloud_hypervisor_component}" ]] && \ - [[ -z "${firecracker_component}" ]] && \ - [[ -z "${kernel_component}" ]] && \ - [[ -z "${nydus_component}" ]] && \ - [[ -z "${ovmf_component}" ]] && \ - [[ -z "${qemu_component}" ]] && \ - [[ -z "${rootfs_component}" ]] && \ - [[ -z "${shim_v2_component}" ]] && \ - [[ -z "${virtiofsd_component}" ]] && \ - help && die "Must choose at least one option" - - mkdir -p "${WORKSPACE}/artifacts" - pushd "${WORKSPACE}/artifacts" - echo "Artifacts:" - - [ "${cloud_hypervisor_component}" == "1" ] && cache_clh_artifacts - [ "${firecracker_component}" == "1" ] && cache_firecracker_artifacts - [ "${kernel_component}" == "1" ] && cache_kernel_artifacts - [ "${nydus_component}" == "1" ] && cache_nydus_artifacts - [ "${ovmf_component}" == "1" ] && cache_ovmf_artifacts - [ "${qemu_component}" == "1" ] && cache_qemu_artifacts - [ "${rootfs_component}" == "1" ] && cache_rootfs_artifacts - [ "${shim_v2_component}" == "1" ] && cache_shim_v2_artifacts - [ "${virtiofsd_component}" == "1" ] && cache_virtiofsd_artifacts - - ls -la "${WORKSPACE}/artifacts/" - popd - sync -} - -main "$@"