feat(client): implement Phase 2 unified client foundation #687
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: CI | |
| on: | |
| pull_request: | |
| branches: [main] | |
| push: | |
| branches: [main] | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| smoke: | |
| name: Smoke (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 25 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [windows-latest, macos-latest, ubuntu-latest] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Build local client assets | |
| uses: ./.github/actions/build-client | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Install uv | |
| run: python -m pip install "uv>=0.7,<1.0" | |
| - name: Install Linux runtime libraries | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends libgl1 libegl1 libglib2.0-0 libxcb-cursor0 libportaudio2 | |
| - name: Install macOS runtime libraries | |
| if: runner.os == 'macOS' | |
| run: brew install portaudio | |
| - name: Install Python packages | |
| run: uv sync --locked --all-extras --group test | |
| - name: Verify required runtime dependencies | |
| run: uv run python scripts/verify_runtime_dependencies.py all | |
| - name: Verify packaged client assets | |
| run: uv run python scripts/verify_client_assets.py --root src/row_bot/static/client-v2 --compare frontend/dist --strict | |
| - name: Compile Python files | |
| run: uv run python -m compileall -q -x "(\\.git|\\.venv|dist|build|__pycache__)" src tests scripts app.py debug_tools.py launcher.py | |
| - name: Focused startup hardening tests | |
| run: uv run python -m pytest tests/test_dependency_metadata.py tests/test_optional_dependency_imports.py tests/test_startup_hardening.py tests/test_app_port.py | |
| - name: Focused agent orchestration tests | |
| run: uv run python -m pytest tests/test_agent_profiles.py tests/test_agent_context.py tests/test_agent_tool_catalog.py tests/test_agent_runs.py tests/test_agent_runner.py tests/test_agent_tool.py tests/test_agent_tool_filtering.py tests/test_agent_write_locks.py tests/test_goal_mode.py tests/test_channel_goal_runtime.py tests/test_row_bot_status_agents.py | |
| - name: Focused provider model selection tests | |
| run: uv run python -m pytest tests/test_provider_catalog.py tests/test_provider_selection.py tests/test_provider_runtime.py tests/test_provider_media.py tests/test_row_bot_status_media.py tests/test_provider_subscription_auth.py tests/test_atlascloud_first_class_provider.py tests/test_openai_compatible_transport.py tests/test_claude_subscription_auth.py tests/test_claude_subscription_transport.py tests/test_xai_oauth_provider.py tests/test_xai_oauth_transport.py tests/test_xai_media.py tests/test_model_picker_regressions.py -k "not xai_oauth_loopback" | |
| - name: Changed-test advisory | |
| if: github.event_name == 'pull_request' | |
| run: uv run python scripts/run_test_matrix.py changed --dry-run --base origin/main | |
| - name: Deterministic subsystem and contract tests | |
| run: uv run python scripts/run_test_matrix.py contract-subsystem | |
| - name: Runtime smoke on Linux | |
| if: runner.os == 'Linux' | |
| run: uv run python scripts/smoke_app.py --port 8090 --timeout 120 | |
| - name: Validate Linux installer scripts | |
| if: runner.os == 'Linux' | |
| run: bash -n build_linux_app.sh installer/build_linux_app.sh installer/install-linux.sh | |
| full-test: | |
| name: Full regression suite | |
| runs-on: macos-latest | |
| timeout-minutes: 45 | |
| needs: smoke | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Build local client assets | |
| uses: ./.github/actions/build-client | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Install uv | |
| run: python -m pip install "uv>=0.7,<1.0" | |
| - name: Install Ollama | |
| run: | | |
| brew install portaudio | |
| brew install ollama | |
| ollama serve & | |
| sleep 5 | |
| ollama pull qwen3:1.7b | |
| - name: Install Python packages | |
| run: uv sync --locked --all-extras --group test | |
| - name: Verify required runtime dependencies | |
| run: uv run python scripts/verify_runtime_dependencies.py all | |
| - name: Verify packaged client assets | |
| run: uv run python scripts/verify_client_assets.py --root src/row_bot/static/client-v2 --compare frontend/dist --strict | |
| - name: Run full PR verification matrix | |
| run: uv run python scripts/run_test_matrix.py pr | |
| - name: Upload migrated subsystem coverage | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: migrated-subsystem-coverage | |
| path: .tmp/coverage/migrated-subsystems.xml | |
| if-no-files-found: warn |