name: unit-tests on: pull_request: push: branches: - master concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: unit-test-python: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: python-version: ["3.10", "3.11", "3.12"] os: [ ubuntu-latest, macos-14 ] exclude: - os: macos-14 python-version: "3.10" env: OS: ${{ matrix.os }} PYTHON: ${{ matrix.python-version }} steps: - uses: actions/checkout@v4 - name: Setup Python id: setup-python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} architecture: x64 - name: Install the latest version of uv uses: astral-sh/setup-uv@v5 with: enable-cache: true - name: Install system dependencies run: | if [ "$RUNNER_OS" = "Linux" ]; then sudo apt-get update sudo apt-get install -y make elif [ "$RUNNER_OS" = "macOS" ]; then # make is already installed on macOS runners which make || brew install make fi - name: Install dependencies run: make install-python-dependencies-ci - name: Test Python run: | # Set up environment for Ray workers to access packages export PATH="${{ github.workspace }}/.venv/bin:$PATH" # Dynamically detect site-packages for uv env SITE_PACKAGES=$(uv run python -c "import site; print(site.getsitepackages()[0])") # Preserve any existing PYTHONPATH and add repo + site-packages export PYTHONPATH="${{ github.workspace }}/sdk/python:${PYTHONPATH}:$SITE_PACKAGES" echo "Using PYTHONPATH: $PYTHONPATH" echo "Using PATH: $PATH" # Ray macOS workarounds if [[ "$RUNNER_OS" == "macOS" ]]; then echo "=== Applying macOS Ray compatibility workarounds ===" export RAY_DISABLE_RUNTIME_ENV_HOOK=1 export PYTHONDONTWRITEBYTECODE=1 echo "Applied macOS workarounds for Python ${{ matrix.python-version }}" fi make test-python-unit - name: Minimize uv cache run: uv cache prune --ci unit-test-ui: runs-on: ubuntu-latest env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version-file: './ui/.nvmrc' registry-url: 'https://registry.npmjs.org' cache: 'yarn' cache-dependency-path: 'ui/yarn.lock' - name: Install yarn dependencies working-directory: ./ui run: yarn install - name: Check code formatting working-directory: ./ui run: yarn format:check - name: Build yarn rollup working-directory: ./ui run: yarn build:lib - name: Run yarn tests working-directory: ./ui run: yarn test --watchAll=false