panda-rpki/scripts/docker/verify_image.sh
yuyr 15c8de82ba
Some checks failed
ci / rust (push) Has been cancelled
ci / docker-runtime (push) Has been cancelled
freeze initial panda-rpki staging
2026-09-01 12:13:53 +08:00

73 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IMAGE=""
ARCHIVE=""
usage() {
cat <<'USAGE'
Usage:
scripts/docker/verify_image.sh --image <tag> [--archive <tar.gz>]
USAGE
}
while [[ "$#" -gt 0 ]]; do
case "$1" in
--image)
IMAGE="$2"
shift 2
;;
--archive)
ARCHIVE="$2"
shift 2
;;
-h|--help)
usage
exit 0
;;
*)
echo "unknown option: $1" >&2
usage >&2
exit 2
;;
esac
done
[[ -n "$IMAGE" ]] || { echo "--image is required" >&2; usage >&2; exit 2; }
command -v docker >/dev/null 2>&1 || { echo "missing required command: docker" >&2; exit 2; }
expect_status() {
local expected="$1"
shift
local actual=0
"$@" >/dev/null 2>&1 || actual=$?
if [[ "$actual" -ne "$expected" ]]; then
echo "unexpected exit status: expected=$expected actual=$actual command=$*" >&2
return 1
fi
}
docker image inspect "$IMAGE" >/dev/null
IMAGE_ARCH="$(docker image inspect --format '{{.Architecture}}' "$IMAGE")"
case "$IMAGE_ARCH" in
amd64|arm64) IMAGE_PLATFORM="linux/$IMAGE_ARCH" ;;
*) echo "unsupported image architecture: $IMAGE_ARCH" >&2; exit 2 ;;
esac
expect_status 2 docker run --rm --platform "$IMAGE_PLATFORM" --entrypoint /opt/panda-rpki-validator/bin/panda-rpki-validator "$IMAGE" --help
expect_status 0 docker run --rm --platform "$IMAGE_PLATFORM" --entrypoint /opt/panda-rpki-validator/bin/panda-rpki-validator-daemon "$IMAGE" --help
expect_status 2 docker run --rm --platform "$IMAGE_PLATFORM" --entrypoint /opt/panda-rpki-validator/entrypoint.sh "$IMAGE" --help
expect_status 0 docker run --rm --platform "$IMAGE_PLATFORM" "$IMAGE" run --help
docker run --rm --platform "$IMAGE_PLATFORM" --entrypoint /bin/bash "$IMAGE" -ceu \
'test -x /opt/panda-rpki-validator/run_validator.sh; \
test -s /opt/panda-rpki-validator/fixtures/manifest.toml; \
test -s /opt/panda-rpki-validator/fixtures/tal/afrinic.tal; \
test -s /opt/panda-rpki-validator/fixtures/ta/afrinic-ta.cer'
if [[ -n "$ARCHIVE" ]]; then
[[ -f "$ARCHIVE" ]] || { echo "missing image archive: $ARCHIVE" >&2; exit 2; }
gzip -t "$ARCHIVE"
gunzip -c "$ARCHIVE" | docker load >/dev/null
fi
echo "image smoke passed: $IMAGE"