From 0e9eebbf57f7b9200095953912f17f14b363903b Mon Sep 17 00:00:00 2001 From: Dimitri Yatsenko Date: Thu, 23 Jul 2026 11:22:24 -0500 Subject: [PATCH 1/2] ci: add Windows unit-test job to catch OS-specific path bugs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CI matrix ran Linux-only, so platform-specific defects — e.g. #1520, where file-protocol paths rendered with native backslashes broke garbage collection on Windows — could not be caught. Add a windows-latest leg running the container-free unit suite across both ends of the supported Python range (3.10, 3.14). pixi targets linux/osx only ([tool.pixi] platforms), so this leg installs via pip (.[test]) rather than pixi. Unit tests need no containers, so no Docker/DB is required on Windows. --- .github/workflows/test.yaml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 60d9b5e16..bce926fc2 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -68,3 +68,32 @@ jobs: - name: Run unit tests run: pixi run -e test pytest tests/unit -v + + # Windows unit tests: guard OS-specific behavior (path separators, etc.) that + # the Linux jobs above cannot catch — e.g. #1520, where file-protocol paths + # rendered with native backslashes broke garbage collection on Windows. + # pixi targets linux/osx only (see [tool.pixi] platforms), so this leg uses + # pip. Unit tests need no containers, so no Docker/DB is required on Windows. + unit-tests-windows: + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + # Exercise both ends of the supported range (requires-python >=3.10,<3.15). + python-version: ["3.10", "3.14"] + name: unit-tests-windows (py${{ matrix.python-version }}) + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # hatch-vcs derives the version from git history/tags + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install package with test extras + run: pip install -e ".[test]" + + - name: Run unit tests + run: pytest tests/unit -v From ae4c2a4543da090d042b02dcc6866b2a3cc1be2b Mon Sep 17 00:00:00 2001 From: Dimitri Yatsenko Date: Thu, 30 Jul 2026 18:05:00 -0500 Subject: [PATCH 2/2] ci: note the Windows pip leg resolves a different test dep-set than pixi The pip fallback resolves [project.optional-dependencies].test, which differs from the pixi legs' [dependency-groups].test (e.g. omits graphviz). Flag the latent trap so a dep-set mismatch isn't mistaken for an OS-specific failure. Addresses MilagrosMarin's review on #1522. --- .github/workflows/test.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index bce926fc2..4bd734234 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -92,6 +92,12 @@ jobs: with: python-version: ${{ matrix.python-version }} + # NOTE: pip resolves `[project.optional-dependencies].test`, which is a + # DIFFERENT set than the pixi Linux legs' `[dependency-groups].test` + # (e.g. it omits graphviz). A unit test importing a dep present in only + # one set would then pass on Linux but error on Windows (or vice versa) — + # a dep-set mismatch that reads like an OS bug. Keep the two `test` sets + # in sync when unit-test dependencies change. - name: Install package with test extras run: pip install -e ".[test]"