#!/bin/bash
set -e
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
source hack/common.sh
source hack/config.sh
fi
KUBEVIRT_NO_BAZEL=${KUBEVIRT_NO_BAZEL:-false}
HOST_ARCHITECTURE="$(uname -m)"
sandbox_root=${SANDBOX_DIR}/default/root
sandbox_hash="09a54f448d14a26d8c6b1eec07996141fa2c6768"
function kubevirt::bootstrap::regenerate() {
(
if kubevirt::bootstrap::sandbox_exists; then
kubevirt::bootstrap::sandbox_config
echo "Sandbox is up to date"
return
fi
echo "Regenerating sandbox"
cd ${KUBEVIRT_DIR}
rm ${SANDBOX_DIR} -rf
rm .bazeldnf/sandbox.bazelrc -f
KUBEVIRT_BOOTSTRAPPING=true bazel run --config=${ARCHITECTURE} //:gazelle -- --exclude kubevirtci/cluster-up
KUBEVIRT_BOOTSTRAPPING=true bazel run --config ${HOST_ARCHITECTURE} //rpm:sandbox_${1}
bazel clean
local sha=$(kubevirt::bootstrap::sha256)
sed -i "/^[[:blank:]]*sandbox_hash[[:blank:]]*=/s/=.*/=\"${sha}\"/" hack/bootstrap.sh
touch ${SANDBOX_DIR}/${sha}
kubevirt::bootstrap::sandbox_config
)
}
function kubevirt::bootstrap::sandbox_exists() {
ls ${SANDBOX_DIR}/${sandbox_hash} >/dev/null 2>&1
}
function kubevirt::bootstrap::sandbox_config() {
cat <<EOT >.bazeldnf/sandbox.bazelrc
build --sandbox_add_mount_pair=${sandbox_root}/usr/:/usr/
build --sandbox_add_mount_pair=${sandbox_root}/lib64:/lib64
build --sandbox_add_mount_pair=${sandbox_root}/lib:/lib
build --sandbox_add_mount_pair=${sandbox_root}/bin:/bin
build --incompatible_enable_cc_toolchain_resolution --platforms=//bazel/platforms:x86_64-none-linux-gnu
EOT
}
function kubevirt::bootstrap::sha256() {
(
cd ${KUBEVIRT_DIR}
sha256sum rpm/BUILD.bazel | head -c 40
)
}
if [ "${KUBEVIRT_NO_BAZEL}" != "true" ]; then
kubevirt::bootstrap::regenerate ${HOST_ARCHITECTURE}
fi