49 lines
2.3 KiB
Bash
Executable File
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"
|