110 lines
2.8 KiB
Bash
Executable File
110 lines
2.8 KiB
Bash
Executable File
#!/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'
|