[iris] Add Python 3.14t (free-threaded) to CI matrix #806
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: "Iris - Unit" | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| outputs: | |
| should_run: ${{ steps.filter.outputs.relevant }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4 | |
| id: filter | |
| with: | |
| filters: | | |
| relevant: | |
| - 'lib/iris/**' | |
| - 'uv.lock' | |
| - '.github/workflows/iris-unit.yaml' | |
| iris-unit: | |
| needs: changes | |
| if: needs.changes.outputs.should_run == 'true' | |
| runs-on: ubuntu-latest | |
| # 3.14t needs a large budget for the cold-start uv sync — many deps | |
| # (duckdb, grpcio, zstandard, pyarrow, …) have no free-threaded wheels yet | |
| # and get built from sdist. Once setup-uv caches the built wheels (cache | |
| # is python-version-aware), warm runs finish quickly. | |
| timeout-minutes: ${{ matrix.python-version == '3.14t' && 60 || 10 }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.12", "3.14t"] | |
| continue-on-error: ${{ matrix.python-version == '3.14t' }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "lib/iris/pyproject.toml" | |
| python-version: ${{ matrix.python-version }} | |
| - name: Test iris | |
| env: | |
| PYTHONASYNCIODEBUG: "1" | |
| run: | | |
| cd lib/iris && uv run --group dev python -m pytest -n1 --durations=5 --tb=short -m 'not slow and not docker and not requires_cluster' tests/ | |
| iris-e2e-smoke: | |
| needs: changes | |
| if: needs.changes.outputs.should_run == 'true' | |
| runs-on: ubuntu-latest | |
| # 3.14t needs a large budget for the cold-start uv sync — many deps | |
| # (duckdb, grpcio, zstandard, pyarrow, …) have no free-threaded wheels yet | |
| # and get built from sdist. Once setup-uv caches the built wheels (cache | |
| # is python-version-aware), warm runs finish quickly. | |
| timeout-minutes: ${{ matrix.python-version == '3.14t' && 60 || 10 }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.12", "3.14t"] | |
| continue-on-error: ${{ matrix.python-version == '3.14t' }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "lib/iris/pyproject.toml" | |
| python-version: ${{ matrix.python-version }} | |
| - name: Cache Playwright browsers | |
| id: playwright-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ runner.os }}-${{ hashFiles('lib/iris/pyproject.toml') }} | |
| - name: Install Playwright browsers | |
| if: steps.playwright-cache.outputs.cache-hit != 'true' | |
| run: cd lib/iris && uv run playwright install --with-deps chromium | |
| - name: Install Playwright system deps | |
| if: steps.playwright-cache.outputs.cache-hit == 'true' | |
| run: npx --yes playwright@1.57.0 install-deps chromium | |
| - name: Run E2E smoke tests | |
| env: | |
| IRIS_SCREENSHOT_DIR: ${{ github.workspace }}/iris-screenshots | |
| PYTHONASYNCIODEBUG: "1" | |
| run: | | |
| mkdir -p ${{ github.workspace }}/iris-screenshots | |
| cd lib/iris && uv run --group dev python -m pytest \ | |
| tests/e2e/test_smoke.py \ | |
| -m requires_cluster -o "addopts=" --tb=short -v | |
| - name: Verify screenshots with Claude | |
| if: always() && hashFiles('iris-screenshots/*.txt') != '' | |
| env: | |
| CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN || secrets.CLAUDE_MAX_OAUTH_TOKEN }} | |
| run: | | |
| npm install -g @anthropic-ai/claude-code | |
| python lib/iris/scripts/verify_screenshots.py \ | |
| --screenshot-dir ${{ github.workspace }}/iris-screenshots | |
| - name: Upload screenshots | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: iris-smoke-screenshots | |
| path: iris-screenshots/ | |
| retention-days: 14 | |
| if-no-files-found: ignore |