Skip to content

CI: pin Python 3.12 to avoid multiprocessing forkserver regression in 3.14 - #83

Open
neteler wants to merge 1 commit into
mainfrom
pin-python-3.12
Open

CI: pin Python 3.12 to avoid multiprocessing forkserver regression in 3.14#83
neteler wants to merge 1 commit into
mainfrom
pin-python-3.12

Conversation

@neteler

@neteler neteler commented Jul 20, 2026

Copy link
Copy Markdown
Member

Problem

Python 3.14 introduced a regression in the multiprocessing forkserver start method. When GRASS's temporal RPC server (grass/pygrass/rpc/base.py thread_checker) tries to restart the server during cleanup via Process.start(), the forkserver address file is no longer found:

FileNotFoundError: [Errno 2] No such file or directory
  File ".../multiprocessing/forkserver.py", line 94, in connect_to_new_process
    client.connect(self._forkserver_address)

This causes test runs to fail with an unhandled exception in a background thread, even though the tests themselves pass.

Solution

Pin the CI Docker image to use Python 3.12 instead of the default Python 3.14 from Alpine edge. Python 3.12 is available in Alpine repos and does not have the forkserver regression.

The python3.12 package is installed explicitly and the venv is created with python3.12 -m venv to ensure all test dependencies use the correct Python version.

PR is AI-assisted with OpenCode (Deepseek v4 Flash)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant