Files
baseimage/bin/test
T
sneak 8f976e38e0 Add nginx (closes #11)
Install nginx from apt and check nginx -t in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:45:26 +00:00

72 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Smoke-test a built image: toolchains resolve, yarn/pnpm work offline,
# nothing left in /tmp, and runsvinit stops a runit service cleanly on
# docker stop with exit code 0.
set -euo pipefail
cd "$(dirname "$0")/.."
. bin/lib.sh
arch="${1:?usage: bin/test <arch>}"
use_arch_host "$arch"
img="$(dev_tag "$arch")"
name="baseimage-test-$arch-$$"
echo "== $img: toolchains and cleanup"
docker run --rm "$img" bash -ec '
# cleanup checks first: node writes a compile cache into /tmp when run
test -z "$(ls -A /tmp)"
test ! -e /usr/share/doc/bash
test ! -e /tmp/build.sh
go version; node --version; python3 --version; hugo version | head -1
COREPACK_ENABLE_NETWORK=0 yarn --version
COREPACK_ENABLE_NETWORK=0 pnpm --version
prettier --version
shellcheck --version
govulncheck -version
test -e /usr/share/zoneinfo/America/New_York
zstd --version
sqlite3 --version
vips --version
vips -l | grep -i heif > /dev/null
magick --version
gs --version
ruby --version
bundle --version
valkey-server --version
valkey-cli --version
valkey-server /etc/valkey/valkey.conf
ok=; for i in $(seq 1 50); do if valkey-cli ping 2>/dev/null | grep -q PONG; then ok=1; break; fi; sleep 0.1; done; [ -n "$ok" ]
valkey-cli shutdown nosave
psql --version
postgres --version
nginx -t
playwright --version
firefox --version
geckodriver --version
chromium --version
'
echo "== $img: runit service lifecycle"
docker rm -f "$name" >/dev/null 2>&1 || true
docker run -d --name "$name" "$img" bash -ec '
mkdir -p /etc/sv/demo
printf "%s\n" "#!/bin/bash" "exec 2>&1" \
"trap \"echo demo: got TERM; sleep 1; echo demo: clean exit; exit 0\" TERM" \
"echo demo: started" "while true; do sleep 1; done" > /etc/sv/demo/run
chmod +x /etc/sv/demo/run
ln -s /etc/sv/demo /etc/service/demo
exec /usr/local/sbin/runsvinit
' >/dev/null
sleep 3
docker exec "$name" sv status demo
docker stop "$name" >/dev/null
code="$(docker inspect "$name" --format '{{.State.ExitCode}}')"
logs="$(docker logs "$name" 2>&1)"
docker rm "$name" >/dev/null
echo "$logs"
if [ "$code" != 0 ] || ! grep -q 'demo: clean exit' <<<"$logs"; then
echo "error: graceful stop failed (exit $code)" >&2
exit 1
fi
echo "== $img: ok"