Files
moli/scripts/moli-wpt-run.sh
2026-08-11 00:10:12 +08:00

88 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "$script_dir/.." && pwd)"
wpt_root="${WPT_ROOT:-$repo_root/../wpt}"
venv="${WPT_MOLI_VENV:-$wpt_root/.venv-moli}"
moli_bin="${MOLI_BIN:-$repo_root/target/debug/moli}"
usage() {
cat <<'USAGE'
Usage:
scripts/moli-wpt-run.sh [--wpt-root PATH] [--venv PATH] [--moli-bin PATH] [--] [WPT_TEST_OR_RUN_ARG...]
Runs upstream WPT wdspec tests through the Moli wptrunner product.
The Python environment is created, installed, and executed via uv.
USAGE
}
args=()
while [[ $# -gt 0 ]]; do
case "$1" in
--wpt-root)
shift
wpt_root="${1:?missing --wpt-root value}"
venv="${WPT_MOLI_VENV:-$wpt_root/.venv-moli}"
;;
--venv)
shift
venv="${1:?missing --venv value}"
;;
--moli-bin)
shift
moli_bin="${1:?missing --moli-bin value}"
;;
--help|-h)
usage
exit 0
;;
--)
shift
args+=("$@")
break
;;
*)
args+=("$1")
;;
esac
shift
done
if [[ ! -x "$moli_bin" ]]; then
echo "moli binary is not executable: $moli_bin" >&2
exit 2
fi
if [[ ! -x "$venv/bin/python" ]]; then
uv venv "$venv" --seed
fi
uv pip install --python "$venv/bin/python" \
-r "$wpt_root/tools/manifest/requirements.txt" \
-r "$wpt_root/tools/wpt/requirements.txt" \
-r "$wpt_root/tools/wptrunner/requirements.txt" \
-e "$repo_root/tools/wptrunner-moli"
# Some upstream wdspec files in local checkouts can miss an explicit
# pytest.mark.asyncio marker even though their async tests are intended to run.
# WPT's PytestExecutor treats pytest's implicit async skip as a harness error,
# so default to auto mode while allowing callers to override it.
case " ${PYTEST_ADDOPTS:-} " in
*"--asyncio-mode"*|*"asyncio_mode"*) ;;
*) export PYTEST_ADDOPTS="${PYTEST_ADDOPTS:+$PYTEST_ADDOPTS }--asyncio-mode=auto" ;;
esac
exec env WPT_ROOT="$wpt_root" uv run --no-project --python "$venv/bin/python" \
python -m moli_wptrunner.run \
--metadata "$wpt_root" \
--tests "$wpt_root" \
--manifest "$wpt_root/MANIFEST.json" \
--ssl-type pregenerated \
--ca-cert-path "$wpt_root/tools/certs/cacert.pem" \
--host-key-path "$wpt_root/tools/certs/web-platform.test.key" \
--host-cert-path "$wpt_root/tools/certs/web-platform.test.pem" \
--manifest-update --processes 1 --test-types wdspec \
--binary "$moli_bin" \
--product moli \
"${args[@]}"