@@ -72,16 +72,17 @@ jobs:
7272 <(grep -E '^[A-Za-z0-9_.-]+==' /tmp/requirements-lock.txt | sort)
7373
7474 # ── Unit tests: matrix across OS and Python version ───────────────────────
75- # Closes #13. The unittest suite is the merge gate. Multi-OS catches the
76- # rare path / line-ending issue that a single-OS run hides; multi-Python
77- # catches API drift across LTS / current / latest interpreters.
75+ # Closes #13 and #44. Multi-OS catches path-normalisation drift and
76+ # line-ending issues that a single-OS run hides; multi-Python catches API
77+ # drift across LTS / current / latest interpreters. Matrix parallelism
78+ # keeps wall-clock under ~15 min (slowest runner wins, not the sum).
7879 unittest :
7980 name : Unit tests (${{ matrix.os }} / Python ${{ matrix.python-version }})
8081 runs-on : ${{ matrix.os }}
8182 strategy :
8283 fail-fast : false
8384 matrix :
84- os : [ubuntu-latest]
85+ os : [ubuntu-latest, windows-latest, macos-latest ]
8586 python-version : ["3.10", "3.11", "3.12", "3.13"]
8687 steps :
8788 # Pinned to immutable commit SHAs (not @v4 / @v5) so a compromised tag
@@ -117,6 +118,21 @@ jobs:
117118 # ~2× the CI minutes for zero extra signal.
118119 run : python -m pytest tests/test_api_endpoints.py -v --tb=short
119120
121+ # ── PyInstaller desktop build (Windows only, once per workflow) ────────
122+ # Closes #44. Builds the onedir bundle and smoke-tests --help so the
123+ # desktop entry point is verified without launching the GUI window.
124+ - name : Install PyInstaller
125+ if : matrix.os == 'windows-latest' && matrix.python-version == '3.12'
126+ run : python -m pip install 'pyinstaller>=6,<7'
127+
128+ - name : Build PyInstaller bundle
129+ if : matrix.os == 'windows-latest' && matrix.python-version == '3.12'
130+ run : pyinstaller cursor-browser.spec --noconfirm
131+
132+ - name : Smoke-test PyInstaller exe (--help)
133+ if : matrix.os == 'windows-latest' && matrix.python-version == '3.12'
134+ run : dist\CursorChatBrowser\CursorChatBrowser.exe --help
135+
120136 # ── Typecheck: mypy ───────────────────────────────────────────────────────
121137 # Codebase already has type hints across most of the surface (~70+ typed
122138 # functions). Mypy runs in lenient mode (--ignore-missing-imports for
0 commit comments