Files
fingerprint-chromium/tests/check.sh
T
rogee 8c3f6b02f3
Build and publish image / image (push) Successful in 8m49s
HH-708: align container fonts with fingerprint maps (#4)
2026-08-26 21:42:11 +08:00

89 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
bash -n scripts/build.sh tests/check.sh
sh -n docker-entrypoint.sh
grep -q 'Xvfb :99' docker-entrypoint.sh
! grep -q -- '--headless' docker-entrypoint.sh
grep -q -- '--no-sandbox' docker-entrypoint.sh
grep -q 'TCP-LISTEN:' docker-entrypoint.sh
grep -q 'git.ipao.vip/rogee/fingerprint-chromium' .gitea/workflows/publish.yml
grep -q 'ghcr.io/rogeecn/fingerprint-chromium' .github/workflows/publish.yml
grep -q 'packages: write' .gitea/workflows/publish.yml
grep -q 'packages: write' .github/workflows/publish.yml
grep -q 'org.opencontainers.image.revision="$OCI_REVISION"' Dockerfile
grep -q 'org.opencontainers.image.source="$OCI_SOURCE"' Dockerfile
grep -q 'OCI_SOURCE: https://git.ipao.vip/rogee/fingerprint-chromium' .gitea/workflows/publish.yml
grep -q '/link/fingerprint-chromium' .gitea/workflows/publish.yml
grep -q "repository.full_name // empty" .gitea/workflows/publish.yml
test "$(grep -c 'Authorization: token \$REGISTRY_TOKEN' .gitea/workflows/publish.yml)" -eq 3
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
printf '%s\n' '#!/bin/sh' 'printf '\''{"tag_name":"1.2.3.4","assets":[{"name":"ungoogled-chromium-1.2.3.4-test-x86_64_linux.tar.xz","browser_download_url":"https://example.invalid/chromium.tar.xz"}]}'\''' > "$tmpdir/curl"
printf '%s\n' '#!/bin/sh' 'printf '\''%s\n'\'' "$*" >> "$DOCKER_LOG"' '[ "$1 $2" = "manifest inspect" ]' > "$tmpdir/docker"
chmod +x "$tmpdir/curl" "$tmpdir/docker"
docker_log="$tmpdir/docker.log"
DOCKER_LOG="$docker_log" OCI_REVISION=test PUSH=true PATH="$tmpdir:$PATH" \
./scripts/build.sh registry.example/fingerprint-chromium > "$tmpdir/output"
test "$(cat "$docker_log")" = "manifest inspect registry.example/fingerprint-chromium:1.2.3.4"
grep -q 'skipping build and push' "$tmpdir/output"
font_packages=(
fonts-croscore
fonts-crosextra-caladea
fonts-crosextra-carlito
fonts-dejavu-core
fonts-dejavu-extra
fonts-freefont-ttf
fonts-liberation
fonts-liberation-sans-narrow
fonts-noto-cjk
fonts-noto-color-emoji
fonts-noto-core
fonts-ubuntu
fonts-urw-base35
)
version="$(curl --fail --location --retry 3 --silent --show-error \
https://api.github.com/repos/adryfish/fingerprint-chromium/releases/latest \
| jq -er '.tag_name | select(test("^[0-9]+(\\.[0-9]+){3}$"))')"
image="fingerprint-chromium-test:$version"
CHROME_VERSION="$version" ./scripts/build.sh fingerprint-chromium-test
docker run --rm --entrypoint sh "$image" -c '
for package do
test "$(dpkg-query -W -f="\${Status}" "$package" 2>/dev/null)" = "install ok installed" || exit 1
done
' sh "${font_packages[@]}"
docker run --rm --entrypoint sh "$image" -c '
for font do
fc-match --format "%{family}\n" "$font" | grep -Fq "$font" || exit 1
done
' sh Arimo Tinos Cousine Caladea Carlito \
'Noto Sans CJK JP' 'Noto Sans CJK SC' 'Noto Sans CJK TC' \
'Noto Serif CJK JP' 'Noto Serif CJK SC' 'Noto Serif CJK TC'
probe() {
local platform="$1" threshold="$2" output count
output="$(docker run --rm -i --entrypoint sh "$image" -c '
cat >/tmp/font-probe.html
exec /opt/chromium/chrome --no-sandbox --headless=new --disable-gpu --disable-dev-shm-usage \
--fingerprint=1000 --fingerprint-platform="$1" \
--dump-dom "file:///tmp/font-probe.html#$1"
' sh "$platform" <tests/font-probe.html 2>/dev/null)"
count="$(sed -n 's/.*data-count="\([0-9][0-9]*\)".*/\1/p' <<<"$output")"
[[ "$count" =~ ^[0-9]+$ && "$count" -ge "$threshold" ]] || {
printf '%s font probe: expected >= %s, got %s\n' "$platform" "$threshold" "${count:-none}" >&2
return 1
}
printf '%s font probe: %s\n' "$platform" "$count"
}
probe windows 22
probe macos 24
probe linux 27