Would it be possible to add Apptainer (formerly Singularity) as a supported container runtime alongside Docker? This would make floatCSEP usable on HPC clusters, where Docker is typically not available due to its daemon requiring root privileges.
Motivation
Many scientific computing platforms — including national HPC facilities — explicitly prohibit Docker but support Apptainer/Singularity, which is designed for unprivileged, multi-user environments. Researchers who want to run floatCSEP experiments on these systems currently have no path forward for TimeDependentModel runs that rely on containerized forecast models.
Why this looks feasible
The container runtime is already cleanly abstracted behind EnvironmentManager in floatcsep/infrastructure/environments.py. Adding Apptainer support would require:
- A new ApptainerManager class implementing the existing four-method interface (create_environment, env_exists, run_command, install_dependencies)
- create_environment() builds a SIF file from the model's Dockerfile via apptainer build model.sif docker-daemon://image or apptainer build model.sif.
- run_command() invokes apptainer exec --bind <input_dir>:/app/input,<forecast_dir>:/app/forecasts model.sif
- EnvironmentFactory.get_env() recognises build: apptainer (or singularity) in the model config
Would it be possible to add Apptainer (formerly Singularity) as a supported container runtime alongside Docker? This would make floatCSEP usable on HPC clusters, where Docker is typically not available due to its daemon requiring root privileges.
Motivation
Many scientific computing platforms — including national HPC facilities — explicitly prohibit Docker but support Apptainer/Singularity, which is designed for unprivileged, multi-user environments. Researchers who want to run floatCSEP experiments on these systems currently have no path forward for TimeDependentModel runs that rely on containerized forecast models.
Why this looks feasible
The container runtime is already cleanly abstracted behind EnvironmentManager in floatcsep/infrastructure/environments.py. Adding Apptainer support would require: