Spaces:
Running
Running
# Default value for the --ui flag | |
ui=false | |
# Absolute path to the project root directory | |
PROJECT_ROOT="../../" | |
# Check if necessary commands are available | |
for cmd in npx poetry fuser; do | |
if ! command -v $cmd &> /dev/null; then | |
echo "Error: Required command '$cmd' is not installed. Aborting." | |
exit 1 | |
fi | |
done | |
# Parse command-line arguments | |
while [[ $# -gt 0 ]]; do | |
key="$1" | |
case $key in | |
--ui) | |
ui=true | |
shift | |
;; | |
*) | |
echo "Unknown option: $key" | |
exit 1 | |
;; | |
esac | |
shift | |
done | |
# Function to forcibly terminate a process by port | |
terminate_process_by_port() { | |
port="$1" | |
echo "Terminating process on port: $port" | |
if ! fuser -k -n tcp "$port"; then | |
echo "Failed to terminate process on port $port. Please check manually." | |
else | |
echo "Process terminated." | |
fi | |
} | |
delete_temp() { | |
if cd "$PROJECT_ROOT"; then | |
echo "Deleting temp database" | |
rm -f temp && echo "Temp database deleted." || echo "Failed to delete temp database." | |
else | |
echo "Failed to navigate to project root for cleanup." | |
fi | |
} | |
# Trap signals to ensure cleanup on script termination | |
trap 'terminate_process_by_port 7860; terminate_process_by_port 3000; delete_temp' EXIT | |
# Ensure the script is executed from the project root directory | |
if ! cd "$PROJECT_ROOT"; then | |
echo "Error: Failed to navigate to project root directory. Aborting." | |
exit 1 | |
fi | |
# Install playwright if not installed yet | |
if ! npx playwright install; then | |
echo "Error: Failed to install Playwright. Aborting." | |
exit 1 | |
fi | |
# Start the frontend | |
make frontend > /dev/null 2>&1 & | |
# Adjust sleep duration as needed | |
sleep 10 | |
# Install backend dependencies | |
if ! poetry install; then | |
echo "Error: Failed to install backend dependencies. Aborting." | |
exit 1 | |
fi | |
# Start the backend | |
LANGFLOW_DATABASE_URL=sqlite:///./temp LANGFLOW_AUTO_LOGIN=True poetry run langflow run --backend-only --port 7860 --host 0.0.0.0 --no-open-browser > /dev/null 2>&1 & | |
backend_pid=$! # Capture PID of the backend process | |
# Adjust sleep duration as needed | |
sleep 25 | |
# Navigate to the test directory | |
if ! cd src/frontend; then | |
echo "Error: Failed to navigate to test directory. Aborting." | |
kill $backend_pid # Terminate the backend process if navigation fails | |
echo "Backend process terminated." | |
exit 1 | |
fi | |
# Check if backend is running | |
if ! lsof -i :7860; then | |
echo "Error: Backend is not running. Aborting." | |
exit 1 | |
fi | |
# Run Playwright tests | |
if [ "$ui" = true ]; then | |
TEST_COMMAND="npx playwright test tests/core --ui --project=chromium" | |
else | |
TEST_COMMAND="npx playwright test tests/core --project=chromium" | |
fi | |
if ! PLAYWRIGHT_HTML_REPORT=playwright-report/e2e $TEST_COMMAND; then | |
echo "Error: Playwright tests failed. Aborting." | |
exit 1 | |
fi | |
if [ "$ui" = true ]; then | |
echo "Opening Playwright report..." | |
npx playwright show-report | |
fi | |
trap 'terminate_process_by_port 7860; terminate_process_by_port 3000; delete_temp; kill $backend_pid 2>/dev/null' EXIT |