Note: Numbers like (#1234) point to closed Pull Requests on the fractal-server repository.
Unreleased¶
- API:
- Add
resource_idquery parameter for admin jobs endpoint (#3082).
- Add
- Testing:
- Implement several
zizmorrecommendations (#3077).
- Implement several
2.18.2¶
- API:
- Review logs in
read_log_fileaux function (#3073). - Review the job-list endpoints, so that their response is sorted and they do not check for project ownership information (#3076).
- Review logs in
- Database:
- Drop
TaskGroupV2.venv_size_in_kBandTaskGroupV2.venv_file_number(#3075).
- Drop
- Task-group lifecycle:
- Stop measuring venv size and venv file number (#3075).
2.18.1¶
- Database:
- Drop
server_defaultforis_owner,is_verifiedandpermissionsinLinkUserProjectV2(#3058). - Drop
server_defaultforUserOAuth.project_dirsand drop columnUserOAuth.project_dir(#3058).
- Drop
2.18.0¶
NOTE: This version requires running a data-migration script (
fractalctl update-db-data).WARNING: Before upgrading to this version, make sure that no jobs are marked as submitted in the current database tables.
The main contents of this release are the introduction of the project sharing and a review of the authorization scheme for fractal-data.
- API:
- Add project-owner endpoints
/api/v2/project/{project_id}/guest/(#2999). - Add project-guest endpoints
/api/v2/project/invitation/,/api/v2/project/{project_id}/access/and/api/v2/project/{project_id}/access/accept/(#2999). - Add project-sharing admin endpoint (#2999).
- Add granular access-control rules to
/api/v2endpoints, valid for both project owners and guests (#2999, #3029). - Add pagination to
GET /admin/v2/task-group/activity/andGET /admin/v2/task-group/(#3023). - Do not cast endpoint return values to
PaginationResponse[X](#3023). - Reduce API logging level for some endpoints (#3010).
- Modify
GET /auth/current-user/allowed-viewer-paths/logic, withinclude_shared_projectsquery parameter (#3031, #3069). - Add validator for paths to forbid parent-directory references (#3031).
- Add check to
PATCH /auth/users/{user_id}/when patchingproject_dirs(#3043, #3069). - Review job-submission endpoint (#3041).
- Prevent submissions if
Resource.prevent_new_submissionsis set (#3042). - Add
normpathtoAbsolutePathStrtype (#3050). - Split
zarr_dirrequest body argument ofPOST /project/{project_id}/dataset/intoproject_dirandzarr_subfolder(#3051). - Add
zarr_dirvalidity check inPOST /project/{project_id}/dataset/import/(#3051). - Remove
zarr_dirrequest body argument fromPATCH /project/{project_id}/dataset/{dataset_id}/(#3051). - Validate
imagesinDatasetImport(#3057). - Sort response of
GET /admin/v2/task-group/activity/starting with the most recent activities (#3066).
- Add project-owner endpoints
- App:
- Add
SlowResponseMiddlewaremiddleware (#3035, #3038, #3060).
- Add
- Settings:
- Add
Settings.FRACTAL_LONG_REQUEST_TIMEconfiguration variable (#3035).
- Add
- Runner:
- Improve logging for when dataset or workflow is not found in the database (#3046).
- Prevent job-execution from continuing if
Resource.prevent_new_submissionsis set (#3042). - Espose
shebang_linein resource runner configuration (#3064).
- Database:
- Add
Resource.prevent_new_submissionsboolean flag (#3042). - Add project-sharing-related
LinkUserProjectV2columns (#2999). - Move
UserOAuth.project_dirto.project_dirsand dropUserGrop.viewer_paths(#3031). - Enforce max one submitted
JobV2perDatasetV2(#3044). - Create 2.18.0 data-migration script (#3031, #3050).
- Add
- Settings:
- Drop
DataSettings(#3031). - Reduce API logging level for some endpoints (#3010).
- Drop
- Internal:
- Remove the "V2" label from names of internal schemas and API route tags (#3037).
- Testing:
- Expand SLURM-batching-heuristics test (#3011).
- Also validate resources and profiles in
migrations.ymlaction (#3046). - Replace
MockCurrentUser.user_kwargswith explicit keyword arguments (#3061).
- Dependencies:
- Support Python 3.14 (#3015).
2.17.2¶
NOTE: Starting from this version, the
unzipcommand-line tool must be available (see #2978).
- API:
- Allow reading logs from zipped job folders (#2978).
- Do not raise 422 from check-owner functions (#2988).
- Remove
GET /admin/v2/project/,GET /api/v2/dataset/andGET /api/v2/workflow/(#2989).
- Database:
- Add indexes to
HistoryImageCacheandHistoryUnitforeign keys to improveDatasetV2deletion time (#2987). - Drop
ProjectV2.user_listrelationship (#2991). - Adopt
onclauseonJOINstatements (#2993).
- Add indexes to
- Runner:
- Handle default
batch_sizevalue for local runner (#2949). - Rename
SudoSlurmRunnerintoSlurmSudoRunner(#2980). - Ignore some SLURM/stderr patterns when populating
executor_error_log(#2984).
- Handle default
- App settings:
- Transform
DB_ECHOconfiguration variable from boolean toLiteral['true', 'false'](#2985).
- Transform
- Documentation:
- Major review of documentation, including making it up-to-date with v2.17.0 and relying more on autogenerated contents (#2949, #2983).
- Development:
- Add
shellcheckto precommit, forfractal-server/files (#2986). - Replace
reorder_python_imports,flake8andblackwithruffin pre-commit (#2994).
- Add
- Task-group lifecycle:
- Support extras in pinned packages names (#3000).
- Testing:
- Update benchmarks (#2990).
- Drop
benchmarks_runner(#2990).
2.17.1¶
- Runner:
- Raise an error for a non-converter task running on an empty image list (#2971).
- Database:
- Apply all database-schema changes made possible by 2.17.0 data migration (#2972), namely:
- Drop
user_settingstable and correspondingUserOAuth.user_settings_idforeign key. - Make
resource_idforeign key non nullable inProjectV2andTaskGroupV2tables. - Drop
server_default="/PLACEHOLDERforUserOAuth.project_dir.
- Drop
- Apply all database-schema changes made possible by 2.17.0 data migration (#2972), namely:
- App:
- Streamline graceful-shutdown logic in lifespan (#2972).
- Settings:
- Accept float values for
FRACTAL_GRACEFUL_SHUTDOWN_TIME(#2972).
- Accept float values for
- Testing:
- Update testing database with 2.17.0 data migration (#2974).
- Introduce
generic_task_converterinfractal-tasks-mock(#2976).
2.17.0¶
This version requires running a data-migration script (
fractalctl update-db-data), see detailed instructions.
The main content of this release is the introduction of the computational resource&profile concepts, and a review of the application settings.
- API (main PRs: #2809, #2870, #2877, #2884, #2911, #2915, #2925, #2940, #2941, #2943, #2956):
- Introduce API for
ResourceandProfilemodels. - Drop API for user settings.
- Drop handling of deprecated
DatasetV2.filtersattribute when creating dataset dumps (#2917). - Enable querying users by
resource_id(#2877). - Check matching-
resource_idupon job submission (#2896). - Treat
TaskGroupV2.resource_idas not nullable (#2896). - Split
/api/settings/into smaller-scope endpoints. - Update rules for read access to task groups with resource information (#2941).
- Only show tasks and task groups associated to current user's
Resource(#2906, #2943). - Add pagination to admin job and task endpoints (#2958).
- Add
task_typequery parameter to admin task endpoint (#2958).
- Introduce API for
- Task-group lifecycle:
- Rely on resource and profile rather than user settings (#2809).
- Fix postponed commit after task-group deletion (#2964).
- Add Python3.14 option for task collection (#2965).
- Runner
- Rely on resource and profile rather than user settings (#2809).
- Make
extra_linesa non-optional list in SLURM configuration (#2893). - Enable
user_local_exportson SLURM-SSH runner.
- Database and models (also #2931):
- Introduce
ResourceandProfilemodels (#2809). - Introduce
resource_idforeign key for task-group and project models (#). - Move
project_dirandslurm_accountsfromUserSettingstoUserOAuth. - Make
project_dirrequired. - Discontinue usage of
UserSettingstable. - Add data-migration script for version 2.17.0 (#2933).
- Introduce
- Authentication API:
- Drop OAuth-based self registration (#2890).
- App settings (#2874, #2882, #2895, #2898, #2916, #2922, #2968):
- Remove all configuration variables that are now part of
Resources. - Split main
Settingsmodel into smaller-scope models. - Remove email-password encryption.
- Introduce
init-db-datacommand. - Set default
FRACTAL_API_MAX_JOB_LIST_LENGTHto 25 (#2928). - Introduce
FRACTAL_DEFAULT_GROUP_NAME, set to either"All"orNone(#2939).
- Remove all configuration variables that are now part of
- Dependencies:
- Bump
fastapito v0.120 (#2921). - Bump
uvicornto v0.38 (#2921). - Bump
fastapi-usersto v15 (#2907).
- Bump
- Testing and GitHub actions:
- Simplify Python environment in documentation GitHub action (#2919).
- Simplify PyPI-publish GitHub action (#2927).
- Drop explicit dependency on `python-dotenv (#2921).
- Testing:
- Introduce
pytest-envdependency. - Update testing database to version 2.16.6 (#2909).
- Test OAuth flow with
pytestand remove OAuth GHA (#2929).
- Introduce
2.16.6¶
- API:
- Fix bug in import-workflow endpoint, leading to the wrong task-group being selected (#2863).
- Models:
- Fix use of custom
AttributeFilterstype in SQLModel model (#2830).
- Fix use of custom
- Dependencies:
- Bump
pydanticto 2.12.0 (#2830). - Bump
poetryto 2.2.1 in GitHub actions (#2830).
- Bump
- Testing:
- Add pre-commit rule to prevent custom types is models (#2830).
2.16.5¶
- Dependencies:
- Bump
fastapi,sqlmodel,uvicorn,pydantic-settingsversions (#2827).
- Bump
2.16.4¶
- Task life cycle:
- Switch to PyPI Index API for finding latest package versions (#2790).
- SSH:
- Bump default lock-acquisition timeout from 250 to 500 seconds (#XXX).
- Introduce structured logs for SSH-lock dynamics (#XXX).
- API:
- Replace
HTTP_422_UNPROCESSABLE_CONTENTwithHTTP_422_UNPROCESSABLE_CONTENT(#2790).
- Replace
- Internal:
- Move
app.runnerintorunner(#2814).
- Move
- Testing:
- Use function-scoped base folder for backend (#2793).
- Dependencies:
- Bump
fastapiversion (#2790). - Bump
uvicorn-workerandsqlmodelversions (#2792).
- Bump
2.16.3¶
- Task life cycle:
- Move post-pixi-installation logic into the same SLURM job as
pixi install, for SSH/SLURM deployment (#2787).
- Move post-pixi-installation logic into the same SLURM job as
- Dependencies:
- Bump
cryptography(#2788).
- Bump
2.16.2¶
- Task life cycle:
- Move
pixi installexecution to SLURM jobs, for SSH/SLURM deployment (#2784). - Add
SLURM_CONFIGtoPixiSettings(#2784).
- Move
2.16.1¶
- Runner:
- Drop top-level executor-error-related logs (#2783).
- Drop obsolete
FRACTAL_SLURM_SBATCH_SLEEPconfiguration variable (#2785).
2.16.0¶
- Runner:
- Record SLURM-job stderr in
JobV2.executor_error_log(#2750, #2771, #2773).
- Record SLURM-job stderr in
- Task life cycle:
- Support both pre-pinning and post-pinning of dependencies (#2761).
- Drop
FRACTAL_MAX_PIP_VERSIONconfiguration variable (#2766). - Make TaskGroup deletion a lifecycle operation (#2759).
- Testing:
- Add
out_of_memorymock task (#2770). - Make fixtures sync when possible (#2776).
- Bump pytest-related dependencies (#2776).
- Add
2.15.9¶
- API:
- In
POST /api/v2/project/{project_id}/status/images/, include all available types&attributes (#2762).
- In
- Internal:
- Optimize
fractal_server.images.tools.aggregate_attributes(#2762).
- Optimize
2.15.8¶
- Runner:
- Split
SlurmJobsubmission into three steps, reducing SSH connections (#2749). - Deprecate experimental
pre_submission_commandsfeature (#2749).
- Split
- Documentation:
- Fix
Fractal Usersdocumentation page (#2738). - Improve documentation for Pixi task collection (#2742).
- Fix
- Task life cycle:
- Add test to lock
FRACTAL_MAX_PIP_VERSIONwith latest version on PyPI (#2752). - Use pixi v0.54.1 in tests (#2758).
- Add test to lock
- Internal
- Improve type hints (#2739).
- SSH:
- Add a decorator to open a new connection (socket) if the decorated function hits a
NoValidConnectionErroror aOSError(#2747). - Remove multiple-attempts logic (#2747).
- Add a decorator to open a new connection (socket) if the decorated function hits a
2.15.7¶
- API:
- Capture SSH related failure in submit-job endpoint (#2734).
- Task life cycle:
- Also edit
tool.pixi.project.platformssection ofpyproject.toml, forpixi-based task collection (#2711).
- Also edit
- Internal:
- Extend use of
UnreachableBranchErrorin API and runner (#2726).
- Extend use of
- Dependencies:
- Bump
fastapito version0.116.*(#2718). - Bump all
docsoptional dependencies (#2722). - Add support for Python 3.13 (#2716).
- Bump
- Documentation:
- Remove/fix several obsolete docs pages (#2722).
- Testing:
- Improve/optimize several tests (#2727).
- Use
poetry2.1.3 in all GitHub Actions and always install it usingpipx(#2731). - Move all GitHub Action runners to
ubuntu-24.04(#2732). - Avoid using
threadingprivate method (#2733).
2.15.6¶
- Runner:
- Remove obsolete
JobExecutionErrorattributes andTaskExecutionErrorhandling (#2708). - Always interpret
needs_gpustring as a boolean (#2706).
- Remove obsolete
- Task life cycle:
- Use
bash --loginforpixi installexecution over SSH (#2709).
- Use
- Development:
- Move
examplefolder to root directory (#2720).
- Move
2.15.5¶
- API:
- Update
HistoryRunandHistoryUnits statuses whenWorkflows are manually labeled as failed (#2705).
- Update
2.15.4¶
- Task lifecycle:
- Edit
pyproject.tomlin-place before runningpixi install(#2696).
- Edit
2.15.3¶
- API:
- Ongoing
WorkflowTasks are marked as submitted duringJobexecution (#2692).
- Ongoing
2.15.2¶
- API:
- Improve logging for
PATCH /admin/v2/job/{job_id}/(#2686). - Prevent deletion and reordering of
WorkflowTasks inWorkflows associated to submittedJobs (#2689).
- Improve logging for
- Database:
- Set
pool_pre_ping=Truefor sync db engine (#2676).
- Set
- Runner:
- Update
chmod ... -Rtochmod -R ...(#2681). - Add custom handling of some
slurm_load_jobssocket-timeout error (#2683). - Remove redundant
mkdirin SLURM SSH runner (#2671). - Do not write to SLURM stderr from remote worker (#2691).
- Fix spurious version-mismatch warning in remote worker (#2691).
- Update
- SSH:
- Always set
in_stream=Falseforfabric.Connection.run(#2694).
- Always set
- Testing:
- Fix
test_FractalSSH.py::test_folder_utilsfor MacOS (#2678). - Add pytest marker
fails_on_macos(#2681). - Remove patching of
sys.stdin, thanks to updates tofabric.Connection.runarguments (#2694).
- Fix
2.15.1¶
This release fixes the reason for yanking 2.15.0.
- Database:
- Modify
JSON->JSONBdatabase schema migration in-place, so that columns which represent JSON Schemas ormeta_*fields remain in JSON form rather than JSONB (#2664, #2666).
- Modify
2.15.0 [yanked]¶
This release was yanked on PyPI, because its conversion of all JSON columns into JSONB changes the key order, see https://github.com/fractal-analytics-platform/fractal-server/issues/2663.
- Database:
- Rename
TaskGroupV2.wheel_pathintoTaskGroupV2.archive_path(#2627). - Rename
TaskGroupV2.pip_freezeintoTaskGroupV2.env_info(#2627). - Add
TaskGroupV2.pixi_version(#2627). - Transform every JSON column to JSONB (#2662).
- Rename
- API:
- Introduce new value
TaskGroupV2OriginEnum.PIXI(#2627). - Exclude
TaskGroupV2.env_infofrom API responses (#2627). - Introduce
POST /api/v2/task/collect/pixi/(#2627). - Extend deactivation/reactivation endpoints to pixi task groups (#2627).
- Block
DELETE /api/v2/task-group/{task_group_id}/if a task-group activity is ongoing (#2642). - Introduce
_verify_non_duplication_group_pathauxiliary function (#2643).
- Introduce new value
- Task lifecycle:
- Introduce full support for pixi task-group lifecycle (#2627, #2651, #2652, #2654).
- SSH:
- Introduce
FractalSSH.read_remote_text_file(#2627).
- Introduce
- Runner:
- Fix use of
worker_init/extra_linesfor multi-image job execution (#2660). - Support SLURM configuration options
nodelistandexclude(#2660).
- Fix use of
- App configuration:
- Introduce new configuration variable
FRACTAL_PIXI_CONFIG_FILEand new attributeSettings.pixi(#2627, #2650).
- Introduce new configuration variable
2.14.16¶
- Internal:
- Refactor and optimize enrich-image functions (#2620).
- Database:
- Add indices to
HistoryImageCachetable (#2620).
- Add indices to
- SSH:
- Increase Paramiko
banner_timeoutfrom the default 15 seconds to 30 seconds (#2632). - Re-include
check_connectionuponSlurmSSHRunnerstartup (#2636).
- Increase Paramiko
- Testing:
- Introduce benchmarks for database operations (#2620).
- Dependencies:
- Update
cryptography,packagingandpython-dotenvdependencies (#2630).
- Update
2.14.15¶
- API:
- Add required
workflowtask_idquery parameter toverify-unique-typesendpoint (#2619). - Enrich images with status within
verify-unique-typesendpoint, when necessary (#2619).
- Add required
2.14.14¶
- API:
- Fix
GET /api/v2/task-group/by adding missing sorting beforeitertools.groupby(#2614).
- Fix
- Internal:
- Drop
execute_command_asyncfunction (#2611). - Introduce
TaskTypeenum (#2612).
- Drop
2.14.13¶
- API:
- Group response items of
GET /api/v2/task-group/bypkg_name(#2596). - Disambiguate response items of
GET /api/v2/task-group/(#2596).
- Group response items of
- Internal:
- Introduce
UnreachableBranchError(#2596).
- Introduce
- Testing:
- Enforce task-group non-duplication constraints in
task_factory_v2fixture (#2596).
- Enforce task-group non-duplication constraints in
2.14.12¶
- Runner:
- Enable status-based selection of images to process (#2588).
- API:
- Remove
unit_statusquery parameter from/project/{project_id}/status/images/(#2588). - Remove default type filters from
/project/{project_id}/status/images/(#2588). - Sort lists of existing attribute values in
aggregate_attributes(#2588).
- Remove
- Task-group lifecycle:
- Split
pip installcommand into two steps (#2600).
- Split
2.14.11¶
- Task-group lifecycle:
- Support version-pinning for two dependencies in task collection (#2590, #2599).
- Support version-pinning for previously-missing dependencies in task collection (#2590, #2599).
- Development:
- Improve
mypyconfiguration inpyproject.toml(#2595).
- Improve
2.14.10¶
This version requires a data-migration script (
fractalctl update-db-data).
- Database:
- Improve data-migration script that is necessary for 2.14.8 (#2594).
2.14.9¶
WARNING: Do not release this version, but go directly to 2.14.10.
- Task-group lifecycle:
- Improve handling of SSH-related errors (#2589).
- Database:
- Rename data-migration script that is necessary for 2.14.8 (#2592).
2.14.8¶
WARNING: Do not release this version, but go directly to 2.14.10.
- API:
- Update
POST /project/{project_id}/workflow/{workflow_id}/wftask/replace-task/so that it re-uses existing workflow task (#2565).
- Update
- Database:
- Add
HistoryRun.task_idcolumn (#2565).
- Add
- Internal:
- Refactor: extract
enrich_image_listfunction from/project/{project_id}/status/images/endpoint (#2585).
- Refactor: extract
2.14.7¶
- Runner:
- Re-include SLURM accounts for both sudo-slurm and ssh-slurm runners (#2580)
- Re-include use of
worker_initfor both sudo-slurm and ssh-slurm runners (#2580)
- Testing:
- Use
Optionalfor argument type hints in mock tasks (#2575).
- Use
2.14.6¶
- API:
- Introduce
api/v2/project/{project.id}/workflow/{workflow.id}/version-update-candidates/endpoint (#2556).
- Introduce
- Task lifecycle:
- Use dedicated SSH connections for lifecycle background tasks (#2569).
- Also set
TaskGroup.versionfor custom task collections (#2573).
- Internal:
- Inherit from
StrEnumrather thanstr, Enum(#2561). - Run
pyupgradeon codebase (#2563). - Remove init file of obsolete folder (#2571).
- Inherit from
- Dependencies:
- Deprecate Python 3.10 (#2561).
2.14.5¶
This version introduces an important internal refactor of the runner component, with the goal of simplifying the SLURM version.
- Runner:
- Make
submit/multisubmitmethod take static arguments, rather than a callable (#2549). - Replace input/output pickle files with JSON files (#2549).
- Drop possibility of non-
utf-8encoding for_run_command_as_userfunction (#2549). - Avoid local-remote-local round trip for task parameters, by writing the local file first (#2549).
- Stop relying on positive/negative return codes to produce either
TaskExecutionError/JobExecutionError, in favor of only producingTaskExecutionErrorat the lowest task-execution level (#2549). - Re-implement
run_single_taskwithin SLURM remoteworkerfunction (#2549). - Drop
TaskFiles.remote_files_dict(#2549). - Drop obsolete
FRACTAL_SLURM_ERROR_HANDLING_INTERVALconfig variable (#2549). - Drop obsolete
utils_executors.pymodule (#2549).
- Make
- Dependencies:
- Drop
cloudpickledependency (#2549). - Remove copyright references to
clusterfutures(#2549).
- Drop
- Testing:
- Introduce
slurm_alivefixture that checksscontrol pingresults (#2549).
- Introduce
2.14.4¶
- API:
- Replace most
field_validators withAnnotatedtypes, and reviewmodel_validators (#2504).
- Replace most
- SSH:
- Remove Python-wrapper layer for
tarcommands (#2554). - Add
elapsedinformation to SSH-lock-was-acquired log (#2558).
- Remove Python-wrapper layer for
2.14.3¶
- Runner:
- Skip creation/removal of folder copy in compress-folder module (#2553).
- Drop obsolete
--extra-import-pathsoption from SLURM remote worker (#2550).
2.14.2¶
- API:
- Handle inaccessible
python_interpreterorpackage_rootin custom task collection (#2536). - Do not raise non-processed-images warning if the previous task is a converter (#2546).
- Handle inaccessible
- App:
- Use
Enumvalues in f-strings, for filenames and error messages (#2540).
- Use
- Runner:
- Handle exceptions in post-task-execution runner code (#2543).
2.14.1¶
- API:
- Add
POST /project/{project_id}/dataset/{dataset_id}/images/non-processed/endpoint (#2524, #2533).
- Add
- Runner:
- Do not create temporary output-pickle files (#2539).
- Set logging level to
DEBUGwithincompress_folderandextract_archivemodules (#2539). - Transform job-error log into warning (#2539).
- Drop
FRACTAL_SLURM_INTERVAL_BEFORE_RETRIEVAL(#2525, #2531). - Increase
MAX_NUM_THREADSfrom 4 to 12 (#2520). - Support re-deriving an existing image with a non-trivial
origin(#2527).
- Testing:
- Adopt ubuntu24 containers for CI (#2530).
- Do not run Python3.11 container CI for PRs, but only for merges (#2519).
- Add mock wheel file and update assertion for pip 25.1 (#2523).
- Optimize
test_reactivate_local_fail(#2511). - Replace
fractal-tasks-corewithtesting-tasks-mockin tests (#2511). - Improve flaky test (#2513).
2.14.0¶
This release mostly concerns the new database/runner integration in view of providing more granular history/status information. This includes a full overhaul of the runner.
- API:
- Add all new status endpoints.
- Add
GET /job/latest/endpoint (#2389). - Make request body required for
replace-taskendpoint (#2355). - Introduce shared tools for pagination.
- Remove
valstrvalidator and introduceNonEmptyStringin schemas (#2352).
- Database
- New tables
HistoryRun,HistoryUnitandHistoryImageCachetables. - Drop attribute/type filters from dataset table.
- Add
type_filterscolumn to job table. - Use
ondeleteflag in place of custom DELETE-endpoint logics.
- New tables
- Runner
- Full overhaul of runners. Among the large number of changes, this includes:
- Fully drop the
concurrent.futuresinterface. - Fully drop the multithreaded nature of SLURM runners, in favor of a more linear submission/retrieval flow.
- New
BaseRunner,LocalRunner,BaseSlurmRunner,SlurmSSHRunnerandSlurmSudoRunnerobjects. - The two SLURM runners now share a large part of base logic.
- Database updates to
HistoryRun,HistoryUnitandHistoryImageCachetables. - We do not fill
Dataset.historyany more.
- Fully drop the
- Full overhaul of runners. Among the large number of changes, this includes:
- Task lifecycle:
- Drop hard-coded use of
--no-cache-dirforpip installcommand (#2357).
- Drop hard-coded use of
- App:
- Obfuscate sensitive information from settings using
SecretStr(#2333). - Drop
FRACTAL_RUNNER_TASKS_INCLUDE_IMAGEobsolete configuration variable (#2359).
- Obfuscate sensitive information from settings using
- Testing:
- Use
fractal-task-toolsto buildfractal-tasks-mockmanifest (#2374).
- Use
- Development:
- Add
codespellto precommit (#2358). - Drop obsolete
examplesfolder (#2405).
- Add
2.13.1¶
- API:
- Add
AccountingRecordandAccountingRecordSlurmtables (#2267). - Add
/admin/v2/impersonateendpoint (#2280). - Replace
_raise_if_naive_datetimewithAwareDatetime(#2283).
- Add
- Database:
- Add
/admin/v2/accounting/and/admin/v2/accounting/slurm/endpoints (#2267).
- Add
- Runner:
- Populate
AccountingRecordfrom runner (#2267).
- Populate
- App:
- Review configuration variables for email-sending (#2269).
- Reduce error-level log records(#2282).
- Testing:
- Drop obsolete files/folders from
tests/data(#2281).
- Drop obsolete files/folders from
- Dependencies:
- Bump
httpxto version0.28.*(#2284).
- Bump
2.13.0¶
With this release we switch to Pydantic v2.
- Runner:
- Deprecate
FRACTAL_BACKEND_RUNNER="local_experimental"(#2273). - Fully replace
clusterfuturesclasses with custom ones (#2272).
- Deprecate
- Dependencies:
- Bump
pydanticto v2 (#2270). - Drop
clusterfuturesdependency (#2272). - Drop
psutildependency (#2273). - Bump
cryptographyto version44.0.*(#2274). - Bump
sqlmodelto version0.0.22(#2275). - Bump
packagingto version24.*.*(#2275). - Bump
cloudpickleto version3.1.*(#2275). - Bump
uvicorn-workersto version0.3.0(#2275). - Bump
gunicornto version23.*.*(#2275). - Bump
httpxto version0.27.*(#2275).
- Bump
2.12.1¶
Note: this version requires a manual update of email-related configuration variables.
- API:
- Deprecate
use_dataset_filtersquery parameter for/project/{project_id}/dataset/{dataset_id}/images/query/(#2231).
- Deprecate
- App:
- Add fractal-server version to logs (#2228).
- Review configuration variables for email-sending (#2241).
- Database:
- Remove
run_migrations_offlinefromenv.pyand makerun_migrations_onlinesync (#2239).
- Remove
- Task lifecycle:
- Reset logger handlers upon success of a background lifecycle operation, to avoid open file descriptors (#2256).
- Runner
- Sudo/SLURM executor checks the fractal-server version using
FRACTAL_SLURM_WORKER_PYTHONconfig variable, if set (#2240). - Add
uname -nto SLURM submission scripts (#2247). - Handle
_COMPONENT_KEY_-related errors in sudo/SLURM executor, to simplify testing (#2245). - Drop obsolete
SlurmJob.workflow_task_file_prefixfor both SSH/sudo executors (#2245). - Drop obsolete
keep_pickle_filesattribute from slurm executors (#2246).
- Sudo/SLURM executor checks the fractal-server version using
- Dependencies:
- Bump
uvicornversion (#2242).
- Bump
- Testing:
- Improve testing of sudo-Slurm executor (#2245, #2246).
- Introduce
containerpytest marker (#2249). - Split CI GitHub Actions in three jobs: API, not API and Containers (#2249).
2.12.0¶
WARNING: The database schema update introduced via this version is non-reversible.
- API:
- Drop V1 endpoints (#2230).
- Database:
- Drop V1 tables (#2230).
- Runner:
- Drop V1 runners (#2230).
- Testing:
- Drop V1 tests (#2230).
- Update V2 tests to keep coverage stable (#2230).
2.11.1¶
- Database
- Drop columns
DatasetV2.filtersandWorkflowTaskV2.input_filters(#2232).
- Drop columns
2.11.0¶
This version revamps the filters data structure, and it introduces complex attribute filters.
Note: This release requires running
fractalctl update-db-data. Some legacy columns will be removed from the database, either as part of the2.11.0data-migration or as part of the2.11.1schema migration. Please make sure you have a database dump.
- API:
- Align API with new database schemas for filters-related columns (#2168, #2196, #2202).
- Support importing workflows or datasets with legacy (pre-
2.11.0) filters-related fields (#2185, #2227). - Avoid blocking operations from the download-job-logs endpoint, when the zip archive of a running job is requested (#2225).
- Update and simplify
/api/v2/project/{project_id}/status/, dropping use of temporary job files (#2169). - Add new (experimental)
/project/{project_id}/workflow/{workflow_id}/type-filters-flow/endpoint (#2208).
- Database:
- Update table schemas for all filters-related columns:
- Always handle attribute- and type-filters in different columns (#2168).
- Update attribute-filter-values type from scalar to list (#2168, #2196).
- Deprecate attribute filters for
WorkflowTaskV2(#2168). - Add attribute filters to
JobV2(#2168).
2.11.0data-migration script (#2168, #2202, #2208, #2209).
- Update table schemas for all filters-related columns:
- Runner:
- Introduce database writes in runner component, to replace the use of temporary files (#2169).
- Use
TaskV2.input_typesfor filtering, rather than validation (#2191, #2196). - Make job-execution background-task function sync, to make it transparent that it runs on a thread (#2220).
- Remove all filters from
TaskOutput(#2190).
- Task Collection:
- Improve logs handling for failed task collections (#2192)
- Testing:
- Speed up CI by splitting it into more jobs (#2210).
2.10.6¶
- Task lifecycle:
- Use unique logger names for task-lifecycle operations (#2204).
2.10.5¶
- App:
- Add missing space in "To" field for email settings (#2173).
- Testing:
- Improve configuration for coverage GitHub Action step (#2175).
- Add
persist-credentials: falsetoactions/checkout@v4GitHub Action steps (#2176).
- Dependencies:
- Require
bumpver>2024.0(#2179).
- Require
2.10.4¶
- Switch to poetry v2 (#2165).
- Require Python <3.13 (#2165).
2.10.3¶
Note: this version fixes a bug introduced in version 2.10.1.
- API:
- Fix bug in
POST /api/v2/project/{p_id}/workflow/{w_id}/wftask/replace-task/endpoint (#2163). - Add validation for
.whlfilename (#2147). - Trim whitespaces in
DatasetCreateV2.zarr_dir(#2138). - Support sending emails upon new OAuth signup (#2150).
- Fix bug in
- App:
- Introduce configuration for email settings (#2150).
- Command-line interface:
- Add
fractalctl email-settings(#2150).
- Add
- Dependencies:
- Add direct dependency on
cryptography(#2150).
- Add direct dependency on
- Testing:
- Introduce
mailpit-based end-to-end test of email sending (#2150).
- Introduce
2.10.2¶
- App:
- Add
FRACTAL_PIP_CACHE_DIRconfiguration variable (#2141).
- Add
- Tasks life cycle:
- Prevent deactivation of task groups with
"github.com"in pip-freeze information (#2144).
- Prevent deactivation of task groups with
- Runner:
- Handle early shutdown for sudo SLURM executor (#2132).
- Fix repeated setting of
timestamp_endedin task-group reactivation (#2140).
2.10.1¶
- API:
- Add
POST /api/v2/project/{p_id}/workflow/{w_id}/wftask/replace-task/endpoint (#2129).
- Add
- Testing:
- Use system postgresql in GitHub actions, rather than independent container (#2199).
2.10.0¶
- API:
- Major update of
POST /api/v2/task/collect/pip/, to support wheel-file upload (#2113).
- Major update of
- Testing:
- Add test of private task collection (#2126).
2.9.2¶
- API
- Remove
cache_dirand useproject_dir/.fractal_cache(#2121).
- Remove
- Docs
- Improve docstrings and reduce mkdocs warnings (#2122).
2.9.1¶
- Task collection:
- Fix bug in wheel-based SSH task-collection (#2119).
- Testing:
- Re-include a specific test previously skipped for Python 3.12 (#2114).
- Add metadata to
fractal-tasks-mockpackage (#2117).
- Docs:
- Add info about working versions.
2.9.0¶
WARNING 1: This version drops support for sqlite, and removes the configuration variables
DB_ENGINEandSQLITE_PATH.WARNING 2: This version removes the
CollectionStateV2database table. Make sure you have a database dump before runningfractalctl set-db, since this operation cannot be undone.
- API
- Remove
GET /api/v2/task/collect/{state_id}/endpoint (#2010). - Remove
activeproperty fromPATCH /api/v2/task-group/{task_group_id}/(#2033). - Add
GET /api/v2/task-group/activity/endpoint (#2005, #2027). - Add
GET /api/v2/task-group/activity/{task_group_activity_id}/endpoint (#2005). - Add
GET /admin/v2/task-group/activity/endpoint (#2005, #2027). - Add
POST /api/v2/task-group/{task_group_id}/{deactivate|reactivate}endpoints (#2033, #2066, #2078). - Add
POST /admin/v2/task-group/{task_group_id}/{deactivate|reactivate}endpoints (#2062, #2078). - Remove
GET /auth/current-user/viewer-paths/(#2096). - Add
GET /auth/current-user/allowed-viewer-paths/, with logic forfractal-vizarr-viewerauthorization (#2096). - Add
category,modalityandauthorquery parameters toGET /admin/v2/task/(#2102). - Add
POST /auth/group/{group_id}/add-user/{user_id}/(#2101). - Add
POST /auth/group/{group_id}/remove-user/{user_id}/(#2101, #2111). - Add
POST /auth/users/{user_id}/set-groups/(#2106). - Remove
new_user_idsproperty fromPATCH /auth/group/{group_id}/(#2101). - Remove
new_group_idsproperty fromPATCH /auth/users/{user_id}/(#2106). - Internals:
- Fix bug in
_get_collection_task_group_activity_status_message(#2047). - Remove
valutcvalidator for timestamps from API schemas, since it does not match withpsycopg3behavior (#2064). - Add query parameters
timestamp_last_used_{min|max}toGET /admin/v2/task-group/(#2061). - Remove
_convert_to_db_timestampand add_raise_if_naive_datetime: now API only accepts timezone-aware datetimes as query parameters (#2068). - Remove
_encode_as_utc: now timestamps are serialized in JSONs with their own timezone (#2081).
- Remove
- Database
- Drop support for sqlite, and remove the
DB_ENGINEandSQLITE_PATHconfiguration variables (#2052). - Add
TaskGroupActivityV2table (#2005). - Drop
CollectionStateV2table (#2010). - Add
TaskGroupV2.pip_freezenullable column (#2017). - Add
venv_size_in_kBandvenv_file_numbertoTaskGroupV2(#2034). - Add
TaskGroupV2.timestamp_last_usedcolumn, updated on job submission (#2049, #2061, #2086).
- Drop support for sqlite, and remove the
- Task-lifecycle internals:
- Refactor task collection and database-session management in background tasks (#2030).
- Update
TaskGroupActivityV2objects (#2005). - Update filename and path for task-collection scripts (#2008).
- Copy wheel file into
task_group.pathand updatetask_group.wheel_path, for local task collection (#2020). - Set
TaskGroupActivityV2.timestamp_endedwhen collections terminate (#2026). - Refactor bash templates and add
install_from_freeze.sh(#2029). - Introduce background operations for local reactivate/deactivate (#2033).
- Introduce background operations for SSH reactivate/deactivate (#2066).
- Fix escaping of newlines within f-strings, in logs (#2028).
- Improve handling of task groups created before 2.9.0 (#2050).
- Add
TaskGroupCreateV2Strictfor task collections (#2080). - Always create
script_dir_remotein SSH lifecycle background tasks (#2089). - Postpone setting
active=Falsein task-group deactivation to after all preliminary checks (#2100).
- Runner:
- Improve error handling in
_zip_folder_to_file_and_remove(#2057). - Improve error handling in
FractalSlurmSSHExecutorhandshakemethod (#2083). - Use the "spawn" start method for the multiprocessing context, for the
ProcessPoolExecutor-based runner (#2084). - Extract common functionalities from SLURM/sudo and SLURM/SSH executors (#2107).
- Improve error handling in
- SSH internals:
- Add
FractalSSH.remote_existsmethod (#2008). - Drop
FractalSSH.{_get,_put}wrappers ofSFTPClientmethods (#2077). - Try re-opening the connection in
FractalSSH.check_connectionwhen an error occurs (#2035). - Move
NoValidConnectionErrorexception handling intoFractalSSH.log_and_raisemethod (#2070). - Improve closed-socket testing (#2076).
- Add
- App:
- Add
FRACTAL_VIEWER_AUTHORIZATION_SCHEMEandFRACTAL_VIEWER_BASE_FOLDERconfiguration variables (#2096). - Testing:
- Drop
fetch-depthfromcheckoutin GitHub actions (#2039).
- Drop
- Scripts:
- Introduce
scripts/export_v1_workflows.py(#2043).
- Introduce
- Dependencies:
- Remove
passlibdependency (#2112). - Bump
fastapi-usersto v14, which includes switch topwdlib(#2112).
- Remove
2.8.1¶
- API:
- Validate all user-provided strings that end up in pip-install commands (#2003).
2.8.0¶
- Task collection
- Now both the local and SSH versions of the task collection use the bash templates (#1980).
- Update task-collections database logs incrementally (#1980).
- Add
TaskGroupV2.pinned_package_versions_stringproperty (#1980). - Support pinned-package versions for SSH task collection (#1980).
- Now
pip installuses--no-cache(#1980).
- API
- Deprecate the
verbosequery parameter inGET /api/v2/task/collect/{state_id}/(#1980). - Add
project_dirattribute toUserSettings(#1990). - Set a default for
DatasetV2.zarr_dir(#1990). - Combine the
args_schema_parallelandargs_schema_non_parallelquery parameters inGET /api/v2/task/into a single parameterargs_schema(#1998).
- Deprecate the
2.7.1¶
WARNING: As of this version, all extras for
pip installare deprecated and the corresponding dependencies become required.
- Database:
- Drop
TaskV2.ownercolumn (#1977). - Make
TaskV2.taskgroupv2_idcolumn required (#1977).
- Drop
- Dependencies:
- Make
psycopg[binary]dependency required, and droppostgres-pyscopg-binaryextra (#1970). - Make
gunicorndependency required, and dropgunicornextra (#1970).
- Make
- Testing:
- Switch from SQLite to Postgres in the OAuth Github action (#1981).
2.7.0¶
WARNING: This release comes with several specific notes:
- It requires running
fractalctl update-db-data(afterfractalctl set-db).- When running
fractalctl update-db-data, the environment variableFRACTAL_V27_DEFAULT_USER_EMAILmust be set, e.g. as inFRACTAL_V27_DEFAULT_USER_EMAIL=admin@fractal.yx fractalctl update-db-data. This user must exist, and they will own all previously-common tasks/task-groups.- The pip extra
postgresis deprecated, in favor ofpostgres-psycopg-binary.- The configuration variable
DB_ENGINE="postgres"is deprecated, in favor ofDB_ENGINE="postgres-psycopg".- Python3.9 is deprecated.
- API:
- Users and user groups:
- Replace
UserRead.group_namesandUserRead.group_idswithUserRead.group_ids_namesordered list (#1844, #1850). - Deprecate
GET /auth/group-names/(#1844). - Add
DELETE /auth/group/{id}/endpoint (#1885). - Add
PATCH auth/group/{group_id}/user-settings/bulk endpoint (#1936).
- Replace
- Task groups:
- Introduce
/api/v2/task-group/routes (#1817, #1847, #1852, #1856, #1943). - Respond with 422 error when any task-creating endpoint would break a non-duplication constraint (#1861).
- Enforce non-duplication constraints on
TaskGroupV2(#1865). - Fix non-duplication check in
PATCH /api/v2/task-group/{id}/(#1911). - Add cascade operations to
DELETE /api/v2/task-group/{task_group_id}/and toDELETE /admin/v2/task-group/{task_group_id}/(#1867). - Expand use and validators for
TaskGroupCreateV2schema (#1861). - Do not process task
sources in task/task-group CRUD operations (#1861). - Do not process task
owners in task/task-group CRUD operations (#1861).
- Introduce
- Tasks:
- Drop
TaskCreateV2.source(#1909). - Drop
TaskUpdateV2.version(#1905). - Revamp access-control for
/api/v2/task/endpoints, based on task-group attributes (#1817). - Update
/api/v2/task/endpoints and schemas with new task attributes (#1856). - Forbid changing
TaskV2.name(#1925).
- Drop
- Task collection:
- Improve preliminary checks in task-collection endpoints (#1861).
- Refactor split between task-collection endpoints and background tasks (#1861).
- Create
TaskGroupV2object within task-collection endpoints (#1861). - Fix response of task-collection endpoint (#1902).
- Automatically discover PyPI package version if missing or invalid (#1858, #1861, #1902).
- Use appropriate log-file path in collection-status endpoint (#1902).
- Add task
authorsto manifest schema (#1856). - Do not use
sourcefor custom task collection (#1893). - Rename custom-task-collection request-body field from
sourcetolabel(#1896). - Improve error messages from task collection (#1913).
- Forbid non-unique task names in
ManifestV2(#1925).
- Workflows and workflow tasks:
- Introduce additional checks in POST-workflowtask endpoint, concerning non-active or non-accessible tasks (#1817).
- Introduce additional intormation in GET-workflow endpoint, concerning non-active or non-accessible tasks (#1817).
- Introduce additional intormation in PATCH-workflow endpoint, concerning non-active or non-accessible tasks (#1868, #1869).
- Stop logging warnings for non-common tasks in workflow export (#1893).
- Drop
WorkflowTaskCreateV2.order(#1906). - Update endpoints for workflow import/export (#1925, #1939, #1960).
- Datasets:
- Remove
TaskDumpV2.ownerattribute (#1909).
- Remove
- Jobs:
- Prevent job submission if includes non-active or non-accessible tasks (#1817).
- Remove rate limit for
POST /project/{project_id}/job/submit/(#1944).
- Admin:
- Remove
ownerfromGET admin/v2/task/(#1909). - Deprecate
kindquery parameter for/admin/v2/task/(#1893). - Add
originandpkg_namequery parameters toGET /admin/v2/task-group/(#1979).
- Remove
- Schemas:
- Forbid extras in
TaskCollectPipV2(#1891). - Forbid extras in all Create/Update/Import schemas (#1895).
- Deprecate internal
TaskCollectPipschema in favor ofTaskGroupV2(#1861).
- Forbid extras in
- Users and user groups:
- Database:
- Introduce
TaskGroupV2table (#1817, #1856). - Add
timestamp_createdcolumn toLinkUserGrouptable (#1850). - Add
TaskV2attributesauthors,tags,categoryandmodality(#1856). - Add
update-db-datascript (#1820, #1888). - Add
taskgroupv2_idforeign key toCollectionStateV2(#1867). - Make
TaskV2.sourcenullable and drop its uniqueness constraint (#1861). - Add
TaskGroupV2columnswheel_path,pinned_package_versions(#1861). - Clean up
alembicmigration scripts (#1894). - Verify task-group non-duplication constraint in
2.7.0data-migration script (#1927). - Normalize
pkg_namein2.7.0data-migration script (#1930). - Deprecate
DB_ENGINE="postgres"configuration variable (#1946).
- Introduce
- Runner:
- Do not create local folders with 755 permissions unless
FRACTAL_BACKEND_RUNNER="slurm"(#1923). - Fix bug of SSH/SFTP commands not acquiring lock (#1949).
- Fix bug of unhandled exception in SSH/SLURM executor (#1963).
- Always remove task-subfolder compressed archive (#1949).
- Do not create local folders with 755 permissions unless
- Task collection:
- Create base directory (in SSH mode), if missing (#1949).
- Fix bug of SSH/SFTP commands not acquiring lock (#1949).
- SSH:
- Improve logging for SSH-connection-locking flow (#1949).
- Introduce
FractalSSH.fetch_fileandFractalSSH.read_remote_json_file(#1949). - Use
paramiko.sftp_client.SFTPClientmethods directly rathen thanfabricwrappers (#1949). - Disable prefetching for
SFTPClient.get(#1949).
- Internal:
- Update
_create_first_groupso that it only searches forUserGroupswith a given name (#1964).
- Update
- Dependencies:
- Bump fastapi to
0.115(#1942). - Remove pip extra
postgres, corresponding topsycopg2+asyncpg(#1946). - Deprecate python3.9 (#1946).
- Bump fastapi to
- Testing:
- Benchmark
GET /api/v2/task-group/(#1922). - Use new
ubuntu22-slurm-multipyimage, with Python3.12 and with Python-version specific venvs (#1946, #1969). - Get
DB_ENGINEvariable fromos.environrather than from installed packages (#1968).
- Benchmark
2.6.4¶
- Database
- Fix use of naming convention for database schema-migration scripts (#1819).
- Testing:
- Test
alembic downgrade base(#1819). - Add
GET /api/v2/task/to benchmarks (#1825).
- Test
2.6.3¶
- API:
- Introduce
GET /auth/current-user/viewer-paths/endpoint (#1816). - Add
viewer_pathsattribute toUserGroupendpoints (#1816).
- Introduce
- Database:
- Add
viewer_pathscolumn toUserGrouptable (#1816).
- Add
- Runner:
- Anticipate
wait_thread.shutdown_callbackassignment inFractalSlurmExecutor, to avoid an uncaught exception (#1815).
- Anticipate
2.6.2¶
- Allow setting
UserSettingsattributes toNonein standard/strict PATCH endpoints (#1814).
2.6.1¶
- App (internal):
- Remove
FRACTAL_SLURM_SSH_HOST,FRACTAL_SLURM_SSH_USER,FRACTAL_SLURM_SSH_PRIVATE_KEY_PATHandFRACTAL_SLURM_SSH_WORKING_BASE_DIRfromSettings(#1804).
- Remove
- Database:
- Drop
slurm_user,slurm_accountsandcache_dircolumns fromUserOAuth(#1804)
- Drop
2.6.0¶
WARNING: This release requires running
fractalctl update-db-data(afterfractalctl set-db).
- API:
- Introduce user-settings API, in
/auth/users/{user_id}/settings/and/auth/current-user/settings/(#1778, #1807). - Add the creation of empty settings to
UserManager.on_after_registerhook (#1778). - Remove deprecated user's attributes (
slurm_user,cache_dir,slurm_accounts) from API, in favor of newUserSettingones (#1778). - Validate user settings in endpoints that rely on them (#1778).
- Propagate user settings to background tasks when needed (#1778).
- Introduce user-settings API, in
- Database:
- Introduce new
user_settingstable, and link it touser_oauth(#1778).
- Introduce new
- Internal:
- Remove redundant string validation in
FractalSSH.remove_folderandTaskCollectCustomV2(#1810). - Make
validate_cmdmore strict about non-string arguments (#1810).
2.5.2¶
- App:
- Replace
fractal_sshattribute withfractal_ssh_list, inapp.state(#1790). - Move creation of SSH connections from app startup to endpoints (#1790).
- Replace
- Internal
- Introduce
FractalSSHList, in view of support for multiple SSH/Slurm service users (#1790). - Make
FractalSSH.close()more aggressively closeTransportattribute (#1790). - Set
look_for_keys=Falsefor paramiko/fabric connection (#1790).
- Introduce
- Testing:
- Add fixture to always test that threads do not accumulate during tests (#1790).
2.5.1¶
- API:
- Make
WorkflowTaskDumpV2attributestask_idandtaskoptional (#1784). - Add validation for user-provided strings that execute commands with subprocess or remote-shell (#1767).
- Make
- Runner and task collection:
- Validate commands before running them via
subprocessorfabric(#1767).
- Validate commands before running them via
2.5.0¶
WARNING: This release has a minor API bug when displaying a V2 dataset with a history that contains legacy tasks. It's recommended to update to 2.5.1.
This release removes support for including V1 tasks in V2 workflows. This comes with changes to the database (data and metadata), to the API, and to the V2 runner.
- Runner:
- Deprecate running v1 tasks within v2 workflows (#1721).
- Database:
- Remove
Task.is_v2_compatiblecolumn (#1721). - For table
WorkflowTaskV2, dropis_legacy_taskandtask_legacy_idcolumns, removetask_legacyORM attribute, maketask_idrequired, maketaskrequired (#1721).
- Remove
- API:
- Drop v1-v2-task-compatibility admin endpoint (#1721).
- Drop
/task-legacy/endpoint (#1721). - Remove legacy task code branches from
WorkflowTaskV2CRUD endpoints (#1721). - Add OAuth accounts info to
UserReadat.oauth_accounts(#1765).
- Testing:
- Improve OAuth Github Action to test OAuth account flow (#1765).
2.4.2¶
- App:
- Improve logging in
fractalctl set-db(#1764).
- Improve logging in
- Runner:
- Add
--set-hometosudo -uimpersonation command, to fix Ubuntu18 behavior (#1762).
- Add
- Testing:
- Start tests of migrations from valid v2.4.0 database (#1764).
2.4.1¶
This is mainly a bugfix release, re-implementing a check that was removed in 2.4.0.
- API:
- Re-introduce check for existing-user-email in
PATCH /auth/users/{id}/(#1760).
- Re-introduce check for existing-user-email in
2.4.0¶
This release introduces support for user groups, but without linking it to any access-control rules (which will be introduced later).
NOTE: This release requires running the
fractalctl update-db-datascript.
- App:
- Move creation of first user from application startup into
fractalctl set-dbcommand (#1738, #1748). - Add creation of default user group into
fractalctl set-dbcommand (#1738). - Create
update-db-scriptfor current version, that adds all users to default group (#1738).
- Move creation of first user from application startup into
- API:
- Added
/auth/group/and/auth/group-names/routers (#1738, #1752). - Implement
/auth/users/{id}/POST/PATCH routes infractal-server(#1738, #1747, #1752). - Introduce
UserUpdateWithNewGroupIdsschema forPATCH /auth/users/{id}/(#1747, #1752). - Add
UserManager.on_after_registerhook to add new users to default user group (#1738).
- Added
- Database:
- Added new
usergroupandlinkusergrouptables (#1738).
- Added new
- Internal
- Refactored
fractal_server.app.authandfractal_server.app.security(#1738)/ - Export all relevant modules in
app.models, since it matters e.g. forautogenerate-ing migration scripts (#1738).
- Refactored
- Testing
- Add
UserGroupvalidation toscripts/validate_db_data_with_read_schemas.py(#1746).
- Add
2.3.11¶
- SSH runner:
- Move remote-folder creation from
submit_workflowto more specific_process_workflow(#1728).
- Move remote-folder creation from
- Benchmarks:
- Add
GET /auth/token/login/to tested endpoints (#1720).
- Add
- Testing:
- Update GitHub actions
upload-artifactanddownload-artifacttov4(#1725).
- Update GitHub actions
2.3.10¶
- Fix minor bug in zipping-job logging (#1716).
2.3.9¶
- Add logging for zipping-job-folder operations (#1714).
2.3.8¶
NOTE:
FRACTAL_API_V1_MODE="include_without_submission"is now transformed intoFRACTAL_API_V1_MODE="include_read_only".
- API:
- Support read-only mode for V1 (#1701).
- Improve handling of zipped job-folder in download-logs endpoints (#1702).
- Runner:
- Improve database-error handling in V2 job execution (#1702).
- Zip job folder after job execution (#1702).
- App:
UvicornWorkeris now imported fromuvicorn-worker(#1690).
- Testing:
- Remove
HAS_LOCAL_SBATCHvariable and related if-branches (#1699).
- Remove
- Benchmarks:
- Add
GET /auth/current-user/to tested endpoints (#1700).
- Add
- Dependencies:
- Update
mkdocstringsto^0.25.2(#1707). - Update
fastapito^0.112.0(#1705).
- Update
2.3.7¶
- SSH SLURM executor:
- Handle early shutdown in SSH executor (#1696).
- Task collection:
- Introduce a new configuration variable
FRACTAL_MAX_PIP_VERSIONto pin task-collection pip (#1675).
- Introduce a new configuration variable
2.3.6¶
- API:
- When creating a WorkflowTask, do not pre-populate its top-level arguments based on JSON Schema default values (#1688).
- Dependencies:
- Update
sqlmodelto^0.0.21(#1674). - Add
uvicorn-worker(#1690).
- Update
2.3.5¶
WARNING: The
pre_submission_commandsSLURM configuration is included as an experimental feature, since it is still not useful for its main intended goal (callingmodule loadbefore runningsbatch).
- SLURM runners:
- Expose
gpusSLURM parameter (#1678). - For SSH executor, add
pre_submission_commands(#1678). - Removed obsolete arguments from
get_slurm_configfunction (#1678).
- Expose
- SSH features:
- Add
FractalSSH.write_remote_filemethod (#1678).
- Add
2.3.4¶
- SSH SLURM runner:
- Refactor
compress_folderandextract_archivemodules, and stop usingtarfilelibrary (#1641).
- Refactor
- API:
- Introduce
FRACTAL_API_V1_MODE=include_without_submissionto include V1 API but forbid job submission (#1664).
- Introduce
- Testing:
- Do not test V1 API with
DB_ENGINE="postgres-psycopg"(#1667). - Use new Fractal SLURM containers in CI (#1663).
- Adapt tests so that they always refer to the current Python version (the one running
pytest), when needed; this means that we don't require the presence of any additional Python version in the development environment, apart from the current one (#1633). - Include Python3.11 in some tests (#1669).
- Simplify CI SLURM Dockerfile after base-image updates (#1670).
- Cache
ubuntu22-slurm-multipyDocker image in CI (#1671). - Add
oauth.yamlGitHub action to test OIDC authentication (#1665).
- Do not test V1 API with
2.3.3¶
This release fixes a SSH-task-collection bug introduced in version 2.3.1.
- API:
- Expose new superuser-restricted endpoint
GET /api/settings/(#1662).
- Expose new superuser-restricted endpoint
- SLURM runner:
- Make
FRACTAL_SLURM_SBATCH_SLEEPconfiguration variablefloat(#1658).
- Make
- SSH features:
- Fix wrong removal of task-package folder upon task-collection failure (#1649).
- Remove
FractalSSH.rename_foldermethod (#1654).
- Testing:
- Refactor task-collection fixtures (#1637).
2.3.2¶
WARNING: The remove-remote-venv-folder in the SSH task collection is broken (see issue 1633). Do not deploy this version in an SSH-based
fractal-serverinstance.
- API:
- Fix incorrect zipping of structured job-log folders (#1648).
2.3.1¶
This release includes a bugfix for task names with special characters.
WARNING: The remove-remote-venv-folder in the SSH task collection is broken (see issue 1633). Do not deploy this version in an SSH-based
fractal-serverinstance.
- Runner:
- Improve sanitization of subfolder names (commits from 3d89d6ba104d1c6f11812bc9de5cbdff25f81aa2 to 426fa3522cf2eef90d8bd2da3b2b8a5b646b9bf4).
- API:
- Improve error message when task-collection Python is not defined (#1640).
- Use a single endpoint for standard and SSH task collection (#1640).
- SSH features:
- Remove remote venv folder upon failed task collection in SSH mode (#1634, #1640).
- Refactor
FractalSSH(#1635). - Set
fabric.Connection.forward_agent=False(#1639).
- Testing:
- Improved testing of SSH task-collection API (#1640).
- Improved testing of
FractalSSHmethods (#1635). - Stop testing SQLite database for V1 in CI (#1630).
2.3.0¶
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:
-
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 thatFRACTAL_TASKS_PYTHON_3_10=/some/pythonis an absolute path. Optionally, you can define other variables likeFRACTAL_TASKS_PYTHON_3_9,FRACTAL_TASKS_PYTHON_3_11orFRACTAL_TASKS_PYTHON_3_12. -
If you leave
FRACTAL_TASKS_PYTHON_DEFAULT_VERSIONunset, then only the Python interpreter that is currently runningfractal-servercan 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 runningfractal-server).
- API:
- Introduce
api/v2/task/collect/custom/endpoint (#1607, #1613, #1617, #1629).
- Introduce
- Task collection:
- Introduce task-collection Python-related configuration variables (#1587).
- Always set Python version for task collection, and only use
FRACTAL_TASKS_PYTHON_X_Yvariables (#1587). - Refactor task-collection functions and schemas (#1587, #1617).
- Remove
TaskCollectStatusV2andget_collection_datainternal schema/function (#1598). - Introduce
CollectionStatusV2enum for task-collection status (#1598). - Reject task-collection request if it includes a wheel file and a version (#1608). SSH features:
- Introduce
fractal_server/sshsubpackage (#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/slurmintosudoandsshsubfolders (#1545). - Introduce FractalSSH object which is a wrapper class around fabric.Connection object.
It provides a
lockto avoid loss of ssh instructions and a custom timeout (#1618)
- Dependencies:
- Update
sqlmodelto^0.0.19(#1584). - Update
pytest-asyncioto^0.23(#1558).
- Update
- Testing:
- Test the way
FractalProcessPoolExecutorspawns processes and threads (#1579). - Remove
event_loopfixture: every test will run on its own event loop (#1558). - Test task collection with non-canonical package name (#1602).
- Test the way
2.2.0¶
This release streamlines options for the Gunicorn startup command, and includes two new experimental features.
NOTE 1: you can now enable custom Gunicorn worker/logger by adding the following options to the
gunicornstartup command: ---worker-class fractal_server.gunicorn_fractal.FractalWorker---logger-class fractal_server.gunicorn_fractal.FractalGunicornLoggerNOTE 2: A new experimental local runner is available, which uses processes instead of threads and support shutdown. You can try it out with the configuration variable
FRACTAL_BACKEND_RUNNER=local_experimentalNOTE 3: A new PostgreSQL database adapter is available, fully based on
psycopg3(rather thanpyscopg2+asyncpg). You can try it out with the configuration variableDB_ENGINE=postgres-psycopg(note that this requires thepip installextrapostgres-psycopg-binary).
- API:
- Add extensive logs to
DELETE /api/v2/project/{project_id}(#1532). - Remove catch of
IntegrityErrorinPOST /api/v1/project(#1530).
- Add extensive logs to
- App and deployment:
- Move
FractalGunicornLoggerandFractalWorkerintofractal_server/gunicorn_fractal.py(#1535). - Add custom gunicorn/uvicorn worker to handle SIGABRT signal (#1526).
- Store list of submitted jobs in app state (#1538).
- Add logic for graceful shutdown for job slurm executors (#1547).
- Move
- Runner:
- Change structure of job folders, introducing per-task subfolders (#1523).
- Rename internal
workflow_dirandworkflow_dir_uservariables to local/remote (#1534). - Improve handling of errors in
submit_workflowbackground task (#1556, #1566). - Add new
local_experimentalrunner, based onProcessPoolExecutor(#1544, #1566).
- Database:
- Add new Postgres adapter
psycopg(#1562).
- Add new Postgres adapter
- Dependencies
- Add
fabrictodevdependencies (#1518). - Add new
postgres-psycopg-binaryextra (#1562).
- Add
- Testing:
- Extract
pytest-dockerfixtures into a dedicated module (#1516). - Rename SLURM containers in CI (#1516).
- Install and run SSH daemon in CI containers (#1518).
- Add unit test of SSH connection via fabric/paramiko (#1518).
- Remove obsolete folders from
tests/data(#1517).
- Extract
2.1.0¶
This release fixes a severe bug where SLURM-executor auxiliary threads are not joined when a Fractal job ends.
- App:
- Add missing join for
wait_threaduponFractalSlurmExecutorexit (#1511). - Replace
startup/shutdownevents withlifespanevent (#1501).
- Add missing join for
- API:
- Remove
Path.resolvefrom the submit-job endpoints and add validator forSettings.FRACTAL_RUNNER_WORKING_BASE_DIR(#1497).
- Remove
- Testing:
- Improve dockerfiles for SLURM (#1495, #1496).
- Set short timeout for
docker compose down(#1500).
2.0.6¶
NOTE: This version changes log formats. For
uvicornlogs, this change requires no action. Forgunicorn, logs formats are only changed by adding the following command-line option:gunicorn ... --logger-class fractal_server.logger.gunicorn_logger.FractalGunicornLogger.
- API:
- Add
FRACTAL_API_V1_MODEenvironment variable to include/exclude V1 API (#1480). - Change format of uvicorn loggers (#1491).
- Introduce
FractalGunicornLoggerclass (#1491).
- Add
- Runner:
- Fix missing
.logfiles in server folder for SLURM jobs (#1479).
- Fix missing
- Database:
- Remove
UserOAuth.project_listandUserOAuth.project_list_v2relationships (#1482).
- Remove
- Dev dependencies:
- Bump
pytestto8.1.*(#1486). - Bump
coverageto7.5.*(#1486). - Bump
pytest-dockerto3.1.*(#1486). - Bump
pytest-subprocessto^1.5(#1486).
- Bump
- Benchmarks:
- Move
populate_dbscripts intobenchmarkfolder (#1489).
- Move
2.0.5¶
- API:
- Add
GET /admin/v2/task/(#1465). - Improve error message in DELETE-task endpoint (#1471).
- Add
- Set
JobV2folder attributes from within the submit-job endpoint (#1464). - Tests:
- Make SLURM CI work on MacOS (#1476).
2.0.4¶
- Add
FRACTAL_SLURM_SBATCH_SLEEPconfiguration variable (#1467).
2.0.3¶
WARNING: This update requires running a fix-db script, via
fractalctl update-db-data.
- Database:
- Create fix-db script to remove
imagesandhistoryfrom dataset dumps in V1/V2 jobs (#1456).
- Create fix-db script to remove
- Tests:
- Split
test_full_workflow_v2.pyinto local/slurm files (#1454).
- Split
2.0.2¶
WARNING: Running this version on a pre-existing database (where the
jobsv2table has some entries) is broken. Running this version on a freshly-created database works as expected.
- API:
- Fix bug in status endpoint (#1449).
- Improve handling of out-of-scope scenario in status endpoint (#1449).
- Do not include dataset
historyinJobV2.dataset_dump(#1445). - Forbid extra arguments in
DumpV2schemas (#1445).
- API V1:
- Do not include dataset
historyinApplyWorkflow.{input,output}_dataset_dump(#1453).
- Do not include dataset
- Move settings logs to
check_settingsand use fractal-serverset_logger(#1452). - Benchmarks:
- Handle some more errors in benchmark flow (#1445).
- Tests:
- Update testing database to version 2.0.1 (#1445).
2.0.1¶
- Database/API:
- Do not include
dataset_dump.imagesinJobV2table (#1441).
- Do not include
- Internal functions:
- Introduce more robust
reset_logger_handlersfunction (#1425).
- Introduce more robust
- Benchmarks:
- Add
POST /api/v2/project/project_id/dataset/dataset_id/images/query/in bechmarks to evaluate the impact of the number of images during the query (#1441).
- Add
- Development:
- Use
poetry1.8.2 in GitHub actions and documentation.
- Use
2.0.0¶
Major update.
1.4.10¶
WARNING: Starting from this version, the dependencies for the
slurmextra are required; commands likepip install fractal-server[slurm,postgres]must be replaced bypip install fractal-server[postgres].
- Dependencies:
- Make
clusterfuturesandcloudpicklerequired dependencies (#1255). - Remove
slurmextra from package (#1255).
- Make
- API:
- Handle invalid history file in
GET /project/{project_id}/dataset/{dataset_id}/status/(#1259).
- Handle invalid history file in
- Runner:
- Add custom
_jobs_finishedfunction to check the job status and to avoid squeue errors (#1266)
- Add custom
1.4.9¶
This release is a follow-up of 1.4.7 and 1.4.8, to mitigate the risk of job folders becoming very large.
- Runner:
- Exclude
historyfromTaskParametersobject for parallel tasks, so that it does not end up in input pickle files (#1247).
- Exclude
1.4.8¶
This release is a follow-up of 1.4.7, to mitigate the risk of job folders becoming very large.
- Runner:
- Exclude
metadata["image"]fromTaskParametersobject for parallel tasks, so that it does not end up in input pickle files (#1245). - Exclude components list from
workflow.loglogs (#1245).
- Exclude
- Database:
- Remove spurious logging of
fractal_server.app.dbstring (#1245).
- Remove spurious logging of
1.4.7¶
This release provides a bugfix (PR 1239) and a workaround (PR 1238) for the SLURM runner, which became relevant for the use case of processing a large dataset (300 wells with 25 cycles each).
- Runner:
- Do not include
metadata["image"]in JSON file with task arguments (#1238). - Add
FRACTAL_RUNNER_TASKS_INCLUDE_IMAGEconfiguration variable, to define exceptions where tasks still requiremetadata["image"](#1238). - Fix bug in globbing patterns, when copying files from user-side to server-side job folder in SLURM executor (#1239).
- Do not include
- API:
- Fix error message for rate limits in apply-workflow endpoint (#1231).
- Benchmarks:
- Add more scenarios, as per issue #1184 (#1232).
1.4.6¶
- API:
- Add
GET /admin/job/{job_id}(#1230). - Handle
FileNotFoundinGET /project/{project_id}/job/{job_id}/(#1230).
- Add
1.4.5¶
- Remove CORS middleware (#1228).
- Testing:
- Fix
migrations.ymlGitHub action (#1225).
- Fix
1.4.4¶
- API:
- Add rate limiting to
POST /{project_id}/workflow/{workflow_id}/apply/(#1199). - Allow users to read the logs of ongoing jobs with
GET /project/{project_id}/job/{job_id}/, usingshow_tmp_logsquery parameter (#1216). - Add
logquery parameter inGET {/api/v1/job/,/api/v1/{project.id}/job/,/admin/job/}, to trim response body (#1218). - Add
args_schemaquery parameter inGET /api/v1/task/to trim response body (#1218). - Add
historyquery parameter inGET {/api/v1/dataset/,/api/v1/project/{project.id}/dataset/}to trim response body (#1219). - Remove
task_listfromjob.workflow_dumpcreation in/api/v1/{project_id}/workflow/{workflow_id}/apply/(#1219) - Remove
task_listfromWorkflowDumpPydantic schema (#1219)
- Add rate limiting to
- Dependencies:
- Update fastapi to
^0.109.0(#1222). - Update gunicorn to
^21.2.0(#1222). - Update aiosqlite to
^0.19.0(#1222). - Update uvicorn to
^0.27.0(#1222).
- Update fastapi to
1.4.3¶
WARNING:
This update requires running a fix-db script, via
fractalctl update-db-data.
- API:
- Improve validation of
UserCreate.slurm_accounts(#1162). - Add
timestamp_createdtoWorkflowRead,WorkflowDump,DatasetReadandDatasetDump(#1152). - Make all dumps in
ApplyWorkflowReadnon optional (#1175). - Ensure that timestamps in
Readschemas are timezone-aware, regardless ofDB_ENGINE(#1186). - Add timezone-aware timestamp query parameters to all
/adminendpoints (#1186).
- Improve validation of
- API (internal):
- Change the class method
Workflow.insert_taskinto the auxiliary function_workflow_insert_task(#1149).
- Change the class method
- Database:
- Make
WorkflowTask.workflow_idandWorkflowTask.task_idnot nullable (#1137). - Add
Workflow.timestamp_createdandDataset.timestamp_createdcolumns (#1152). - Start a new
current.pyfix-db script (#1152, #1195). - Add to
migrations.ymla new script (validate_db_data_with_read_schemas.py) that validates test-DB data with Read schemas (#1187). - Expose
fix-dbscripts via command-line optionfractalctl update-db-data(#1197).
- Make
- App (internal):
- Check in
Settingsthatpsycopg2,asyngpgandcfut, if required, are installed (#1167). - Split
DB.set_dbinto sync/async methods (#1165). - Rename
DB.get_dbintoDB.get_async_db(#1183). - Normalize names of task packages (#1188).
- Check in
- Testing:
- Update
clean_db_fractal_1.4.1.sqltoclean_db_fractal_1.4.2.sql, and changemigrations.ymltarget version (#1152). - Reorganise the test directory into subdirectories, named according to the order in which we want the CI to execute them (#1166).
- Split the CI into two independent jobs,
CoreandRunner, to save time through parallelisation (#1204).
- Update
- Dependencies:
- Update
python-dotenvto version 0.21.0 (#1172).
- Update
- Runner:
- Remove
JobStatusType.RUNNING, incorporating it intoJobStatusType.SUBMITTED(#1179).
- Remove
- Benchmarks:
- Add
fractal_client.pyandpopulate_script_v2.pyfor creating different database status scenarios (#1178). - Add a custom benchmark suite in
api_bench.py. - Remove locust.
- Add
- Documentation:
- Add the minimum set of environment variables required to set the database and start the server (#1198).
1.4.2¶
WARNINGs:
- This update requires running a fix-db script, available at https://raw.githubusercontent.com/fractal-analytics-platform/fractal-server/1.4.2/scripts/fix_db/current.py.
- Starting from this version, non-verified users have limited access to
/api/v1/endpoints. Before the upgrade, all existing users must be manually set to verified.
- API:
- Prevent access to
GET/PATCHtask endpoints for non-verified users (#1114). - Prevent access to task-collection and workflow-apply endpoints for non-verified users (#1099).
- Make first-admin-user verified (#1110).
- Add the automatic setting of
ApplyWorkflow.end_timestampwhen patchingApplyWorkflow.statusviaPATCH /admin/job/{job_id}(#1121). - Change
ProjectDump.timestamp_createdtype fromdatetimetostr(#1120). - Change
_DatasetHistoryItem.workflowtasktype intoWorkflowTaskDump(#1139). - Change status code of stop-job endpoints to 202 (#1151).
- Prevent access to
- API (internal):
- Implement cascade operations explicitly, in
DELETEendpoints for datasets, workflows and projects (#1130). - Update
GET /project/{project_id}/workflow/{workflow_id}/job/to avoid usingWorkflow.job_list(#1130). - Remove obsolete sync-database dependency from apply-workflow endpoint (#1144).
- Implement cascade operations explicitly, in
- Database:
- Add
ApplyWorkflow.project_dumpcolumn (#1070). - Provide more meaningful names to fix-db scripts (#1107).
- Add
Project.timestamp_createdcolumn, with timezone-aware default (#1102, #1131). - Remove
Dataset.list_jobs_inputandDataset.list_jobs_outputrelationships (#1130). - Remove
Workflow.job_list(#1130).
- Add
- Runner:
- In SLURM backend, use
slurm_account(as received from apply-workflow endpoint) with top priority (#1145). - Forbid setting of SLURM account from
WorkflowTask.metaor as part ofworker_initvariable (#1145). - Include more info in error message upon
sbatchfailure (#1142). - Replace
sbatch--chdiroption with-D, to support also slurm versions before 17.11 (#1159).
- In SLURM backend, use
- Testing:
- Extended systematic testing of database models (#1078).
- Review
MockCurrentUserfixture, to handle different kinds of users (#1099). - Remove
persistfromMockCurrentUser(#1098). - Update
migrations.ymlGitHub Action to use up-to-date database and also test fix-db script (#1101). - Add more schema-based validation to fix-db current script (#1107).
- Update
.dict()to.model_dump()forSQLModelobjects, to fix someDeprecationWarnings(##1133). - Small improvement in schema coverage (#1125).
- Add unit test for
securitymodule (#1036).
- Dependencies:
- Update
sqlmodelto version 0.0.14 (#1124).
- Update
- Benchmarks:
- Add automatic benchmark system for API's performances (#1123)
- App (internal):
- Move
_create_first_userfrommaintosecuritymodule, and allow it to create multiple regular users (#1036).
- Move
1.4.1¶
- API:
- Add
GET /admin/job/{job_id}/stop/andGET /admin/job/{job_id}/download/endpoints (#1059). - Use
DatasetDumpandWorkflowDumpmodels for "dump" attributes ofApplyWorkflowRead(#1049, #1082). - Add
slurm_accountstoUserschemas and addslurm_accounttoApplyWorkflowschemas (#1067). - Prevent providing a
package_versionfor task collection from a.whllocal package (#1069). - Add
DatasetRead.projectandWorkflowRead.projectattributes (#1082).
- Add
- Database:
- Make
ApplyWorkflow.workflow_dumpcolumn non-nullable (#1049). - Add
UserOAuth.slurm_accountsandApplyWorkflow.slurm_accountcolumns (#1067). - Add script for adding
ApplyWorkflow.user_email(#1058). - Add
Dataset.projectandWorkflow.projectrelationships (#1082). - Avoid using
Projectrelationshipsdataset_listorworkflow_listwithin someGETendpoints (#1082). - Fully remove
Projectrelationshipsdataset_list,workflow_listandjob_list(#1091).
- Make
- Testing:
- Only use ubuntu-22.04 in GitHub actions (#1061).
- Improve unit testing of database models (#1082).
- Dependencies:
- Pin
bcryptto 4.0.1 to avoid warning in passlib (#1060).
- Pin
- Runner:
- Set SLURM-job working directory to
job.working_dir_userthrough--chdiroption (#1064).
- Set SLURM-job working directory to
1.4.0¶
- API:
- Major endpoint changes:
- Add trailing slash to all endpoints' paths (#1003).
- Add new admin-area endpoints restricted to superusers at
/admin(#947, #1009, #1032). - Add new
GETendpointsapi/v1/job/andapi/v1/project/{project_id}/workflow/{workflow_id}/job/(#969, #1003). - Add new
GETendpointsapi/v1/dataset/andapi/v1/workflow/(#988, #1003). - Add new
GETendpointapi/v1/project/{project_id}/dataset/(#993). - Add
PATCH /admin/job/{job_id}/endpoint (#1030, #1053). - Move
GET /auth/whoami/toGET /auth/current-user/(#1013). - Move
PATCH /auth/users/me/toPATCH /auth/current-user/(#1013, #1035). - Remove
DELETE /auth/users/{id}/endpoint (#994). - Remove
GET /auth/users/me/(#1013). - Remove
POST/auth/forgot-password/,/auth/reset-password/,/auth/request-verify-token/,/auth/verify/(#1033). - Move
GET /auth/userlist/toGET /auth/users/(#1033).
- New behaviors or responses of existing endpoints:
- Change response of
/api/v1/project/{project_id}/job/{job_id}/stop/endpoint to 204 no-content (#967). - Remove
dataset_listattribute fromProjectRead, which affects allGETendpoints that return some project (#993). - Make it possible to delete a
Dataset,WorkfloworProject, even when it is in relationship to anApplyWorkflow- provided that theApplyWorkflowis not pending or running (#927, #973). - Align
ApplyWorkflowReadwith newApplyWorkflow, which has optional foreign keysproject_id,workflow_id,input_dataset_id, andoutput_dataset_id(#984). - Define types for
ApplyWorkflowRead"dump" attributes (#990). WARNING: reverted with #999.
- Change response of
- Internal changes:
- Move all routes definitions into
fractal_server/app/routes(#976). - Fix construction of
ApplyWorkflow.workflow_dump, within apply endpoint (#968). - Fix construction of
ApplyWorkflowattributesinput_dataset_dumpandoutput_dataset_dump, within apply endpoint (#990). - Remove
asyncio.gather, in view of SQLAlchemy2 update (#1004).
- Move all routes definitions into
- Major endpoint changes:
- Database:
- Make foreign-keys of
ApplyWorkflow(project_id,workflow_id,input_dataset_id,output_dataset_id) optional (#927). - Add columns
input_dataset_dump,output_dataset_dumpanduser_emailtoApplyWorkflow(#927). - Add relations
Dataset.list_jobs_inputandDataset.list_jobs_output(#927). - Make
ApplyWorkflow.start_timestampnon-nullable (#927). - Remove
"cascade": "all, delete-orphan"fromProject.job_list(#927). - Add
Workflow.job_listrelation (#927). - Do not use
Enums as column types (e.g. forApplyWorkflow.status), but only for (de-)serialization (#974). - Set
pool_pre_pingoption toTrue, for asyncpg driver (#1037). - Add script for updating DB from 1.4.0 to 1.4.1 (#1010)
- Fix missing try/except in sync session (#1020).
- Make foreign-keys of
- App:
- Skip creation of first-superuser when one superuser already exists (#1006).
- Dependencies:
- Update sqlalchemy to version
>=2.0.23,<2.1(#1044). - Update sqlmodel to version 0.0.12 (#1044).
- Upgrade asyncpg to version 0.29.0 (#1036).
- Update sqlalchemy to version
- Runner:
- Refresh DB objects within
submit_workflow(#927).
- Refresh DB objects within
- Testing:
- Add
await db_engine.dispose()indb_create_tablesfixture (#1047). - Set
debug=Falseinevent_loopfixture (#1044). - Improve
test_full_workflow.py(#971). - Update
pytest-asyncioto v0.21 (#1008). - Fix CI issue related to event loop and asyncpg (#1012).
- Add GitHub Action testing database migrations (#1010).
- Use greenlet v3 in
poetry.lock(#1044).
- Add
- Documentation:
- Add OAuth2 example endpoints to Web API page (#1034, #1038).
- Development:
- Use poetry 1.7.1 (#1043).
1.3.14 (do not use!)¶
WARNING: This version introduces a change that is then reverted in 1.4.0, namely it sets the
ApplyWorkflow.statustype toEnum, when used with PostgreSQL. It is recommended to not use it, and upgrade to 1.4.0 directly.
- Make
Dataset.resource_listanordering_list, ordered byResource.id(#951). - Expose
redirect_urlfor OAuth clients (#953). - Expose JSON Schema for the
ManifestV1Pydantic model (#942). - Improve delete-resource endpoint (#943).
- Dependencies:
- Upgrade sqlmodel to 0.0.11 (#949).
- Testing:
- Fix bug in local tests with Docker/SLURM (#948).
1.3.13¶
- Configure sqlite WAL to avoid "database is locked" errors (#860).
- Dependencies:
- Add
sqlalchemy[asyncio]extra, and do not directly requiregreenlet(#895). - Fix
cloudpickle-version definition inpyproject.toml(#937). - Remove obsolete
sqlalchemy_utilsdependency (#939).
- Add
- Testing:
- Use ubuntu-22 for GitHub CI (#909).
- Run GitHub CI both with SQLite and Postgres (#915).
- Disable
postgresservice in GitHub action when running tests with SQLite (#931). - Make
test_commands.pytests stateless, also when running with Postgres (#917).
- Documentation:
- Add information about minimal supported SQLite version (#916).
1.3.12¶
- Project creation:
- Do not automatically create a dataset upon project creation (#897).
- Remove
ProjectCreate.default_dataset_nameattribute (#897).
- Dataset history:
- Create a new (non-nullable) history column in
Datasettable (#898, #901). - Deprecate history handling in
/project/{project_id}/job/{job_id}endpoint (#898). - Deprecate
HISTORY_LEGACY(#898).
- Create a new (non-nullable) history column in
- Testing:
- Remove obsolete fixture
slurm_config(#903).
- Remove obsolete fixture
1.3.11¶
This is mainly a bugfix release for the PermissionError issue.
- Fix
PermissionErrors in parallel-task metadata aggregation for the SLURM backend (#893). - Documentation:
- Bump
mkdocs-render-swagger-pluginto 0.1.0 (#889).
- Bump
- Testing:
- Fix
poetry installcommand andpoetryversion in GitHub CI (#889).
- Fix
1.3.10¶
Warning: updating to this version requires changes to the configuration variable
- Updates to SLURM interface:
- Remove
sudo-requiringlscalls fromFractalFileWaitThread.check(#885); - Change default of
FRACTAL_SLURM_POLL_INTERVALto 5 seconds (#885); - Rename
FRACTAL_SLURM_OUTPUT_FILE_GRACE_TIMEconfiguration variables intoFRACTAL_SLURM_ERROR_HANDLING_INTERVAL(#885); - Remove
FRACTAL_SLURM_KILLWAIT_INTERVALvariable and corresponding logic (#885); - Remove
_multiple_paths_exist_as_userhelper function (#885); - Review type hints and default values of SLURM-related configuration variables (#885).
- Remove
- Dependencies:
- Update
fastapito version^0.103.0(#877); - Update
fastapi-usersto version^12.1.0(#877).
- Update
1.3.9¶
- Make updated-metadata collection robust for metadiff files consisting of a single
nullvalue (#879). - Automate procedure for publishing package to PyPI (#881).
1.3.8¶
- Backend runner:
- Add aggregation logic for parallel-task updated metadata (#852);
- Make updated-metadata collection robust for missing files (#852, #863).
- Database interface:
- API:
- Prevent user from bypassing workflow-name constraint via the PATCH endpoint (#867).
- Handle error upon task collection, when tasks exist in the database but not on-disk (#874).
- Add
_check_project_existshelper function (#872).
- Configuration variables:
- Remove
DEPLOYMENT_TYPEvariable and updatealiveendpoint (#875); - Introduce
Settings.check_dbmethod, and call it during inline/offline migrations (#855); - Introduce
Settings.check_runnermethod (#875); - Fail if
FRACTAL_BACKEND_RUNNERis"local"andFRACTAL_LOCAL_CONFIG_FILEis set but missing on-disk (#875); - Clean up
Settings.checkmethod and improve its coverage (#875);
- Remove
- Package, repository, documentation:
- Change
fractal_server.commonfrom being a git-submodule to being a regular folder (#859). - Pin documentation dependencies (#865).
- Split
app/models/project.pyinto two modules for dataset and project (#871). - Revamp documentation on database interface and on the corresponding configuration variables (#855).
- Change
1.3.7¶
- Oauth2-related updates (#822):
- Update configuration of OAuth2 clients, to support OIDC/GitHub/Google;
- Merge
SQLModelBaseOAuthAccountandOAuthAccountmodels; - Update
UserOAuth.oauth_accountsrelationship and fixlist_usersendpoint accordingly; - Introduce dummy
UserManager.on_after_loginmethod; - Rename
OAuthClientintoOAuthClientConfig; - Revamp users-related parts of documentation.
1.3.6¶
- Update
output_dataset.metaalso when workflow execution fails (#843). - Improve error message for unknown errors in job execution (#843).
- Fix log message incorrectly marked as "error" (#846).
1.3.5¶
- Review structure of dataset history (#803):
- Re-define structure for
historyproperty ofDataset.meta; - Introduce
"api/v1/project/{project_id}/dataset/{dataset_id}/status/"endpoint; - Introduce
"api/v1/project/{project_id}/dataset/{dataset_id}/export_history/"endpoint; - Move legacy history to
Dataset.meta["HISTORY_LEGACY"].
- Re-define structure for
- Make
first_task_indexandlast_task_indexproperties ofApplyWorkflowrequired (#803). - Add
docs_infoanddocs_linkto Task model (#814) - Accept
TaskUpdate.version=Nonein task-patch endpoint (#818). - Store a copy of the
Workflowinto the optional columnApplyWorkflow.workflow_dumpat the time of submission (#804, #834). - Prevent execution of multiple jobs with the same output dataset (#801).
- Transform non-absolute
FRACTAL_TASKS_DIRinto absolute paths, relative to the current working directory (#825). - Error handling:
- Raise an appropriate error if a task command is not executable (#800).
- Improve handling of errors raised in
get_slurm_config(#800).
- Documentation:
- Clarify documentation about
SlurmConfig(#798). - Update documentation configuration and GitHub actions (#811).
- Clarify documentation about
- Tests:
- Move
tests/test_common.pyintofractal-commonrepository (#808). - Switch to
docker composev2 and unpinpyyamlversion (#816).
- Move
1.3.4¶
- Support execution of a workflow subset (#784).
- Fix internal server error for invalid
task_idincreate_workflowtaskendpoint (#782). - Improve logging in background task collection (#776).
- Handle failures in
submit_workflowwithout raising errors (#787). - Simplify internal function for execution of a list of task (#780).
- Exclude
common/testsand other git-related files from build (#795). - Remove development dependencies
Pillowandpytest-mock(#795). - Remove obsolete folders from
tests/datafolder (#795).
1.3.3¶
- Pin Pydantic to v1 (#779).
1.3.2¶
- Add sqlalchemy naming convention for DB constraints, and add
render_as_batch=Truetodo_run_migrations(#757). - Fix bug in job-stop endpoint, due to missing default for
FractalSlurmExecutor.wait_thread.shutdown_file(#768, #769). - Fix bug upon inserting a task with
meta=Noneinto a Workflow (#772).
1.3.1¶
- Fix return value of stop-job endpoint (#764).
- Expose new GET
WorkflowTaskendpoint (#762). - Clean up API modules (#762):
- Split workflow/workflowtask modules;
- Split tasks/task-collection modules.
1.3.0¶
- Refactor user model:
- Switch from UUID4 to int for IDs (#660, #684).
- Fix many-to-many relationship between users and project (#660).
- Rename
Project.user_member_listintoProject.user_list(#660). - Add
usernamecolumn (#704).
- Update endpoints (see also 1.2->1.3 upgrade info in the documentation):
- Review endpoint URLs (#669).
- Remove foreign keys from payloads (#669).
- Update
Taskmodels, task collection and task-related endpoints:- Add
versionandownercolumns toTaskmodel (#704). - Set
Task.versionduring task collection (#719). - Set
Task.owneras part of create-task endpoint (#704). - For custom tasks, prepend
ownerto user-providedsource(#725). - Remove
default_argsfromTasksmodel and from manifest tasks (#707). - Add
args_schemaandargs_schema_versiontoTaskmodel (#707). - Expose
args_schemaandargs_schema_versionin task POST/PATCH endpoints (#749). - Make
Task.sourcetask-specific rather than package-specific (#719). - Make
Task.sourceunique (#725). - Update
_TaskCollectPipmethods, attributes and properties (#719). - Remove private/public options for task collection (#704).
- Improve error message for missing package manifest (#704).
- Improve behavior when task-collection folder already exists (#704).
- Expose
pinned_package_versionfor tasks collection (#744). - Restrict Task editing to superusers and task owners (#733).
- Implement
delete_taskendpoint (#745).
- Add
- Update
WorkflowandWorkflowTaskendpoints:- Always merge new
WorkflowTask.argswith defaults fromTask.args_schema, inupdate_workflowtaskendpoint (#759). - Remove
WorkflowTask.overridden_metaproperty and on-the-fly overriding ofmeta(#752). - Add warning when exporting workflows which include custom tasks (#728).
- When importing a workflow, only use tasks'
sourcevalues, instead of(source,name)pairs (#719).
- Always merge new
- Job execution:
- Add
FractalSlurmExecutor.shutdownand corresponding endpoint (#631, #691, #696). - In
FractalSlurmExecutor, makeworking_dir*attributes required (#679). - Remove
ApplyWorkflow.overwrite_inputcolumn (#684, #694). - Make
output_dataset_ida required argument of apply-workflow endpoint (#681). - Improve error message related to out-of-space disk (#699).
- Include timestamp in job working directory, to avoid name clashes (#756).
- Add
- Other updates to endpoints and database:
- Add
ApplyWorkflow.end_timestampcolumn (#687, #684). - Prevent deletion of a
Workflow/Datasetin relationship with existingApplyWorkflow(#703). - Add project-name uniqueness constraint in project-edit endpoint (#689).
- Add
- Other updates to internal logic:
- Drop
WorkflowTask.argumentsproperty andWorkflowTask.assemble_argsmethod (#742). - Add test for collection of tasks packages with tasks in a subpackage (#743).
- Expose
FRACTAL_CORS_ALLOW_ORIGINenvironment variable (#688). - Expose
FRACTAL_DEFAULT_ADMIN_USERNAMEenvironment variable (#751).
- Drop
- Package and repository:
- Remove
fastapi-users-db-sqlmodeldependency (#660). - Make coverage measure more accurate (#676) and improve coverage (#678).
- Require pydantic version to be
>=1.10.8(#711, #713). - Include multiple
fractal-commonupdates (#705, #719). - Add test equivalent to
alembic check(#722). - Update
poetry.lockto address security alerts (#723). - Remove
sqlmodelfromfractal-common, and declare database models with multiple inheritance (#710). - Make email generation more robust in
MockCurrentUser(#730). - Update
poetry.locktocryptography=41, to address security alert (#739). - Add
greenletas a direct dependency (#748). - Removed tests for
IntegrityError(#754).
- Remove
1.2.5¶
- Fix bug in task collection when using sqlite (#664, #673).
- Fix bug in task collection from local package, where package extras were not considered (#671).
- Improve error handling in workflow-apply endpoint (#665).
- Fix a bug upon project removal in the presence of project-related jobs (#666). Note: this removes the
ApplyWorkflow.Projectattribute.
1.2.4¶
- Review setup for database URLs, especially to allow using UNIX-socket connections for postgresql (#657).
1.2.3¶
- Fix bug that was keeping multiple database conection open (#649).
1.2.2¶
- Fix bug related to
user_local_exportsin SLURM-backend configuration (#642).
1.2.1¶
- Fix bug upon creation of first user when using multiple workers (#632).
- Allow both ports 5173 and 4173 as CORS origins (#637).
1.2.0¶
- Drop
project.project_dirand replace it withuser.cache_dir(#601). - Update SLURM backend (#582, #612, #614); this includes (1) combining several tasks in a single SLURM job, and (2) offering more granular sources for SLURM configuration options.
- Expose local user exports in SLURM configuration file (#625).
- Make local backend rely on custom
FractalThreadPoolExecutor, whereparallel_tasks_per_jobcan affect parallelism (#626). - Review logging configuration (#619, #623).
- Update to fastapi
0.95(#587). - Minor improvements in dataset-edit endpoint (#593) and tests (#589).
- Include test of non-python task (#594).
- Move dummy tasks from package to tests (#601).
- Remove deprecated parsl backend (#607).
- Improve error handling in workflow-import endpoint (#595).
- Also show logs for successful workflow execution (#635).
1.1.1¶
- Include
reordered_workflowtask_idsin workflow-edit endpoint payload, to reorder the task list of a workflow (#585).
1.1.0¶
- Align with new tasks interface in
fractal-tasks-core>=0.8.0, and removeglob_patterncolumn fromresourcedatabase table (#544). - Drop python 3.8 support (#527).
- Improve validation of API request payloads (#545).
- Improve request validation in project-creation endpoint (#537).
- Update the endpoint to patch a
Task(#526). - Add new project-update endpoint, and relax constraints on
project_dirin new-project endpoint (#563). - Update
DatasetUpdateschema (#558 and #565). - Fix redundant task-error logs in slurm backend (#552).
- Improve handling of task-collection errors (#559).
- If
FRACTAL_BACKEND_RUNNER=slurm, include some configuration checks at server startup (#529). - Fail if
FRACTAL_SLURM_WORKER_PYTHONhas different versions offractal-serverorcloudpickle(#533).
1.0.8¶
- Fix handling of parallel-tasks errors in
FractalSlurmExecutor(#497). - Add test for custom tasks (#500).
- Improve formatting of job logs (#503).
- Improve error handling in workflow-execution server endpoint (#515).
- Update
_TaskBaseschema from fractal-common (#517).
1.0.7¶
- Update endpoints to import/export a workflow (#495).
1.0.6¶
- Add new endpoints to import/export a workflow (#490).
1.0.5¶
- Separate workflow-execution folder into two (server- and user-owned) folders, to avoid permission issues (#475).
- Explicitly pin sqlalchemy to v1 (#480).
1.0.4¶
- Add new POST endpoint to create new Task (#486).
1.0.3¶
Missing due to releasing error.
1.0.2¶
- Add
FRACTAL_RUNNER_MAX_TASKS_PER_WORKFLOWconfiguration variable (#469).
1.0.1¶
- Fix bug with environment variable names (#468).
1.0.0¶
- First release listed in CHANGELOG.