From 1d338b7a934aff5a1f606a547d7d7bfb371eb88c Mon Sep 17 00:00:00 2001 From: AzulGarza Date: Mon, 19 Oct 2026 14:29:00 -0700 Subject: [PATCH] ci: add experimental Python 3.14 and 3.15 test job Probe upcoming Python versions in CI without blocking the main matrix, and skip Ray in dev fugue extras on 3.14+ until Ray publishes cp314 wheels. Co-authored-by: Cursor --- .github/workflows/ci.yaml | 56 +++++++++++++++++++++++++++++++++++++++ pyproject.toml | 3 ++- uv.lock | 6 +++-- 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bf99d738..eacdec35 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -63,6 +63,62 @@ jobs: - name: Test import class run: uv run -- python -c "from timecopilot import TimeCopilot, TimeCopilotForecaster" + test-future-python: + name: test on ${{ matrix.python-version }} + runs-on: ubuntu-latest + continue-on-error: true + strategy: + fail-fast: false + matrix: + python-version: ["3.14", "3.15"] + env: + UV_PYTHON: ${{ matrix.python-version }} + + steps: + - name: Clone repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Set up uv + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + + - name: Free disk space in action runner + uses: endersonmenezes/free-disk-space@v3 + with: + remove_android: true + remove_dotnet: true + remove_haskell: true + rm_cmd: "rmz" + rmz_version: "3.1.1" + + - name: Cache HuggingFace Models + uses: actions/cache@v4 + with: + path: ~/.cache/huggingface/hub/ + key: ${{ Runner.os }}-huggingface-${{ hashFiles('**/tests/') }} + + - name: Cache TabPFN checkpoints + uses: actions/cache@v4 + with: + path: ~/.cache/tabpfn + key: ${{ runner.os }}-tabpfn-v1 + + - name: Run tests + run: uv run pytest + env: + HF_TOKEN: ${{ secrets.HF_TOKEN }} + TABPFN_TOKEN: ${{ secrets.TABPFN_TOKEN }} + + - name: Test import class + run: uv run -- python -c "from timecopilot import TimeCopilot, TimeCopilotForecaster" + test-live: name: test live runs-on: ubuntu-latest diff --git a/pyproject.toml b/pyproject.toml index a5a8711e..69f79e8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,8 @@ requires = ["hatchling"] [dependency-groups] dev = [ - "fugue[dask,ray,spark]>=0.9.0", + "fugue[dask,ray,spark]>=0.9.0; python_version < '3.14'", + "fugue[dask,spark]>=0.9.0; python_version >= '3.14'", "mktestdocs>=0.2.5", "pre-commit", "pyspark<4.1", diff --git a/uv.lock b/uv.lock index eeee08a6..b1a54f29 100644 --- a/uv.lock +++ b/uv.lock @@ -7466,7 +7466,8 @@ gift-eval = [ [package.dev-dependencies] dev = [ - { name = "fugue", extra = ["dask", "ray", "spark"] }, + { name = "fugue", extra = ["dask", "spark"] }, + { name = "fugue", extra = ["ray"], marker = "python_full_version < '3.14'" }, { name = "mktestdocs" }, { name = "pre-commit" }, { name = "pyspark" }, @@ -7546,7 +7547,8 @@ provides-extras = ["distributed", "gift-eval"] [package.metadata.requires-dev] dev = [ - { name = "fugue", extras = ["dask", "ray", "spark"], specifier = ">=0.9.0" }, + { name = "fugue", extras = ["dask", "ray", "spark"], marker = "python_full_version < '3.14'", specifier = ">=0.9.0" }, + { name = "fugue", extras = ["dask", "spark"], marker = "python_full_version >= '3.14'", specifier = ">=0.9.0" }, { name = "mktestdocs", specifier = ">=0.2.5" }, { name = "pre-commit" }, { name = "pyspark", specifier = "<4.1" },