Build and smoke-test AutoLibrary as a container
Build and test website container / build (push) Successful in 11m33s

This commit is contained in:
KenanZhu committed 2026-11-04 10:45:57 +08:00
1 parent e7bd715243
commit 9065a0d3cf
9 files changed
+219 -9

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
image=${1:?Usage: bash deploy/smoke-container.sh IMAGE}
container=
fixture=
cleanup() {
local status=$?
if [[ -n $container ]]; then
if ((status != 0)); then
docker logs "$container" >&2 || true
fi
docker rm -f "$container" >/dev/null || true
fi
if [[ -n $fixture ]]; then
docker volume rm "$fixture" >/dev/null || true
fi
}
trap cleanup EXIT
fixture=$(docker volume create)
docker run --rm -i --network none --user 0:0 --cap-drop ALL \
--mount "type=volume,source=$fixture,target=/fixture" \
--entrypoint /bin/sh "$image" \
-c 'umask 022; cat > /fixture/config.json' < config.example.json
container=$(docker create --network none --read-only --cap-drop ALL \
--security-opt no-new-privileges \
--mount "type=volume,source=$fixture,target=/fixture,readonly" \
--tmpfs /app/backend/data:uid=10001,gid=10001,mode=0700 \
--tmpfs /app/logs:uid=10001,gid=10001,mode=0700 \
--tmpfs /tmp:mode=1777 "$image" start --config /fixture/config.json)
docker start "$container" >/dev/null
for ((attempt = 0; attempt < 30; attempt++)); do
if [[ $(docker inspect -f '{{.State.Health.Status}}' "$container") == healthy ]]; then
for path in /marketplace /assets/favicon.svg /api/download/latest; do
docker exec "$container" curl -fsS --noproxy '*' --max-time 3 -o /dev/null \
"http://127.0.0.1:3000$path"
done
docker stop --time 20 "$container" >/dev/null
[[ $(docker inspect -f '{{.State.ExitCode}}' "$container") == 0 ]]
echo 'Image passed frontend, SQLite API, and graceful shutdown checks.'
exit 0
fi
if [[ $(docker inspect -f '{{.State.Running}}' "$container") != true ]]; then
break
fi
sleep 2
done
echo 'Container did not become healthy.' >&2
exit 1