dify/dev/pytest/pytest_full.sh

59 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
set -ex
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
cd "$SCRIPT_DIR/../.."
PYTEST_TIMEOUT="${PYTEST_TIMEOUT:-180}"
# Ensure OpenDAL local storage works even if .env isn't loaded
export STORAGE_TYPE=${STORAGE_TYPE:-opendal}
export OPENDAL_SCHEME=${OPENDAL_SCHEME:-fs}
export OPENDAL_FS_ROOT=${OPENDAL_FS_ROOT:-/tmp/dify-storage}
mkdir -p "${OPENDAL_FS_ROOT}"
# Prepare env files like CI
cp -n docker/.env.example docker/.env || true
cp -n docker/middleware.env.example docker/middleware.env || true
cp -n api/tests/integration_tests/.env.example api/tests/integration_tests/.env || true
# Expose service ports (same as CI) without leaving the repo dirty
EXPOSE_BACKUPS=()
for f in docker/docker-compose.yaml docker/tidb/docker-compose.yaml; do
if [[ -f "$f" ]]; then
cp "$f" "$f.ci.bak"
EXPOSE_BACKUPS+=("$f")
fi
done
if command -v yq >/dev/null 2>&1; then
sh .github/workflows/expose_service_ports.sh || true
else
echo "skip expose_service_ports (yq not installed)" >&2
fi
# Optionally start middleware stack (db, redis, sandbox, ssrf proxy) to mirror CI
STARTED_MIDDLEWARE=0
if [[ "${SKIP_MIDDLEWARE:-0}" != "1" ]]; then
docker compose -f docker/docker-compose.middleware.yaml --env-file docker/middleware.env up -d db_postgres redis sandbox ssrf_proxy
STARTED_MIDDLEWARE=1
# Give services a moment to come up
sleep 5
fi
cleanup() {
if [[ $STARTED_MIDDLEWARE -eq 1 ]]; then
docker compose -f docker/docker-compose.middleware.yaml --env-file docker/middleware.env down
fi
for f in "${EXPOSE_BACKUPS[@]}"; do
mv "$f.ci.bak" "$f"
done
}
trap cleanup EXIT
pytest --timeout "${PYTEST_TIMEOUT}" \
api/tests/integration_tests/workflow \
api/tests/integration_tests/tools \
api/tests/test_containers_integration_tests \
api/tests/unit_tests