chore(deps): update dependency oxlint to ^1.72.0 #55
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: UI E2E | |
| on: | |
| pull_request: | |
| paths: | |
| - .github/workflows/ci-ui.yml | |
| - "frontend/**" | |
| - "tests/ui/**" | |
| - "src/qwen3_tts/**" | |
| - requirements-dev.txt | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-ui-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| e2e: | |
| if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository | |
| runs-on: arc-general | |
| timeout-minutes: 20 | |
| env: | |
| PYTHONPATH: src:src/export | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 | |
| with: | |
| python-version: "3.13" | |
| cache: pip | |
| cache-dependency-path: requirements-dev.txt | |
| - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 | |
| with: | |
| node-version: "24" | |
| - name: Install Python test dependencies | |
| run: python -m pip install -r requirements-dev.txt | |
| - name: Environment and import smoke test | |
| run: | | |
| echo "=== Environment ===" | |
| python --version | |
| pip list --format=columns | head -30 | |
| echo "PYTHONPATH=$PYTHONPATH" | |
| echo "PWD=$(pwd)" | |
| echo "=== Import smoke test ===" | |
| python -c " | |
| import sys | |
| sys.path.insert(0, 'src') | |
| sys.path.insert(0, 'src/export') | |
| # Install fake model before importing app (no torch on runner) | |
| from tests.fixtures.fake_runtime import FakeModelRuntime | |
| rt = FakeModelRuntime() | |
| rt.install() | |
| errors = [] | |
| def try_import(name): | |
| try: | |
| __import__(name) | |
| except Exception as e: | |
| errors.append(f'{name}: {e}') | |
| try_import('flask') | |
| try_import('soundfile') | |
| try_import('numpy') | |
| try_import('qwen3_tts') | |
| try_import('qwen3_tts.app') | |
| if errors: | |
| print('IMPORT ERRORS:') | |
| for e in errors: | |
| print(' ', e) | |
| sys.exit(1) | |
| else: | |
| print('All critical imports OK') | |
| " | |
| - name: Install frontend dependencies | |
| working-directory: frontend | |
| run: npm ci | |
| - name: Build frontend | |
| working-directory: frontend | |
| run: npm run build | |
| - name: Install Playwright test dependencies | |
| working-directory: tests/ui | |
| run: npm ci | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ runner.os }}-${{ hashFiles('tests/ui/package-lock.json') }} | |
| - name: Install Playwright browsers | |
| working-directory: tests/ui | |
| run: npx playwright install --with-deps chromium | |
| - name: Start fake_model_server | |
| run: | | |
| # Start in background; use a wrapper to ensure we get the PID and logs | |
| python tests/ui/fixtures/fake_model_server.py > fake_model_server.log 2>&1 & | |
| SERVER_PID=$! | |
| echo "fake_model_server PID=$SERVER_PID" | |
| # Give it time to start (up to 10s, polling every 1s) | |
| echo "=== Waiting for fake_model_server to become healthy ===" | |
| deadline=$((SECONDS + 10)) | |
| while [ $SECONDS -lt $deadline ]; do | |
| sleep 1 | |
| set +e | |
| response=$(curl -s -w "\n%{http_code}" http://127.0.0.1:8319/health 2>&1 || true) | |
| code=$(echo "$response" | tail -1) | |
| set -e | |
| if [ "$code" = "200" ]; then | |
| echo "fake_model_server is healthy after $((SECONDS))s" | |
| echo "health response:" | |
| echo "$response" | |
| exit 0 | |
| fi | |
| done | |
| # If we get here, it did not become healthy; dump diagnostics | |
| echo "=== fake_model_server did not become healthy ===" | |
| echo "Server PID alive?" | |
| kill -0 "$SERVER_PID" 2>/dev/null && echo "YES" || echo "NO" | |
| echo "--- fake_model_server logs (full) ---" | |
| cat fake_model_server.log || echo "(empty or unreadable)" | |
| echo "--- end logs ---" | |
| # Try running it directly for 5s to capture any crash output | |
| echo "=== Direct run attempt (5s timeout) ===" | |
| timeout 5 python tests/ui/fixtures/fake_model_server.py || true | |
| echo "=== end direct run ===" | |
| exit 1 | |
| - name: Run Playwright E2E tests | |
| working-directory: tests/ui | |
| env: | |
| PYTHONPATH: src:src/export | |
| QWEN3_TTS_UI_URL: http://127.0.0.1:8319 | |
| run: npm run test:ci | |
| - name: Upload Playwright report | |
| if: failure() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: playwright-report | |
| path: tests/ui/playwright-report | |
| retention-days: 1 | |
| - name: Upload fake_model_server log | |
| if: failure() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: fake_model_server-log | |
| path: fake_model_server.log | |
| retention-days: 1 |