#!/usr/bin/env bash set -euo pipefail root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd) script=$root/scripts/ci-build-images.sh tmp=$(mktemp -d) trap 'rm -rf "$tmp"' EXIT mkdir -p "$tmp/bin" cat >"$tmp/bin/docker" <<'MOCK' #!/usr/bin/env bash set -euo pipefail printf 'docker %s\n' "$*" >>"$MOCK_LOG" case "$*" in 'buildx inspect '*|'buildx create '*) exit 0 ;; 'buildx build '*) if [[ ${MOCK_BUILD_FAIL:-0} == 1 && $* == *'--target web'* ]]; then exit 21 fi ;; 'buildx prune '*) [[ ${MOCK_PRUNE_FAIL:-0} == 0 ]] || exit 22 ;; 'image rm '*) [[ ${MOCK_IMAGE_RM_FAIL:-0} == 0 ]] || exit 23 ;; *) printf 'unexpected docker invocation: %s\n' "$*" >&2 exit 99 ;; esac MOCK cat >"$tmp/bin/trivy" <<'MOCK' #!/usr/bin/env bash set -euo pipefail printf 'trivy %s\n' "$*" >>"$MOCK_LOG" MOCK chmod +x "$tmp/bin/docker" "$tmp/bin/trivy" sha=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa registry=registry.example.com/easyai api_image=$registry/ai-gateway:$sha web_image=$registry/ai-gateway-web:$sha run_build() { env \ PATH="$tmp/bin:$PATH" \ MOCK_LOG="$tmp/calls.log" \ IMAGE_TAG="$sha" \ AI_GATEWAY_IMAGE_REGISTRY="$registry" \ AI_GATEWAY_BUILDX_BUILDER=gateway-test \ AI_GATEWAY_BUILDX_CACHE_LIMIT=2gb \ "$script" "$@" } : >"$tmp/calls.log" run_build grep -Fq "docker buildx prune --builder gateway-test --force --max-used-space 2gb" "$tmp/calls.log" grep -Fq "docker image rm $api_image $web_image" "$tmp/calls.log" grep -Fq 'trivy image --db-repository ghcr.m.daocloud.io/aquasecurity/trivy-db:2' \ "$tmp/calls.log" : >"$tmp/calls.log" run_build --keep-images grep -Fq "docker buildx prune --builder gateway-test --force --max-used-space 2gb" "$tmp/calls.log" if grep -Fq 'docker image rm ' "$tmp/calls.log"; then echo '--keep-images must preserve fully built images' >&2 exit 1 fi : >"$tmp/calls.log" if MOCK_PRUNE_FAIL=1 run_build; then echo 'a prune failure must fail an otherwise successful build' >&2 exit 1 fi : >"$tmp/calls.log" if MOCK_IMAGE_RM_FAIL=1 run_build; then echo 'an image cleanup failure must fail an otherwise successful build' >&2 exit 1 fi : >"$tmp/calls.log" if MOCK_BUILD_FAIL=1 run_build; then echo 'a failed image build must fail the script' >&2 exit 1 fi grep -Fq "docker image rm $api_image $web_image" "$tmp/calls.log" for invalid_limit in 0gb 2 2GB -1gb '2gb --all'; do : >"$tmp/calls.log" if env \ PATH="$tmp/bin:$PATH" \ MOCK_LOG="$tmp/calls.log" \ IMAGE_TAG="$sha" \ AI_GATEWAY_IMAGE_REGISTRY="$registry" \ AI_GATEWAY_BUILDX_CACHE_LIMIT="$invalid_limit" \ "$script" >/dev/null 2>&1; then printf 'invalid cache limit was accepted: %s\n' "$invalid_limit" >&2 exit 1 fi if [[ -s $tmp/calls.log ]]; then printf 'invalid cache limit reached Docker: %s\n' "$invalid_limit" >&2 exit 1 fi done echo 'ci_build_images_tests=PASS'