Spaces:
Paused
Paused
| name: Integration Test | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| pull_request: | |
| branches: | |
| - main | |
| - dev | |
| jobs: | |
| cypress-run: | |
| name: Run Cypress Integration Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Maximize build space | |
| uses: AdityaGarg8/[email protected] | |
| with: | |
| remove-android: 'true' | |
| remove-haskell: 'true' | |
| remove-codeql: 'true' | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Build and run Compose Stack | |
| run: | | |
| docker compose \ | |
| --file docker-compose.yaml \ | |
| --file docker-compose.api.yaml \ | |
| --file docker-compose.a1111-test.yaml \ | |
| up --detach --build | |
| - name: Delete Docker build cache | |
| run: | | |
| docker builder prune --all --force | |
| - name: Wait for Ollama to be up | |
| timeout-minutes: 5 | |
| run: | | |
| until curl --output /dev/null --silent --fail http://localhost:11434; do | |
| printf '.' | |
| sleep 1 | |
| done | |
| echo "Service is up!" | |
| - name: Preload Ollama model | |
| run: | | |
| docker exec ollama ollama pull qwen:0.5b-chat-v1.5-q2_K | |
| - name: Cypress run | |
| uses: cypress-io/github-action@v6 | |
| env: | |
| LIBGL_ALWAYS_SOFTWARE: 1 | |
| with: | |
| browser: chrome | |
| wait-on: 'http://localhost:3000' | |
| config: baseUrl=http://localhost:3000 | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| name: Upload Cypress videos | |
| with: | |
| name: cypress-videos | |
| path: cypress/videos | |
| if-no-files-found: ignore | |
| - name: Extract Compose logs | |
| if: always() | |
| run: | | |
| docker compose logs > compose-logs.txt | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| name: Upload Compose logs | |
| with: | |
| name: compose-logs | |
| path: compose-logs.txt | |
| if-no-files-found: ignore | |
| # pytest: | |
| # name: Run Backend Tests | |
| # runs-on: ubuntu-latest | |
| # steps: | |
| # - uses: actions/checkout@v4 | |
| # - name: Set up Python | |
| # uses: actions/setup-python@v5 | |
| # with: | |
| # python-version: ${{ matrix.python-version }} | |
| # - name: Install dependencies | |
| # run: | | |
| # python -m pip install --upgrade pip | |
| # pip install -r backend/requirements.txt | |
| # - name: pytest run | |
| # run: | | |
| # ls -al | |
| # cd backend | |
| # PYTHONPATH=. pytest . -o log_cli=true -o log_cli_level=INFO | |
| migration_test: | |
| name: Run Migration Tests | |
| runs-on: ubuntu-latest | |
| services: | |
| postgres: | |
| image: postgres | |
| env: | |
| POSTGRES_PASSWORD: postgres | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| ports: | |
| - 5432:5432 | |
| # mysql: | |
| # image: mysql | |
| # env: | |
| # MYSQL_ROOT_PASSWORD: mysql | |
| # MYSQL_DATABASE: mysql | |
| # options: >- | |
| # --health-cmd "mysqladmin ping -h localhost" | |
| # --health-interval 10s | |
| # --health-timeout 5s | |
| # --health-retries 5 | |
| # ports: | |
| # - 3306:3306 | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Set up uv | |
| uses: yezz123/setup-uv@v4 | |
| with: | |
| uv-venv: venv | |
| - name: Activate virtualenv | |
| run: | | |
| . venv/bin/activate | |
| echo PATH=$PATH >> $GITHUB_ENV | |
| - name: Install dependencies | |
| run: | | |
| uv pip install -r backend/requirements.txt | |
| - name: Test backend with SQLite | |
| id: sqlite | |
| env: | |
| WEBUI_SECRET_KEY: secret-key | |
| GLOBAL_LOG_LEVEL: debug | |
| run: | | |
| cd backend | |
| uvicorn open_webui.main:app --port "8080" --forwarded-allow-ips '*' & | |
| UVICORN_PID=$! | |
| # Wait up to 40 seconds for the server to start | |
| for i in {1..40}; do | |
| curl -s http://localhost:8080/api/config > /dev/null && break | |
| sleep 1 | |
| if [ $i -eq 40 ]; then | |
| echo "Server failed to start" | |
| kill -9 $UVICORN_PID | |
| exit 1 | |
| fi | |
| done | |
| # Check that the server is still running after 5 seconds | |
| sleep 5 | |
| if ! kill -0 $UVICORN_PID; then | |
| echo "Server has stopped" | |
| exit 1 | |
| fi | |
| - name: Test backend with Postgres | |
| if: success() || steps.sqlite.conclusion == 'failure' | |
| env: | |
| WEBUI_SECRET_KEY: secret-key | |
| GLOBAL_LOG_LEVEL: debug | |
| DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres | |
| DATABASE_POOL_SIZE: 10 | |
| DATABASE_POOL_MAX_OVERFLOW: 10 | |
| DATABASE_POOL_TIMEOUT: 30 | |
| run: | | |
| cd backend | |
| uvicorn open_webui.main:app --port "8081" --forwarded-allow-ips '*' & | |
| UVICORN_PID=$! | |
| # Wait up to 20 seconds for the server to start | |
| for i in {1..20}; do | |
| curl -s http://localhost:8081/api/config > /dev/null && break | |
| sleep 1 | |
| if [ $i -eq 20 ]; then | |
| echo "Server failed to start" | |
| kill -9 $UVICORN_PID | |
| exit 1 | |
| fi | |
| done | |
| # Check that the server is still running after 5 seconds | |
| sleep 5 | |
| if ! kill -0 $UVICORN_PID; then | |
| echo "Server has stopped" | |
| exit 1 | |
| fi | |
| # Check that service will reconnect to postgres when connection will be closed | |
| status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health/db) | |
| if [[ "$status_code" -ne 200 ]] ; then | |
| echo "Server has failed before postgres reconnect check" | |
| exit 1 | |
| fi | |
| echo "Terminating all connections to postgres..." | |
| python -c "import os, psycopg2 as pg2; \ | |
| conn = pg2.connect(dsn=os.environ['DATABASE_URL'].replace('+pool', '')); \ | |
| cur = conn.cursor(); \ | |
| cur.execute('SELECT pg_terminate_backend(psa.pid) FROM pg_stat_activity psa WHERE datname = current_database() AND pid <> pg_backend_pid();')" | |
| status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health/db) | |
| if [[ "$status_code" -ne 200 ]] ; then | |
| echo "Server has not reconnected to postgres after connection was closed: returned status $status_code" | |
| exit 1 | |
| fi | |
| # - name: Test backend with MySQL | |
| # if: success() || steps.sqlite.conclusion == 'failure' || steps.postgres.conclusion == 'failure' | |
| # env: | |
| # WEBUI_SECRET_KEY: secret-key | |
| # GLOBAL_LOG_LEVEL: debug | |
| # DATABASE_URL: mysql://root:mysql@localhost:3306/mysql | |
| # run: | | |
| # cd backend | |
| # uvicorn open_webui.main:app --port "8083" --forwarded-allow-ips '*' & | |
| # UVICORN_PID=$! | |
| # # Wait up to 20 seconds for the server to start | |
| # for i in {1..20}; do | |
| # curl -s http://localhost:8083/api/config > /dev/null && break | |
| # sleep 1 | |
| # if [ $i -eq 20 ]; then | |
| # echo "Server failed to start" | |
| # kill -9 $UVICORN_PID | |
| # exit 1 | |
| # fi | |
| # done | |
| # # Check that the server is still running after 5 seconds | |
| # sleep 5 | |
| # if ! kill -0 $UVICORN_PID; then | |
| # echo "Server has stopped" | |
| # exit 1 | |
| # fi | |