This release includes two important updates:
1. An Update update to task-collection configuration variables and logic.
2. The first released version of the **experimental** SSH features.
Re: task-collection configuration, we now support two main use cases:
1. When running a production instance (including on a SLURM cluster), you
should set e.g. `FRACTAL_TASKS_PYTHON_DEFAULT_VERSION=3.10`, and make sure
that `FRACTAL_TASKS_PYTHON_3_10=/some/python` is an absolute path. Optionally,
you can define other variables like `FRACTAL_TASKS_PYTHON_3_9`,
`FRACTAL_TASKS_PYTHON_3_11` or `FRACTAL_TASKS_PYTHON_3_12`.
2. If you leave `FRACTAL_TASKS_PYTHON_DEFAULT_VERSION` unset, then only the
Python interpreter that is currently running `fractal-server` can be used
for task collection.
> WARNING: If you don't set `FRACTAL_TASKS_PYTHON_DEFAULT_VERSION`, then you
> will only have a single Python interpreter available for tasks (namely the
> one running `fractal-server`).
* API:
* Introduce `api/v2/task/collect/custom/` endpoint (\1607, \1613, \1617, \1629).
* Task collection:
* Introduce task-collection Python-related configuration variables (\1587).
* Always set Python version for task collection, and only use `FRACTAL_TASKS_PYTHON_X_Y` variables (\1587).
* Refactor task-collection functions and schemas (\1587, \1617).
* Remove `TaskCollectStatusV2` and `get_collection_data` internal schema/function (\1598).
* Introduce `CollectionStatusV2` enum for task-collection status (\1598).
* Reject task-collection request if it includes a wheel file and a version (\1608).
SSH features:
* Introduce `fractal_server/ssh` subpackage (\1545, \1599, \1611).
* Introduce SSH executor and runner (\1545).
* Introduce SSH task collection (\1545, \1599, \1626).
* Introduce SSH-related configuration variables (\1545).
* Modify app lifespan to handle SSH connection (\1545).
* Split `app/runner/executor/slurm` into `sudo` and `ssh` subfolders (\1545).
* Introduce FractalSSH object which is a wrapper class around fabric.Connection object.
It provides a `lock` to avoid loss of ssh instructions and a custom timeout (\1618)
* Dependencies:
* Update `sqlmodel` to `^0.0.19` (\1584).
* Update `pytest-asyncio` to `^0.23` (\1558).
* Testing:
* Test the way `FractalProcessPoolExecutor` spawns processes and threads (\1579).
* Remove `event_loop` fixture: every test will run on its own event loop (\1558).
* Test task collection with non-canonical package name (\1602).