run-tests.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
cd "$REPO_ROOT"
section() {
printf '\n%s\n' "$1"
}
find_command() {
local command_name="$1"
shift
local command_path
command_path="$(command -v "$command_name" 2>/dev/null || true)"
if [[ -n "$command_path" && -x "$command_path" ]]; then
printf '%s\n' "$command_path"
return
fi
for command_path in "$@"; do
if [[ -n "$command_path" && -x "$command_path" ]]; then
printf '%s\n' "$command_path"
return
fi
done
printf 'Missing required command: %s\n' "$command_name" >&2
return 127
}
find_real_node() {
local command_path
command_path="$(command -v node 2>/dev/null || true)"
for command_path in "$command_path" "$@"; do
if [[ -n "$command_path" && -x "$command_path" ]] && \
"$command_path" -e 'process.exit(process.versions.bun ? 1 : 0)' >/dev/null 2>&1; then
printf '%s\n' "$command_path"
return
fi
done
printf 'Missing required command: node (a real Node.js runtime, not the Bun compatibility layer)\n' >&2
return 127
}
UV_BIN="$(
find_command uv \
"${HOME:+${HOME}/.local/bin/uv}" \
"${HOME:+${HOME}/.cargo/bin/uv}" \
/opt/homebrew/bin/uv \
/usr/local/bin/uv
)"
BUN_BIN="$(
find_command bun \
"${HOME:+${HOME}/.bun/bin/bun}" \
/opt/homebrew/bin/bun \
/usr/local/bin/bun
)"
NODE_BIN="$(
find_real_node \
"${NVM_BIN:+${NVM_BIN}/node}" \
"${VOLTA_HOME:+${VOLTA_HOME}/bin/node}" \
"${HOME:+${HOME}/.volta/bin/node}" \
/opt/homebrew/bin/node \
/usr/local/bin/node \
/usr/bin/node \
/run/current-system/sw/bin/node
)"
# Bun follows JavaScript bin shebangs through PATH. Require real Node so
# Vitest and Jest do not run inside Bun's Node compatibility layer.
NODE_DIR="$(dirname "$NODE_BIN")"
PATH="$NODE_DIR${PATH:+:$PATH}"
export PATH
section "Toolchain"
printf 'uv: %s\n' "$UV_BIN"
"$UV_BIN" --version
printf 'bun: %s\n' "$BUN_BIN"
"$BUN_BIN" --version
printf 'node: %s\n' "$NODE_BIN"
"$NODE_BIN" --version
section "Core Python tests"
"$UV_BIN" sync --all-extras
"$UV_BIN" run --all-extras pytest
section "Core frontend tests"
(
cd frontend
"$BUN_BIN" install --frozen-lockfile
"$BUN_BIN" run test --run
)
section "SaaS backend tests"
(
cd saas-platform/platform-backend
"$UV_BIN" sync
"$UV_BIN" run pytest
)
section "SaaS frontend tests"
(
cd saas-platform/platform-frontend
"$BUN_BIN" install --frozen-lockfile
"$BUN_BIN" run test
)
section "SaaS frontend API command test"
(
cd saas-platform/platform-frontend
"$BUN_BIN" run test:api-check
)
section "All standard cross-platform test suites passed"