hs-test: cache docker build in local filesystem 55/41155/12
authorDave Wallace <[email protected]>
Tue, 18 Jun 2024 21:10:07 +0000 (17:10 -0400)
committerFlorin Coras <[email protected]>
Fri, 21 Jun 2024 19:30:54 +0000 (19:30 +0000)
- when running in the CI, cache the docker build layers
  in the local filesystem to allow docker executor images
  to contain cached docker build layers

Type: test
Change-Id: Ie728a8370d3fb8144d01dff566aaa846ca6fd81b
Signed-off-by: Dave Wallace <[email protected]>
extras/hs-test/script/build_hst.sh

index f3a8e27..0f5c0a4 100755 (executable)
@@ -18,6 +18,20 @@ if [ -z "$(which wrk)" ]; then
 fi
 
 export VPP_WS=../..
+OS_ARCH="$(uname -m)"
+DOCKER_BUILD_DIR="/scratch/docker-build"
+DOCKER_CACHE_DIR="${DOCKER_BUILD_DIR}/docker_cache"
+
+if [ -d "${DOCKER_BUILD_DIR}" ] ; then
+  mkdir -p "${DOCKER_CACHE_DIR}"
+  DOCKER_HST_BUILDER="hst_builder"
+  set -x
+  if ! docker buildx ls --format "{{.Name}}" | grep -q "${DOCKER_HST_BUILDER}"; then
+    docker buildx create --name=${DOCKER_HST_BUILDER} --driver=docker-container --use --bootstrap || true
+  fi
+  set -x
+  DOCKER_CACHE_ARGS="--builder=${DOCKER_HST_BUILDER} --load --cache-to type=local,dest=${DOCKER_CACHE_DIR},mode=max --cache-from type=local,src=${DOCKER_CACHE_DIR}"
+fi
 
 if [ "$1" == "debug" ]; then
        VPP_BUILD_ROOT=${VPP_WS}/build-root/build-vpp_debug-native/vpp
@@ -31,7 +45,7 @@ echo "Taking build objects from ${VPP_BUILD_ROOT}"
 export UBUNTU_VERSION=${UBUNTU_VERSION:-"$(lsb_release -rs)"}
 echo "Ubuntu version is set to ${UBUNTU_VERSION}"
 
-export HST_LDPRELOAD=${VPP_BUILD_ROOT}/lib/x86_64-linux-gnu/libvcl_ldpreload.so
+export HST_LDPRELOAD=${VPP_BUILD_ROOT}/lib/${OS_ARCH}-linux-gnu/libvcl_ldpreload.so
 echo "HST_LDPRELOAD is set to ${HST_LDPRELOAD}"
 
 export PATH=${VPP_BUILD_ROOT}/bin:$PATH
@@ -45,7 +59,7 @@ rm -rf vpp-data/lib/* || true
 
 cp ${VPP_BUILD_ROOT}/bin/* ${bin}
 res+=$?
-cp -r ${VPP_BUILD_ROOT}/lib/x86_64-linux-gnu/* ${lib}
+cp -r ${VPP_BUILD_ROOT}/lib/"${OS_ARCH}"-linux-gnu/* ${lib}
 res+=$?
 if [ $res -ne 0 ]; then
        echo "Failed to copy VPP files. Is VPP built? Try running 'make build' in VPP directory."
@@ -56,12 +70,14 @@ docker_build () {
     tag=$1
     dockername=$2
     set -x
-    docker build --build-arg UBUNTU_VERSION             \
-                 --build-arg http_proxy="$HTTP_PROXY"     \
-                 --build-arg https_proxy="$HTTP_PROXY"    \
-                 --build-arg HTTP_PROXY="$HTTP_PROXY"     \
-                 --build-arg HTTPS_PROXY="$HTTP_PROXY"    \
-                 -t "$tag" -f docker/Dockerfile."$dockername" .
+    # shellcheck disable=2086
+    docker buildx build ${DOCKER_CACHE_ARGS}  \
+      --build-arg UBUNTU_VERSION              \
+      --build-arg http_proxy="$HTTP_PROXY"    \
+      --build-arg https_proxy="$HTTP_PROXY"   \
+      --build-arg HTTP_PROXY="$HTTP_PROXY"    \
+      --build-arg HTTPS_PROXY="$HTTP_PROXY"   \
+      -t "$tag" -f docker/Dockerfile."$dockername" .
     set +x
 }