Files
ThothII/scripts/verify-container-images.sh

49 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
cd "$(dirname "$0")/.."
platform=${PLATFORM:-linux/arm64}
slug=$(printf '%s' "$platform" | tr '/:' '--')
core_image="thothii-core:verify-$slug"
frontend_image="thothii-frontend:verify-$slug"
inventory_dir=${CONTAINER_INVENTORY_DIR:-.artifacts/container-images/$slug}
mkdir -p "$inventory_dir"
docker buildx build --platform "$platform" --load \
-f docker/core.Dockerfile -t "$core_image" .
docker buildx build --platform "$platform" --load \
-f docker/frontend.Dockerfile -t "$frontend_image" .
expected_pi_version=$(sed -n 's/^ARG PI_VERSION=//p' docker/core.Dockerfile)
test -n "$expected_pi_version"
test "$(docker image inspect --format '{{ index .Config.Labels "io.thothii.pi.version" }}' "$core_image")" = "$expected_pi_version"
test "$(docker image inspect --format '{{ index .Config.Labels "org.opencontainers.image.title" }}' "$core_image")" = "thothii-core"
test "$(docker image inspect --format '{{ index .Config.Labels "org.opencontainers.image.title" }}' "$frontend_image")" = "thothii-frontend"
docker run --rm --platform "$platform" --entrypoint /app/docker/smoke/core-smoke.sh \
"$core_image"
docker run --rm --platform "$platform" "$frontend_image" frontend-config-smoke
./docker/smoke/frontend-policy-smoke.sh
if docker run --rm --platform "$platform" -e THOTH_PUBLIC_EXPOSURE=true -e AUTH_MODE=none \
"$core_image" server >/dev/null 2>&1; then
echo "core accepted public exposure without upstream authentication" >&2
exit 1
fi
docker image inspect "$core_image" >"$inventory_dir/core-image-inspect.json"
docker image inspect "$frontend_image" >"$inventory_dir/frontend-image-inspect.json"
docker run --rm --platform "$platform" --entrypoint sh "$core_image" -c \
'dpkg-query -W; /opt/venv/bin/pip freeze; /opt/venv/bin/python -c '"'"'import glob,json; rows=set();
for path in glob.glob("/app/backend/node_modules/**/package.json", recursive=True):
try:
package=json.load(open(path)); rows.add((package.get("name","?"), package.get("version","?")))
except (OSError, ValueError): pass
print("\n".join(f"{name}=={version}" for name,version in sorted(rows)))'"'"'' \
>"$inventory_dir/core-packages.txt"
docker run --rm --platform "$platform" --entrypoint sh "$frontend_image" -c 'apk info -vv' \
>"$inventory_dir/frontend-packages.txt"
echo "container verification and inventory complete for $platform"