Skip to content

FSL development and release management procedures

This section hosts information and documentation regarding software development and management procedures implemented for the FMRIB Software Library (FSL).

Quick summary

FSL is organised into a number of git repositories hosted at https://git.fmrib.ox.ac.uk.

More detailed information on a range of topics can be found in the following sub-pages:

FSL releases

Public and internal FSL release are defined by a set of conda environment.yml files, one for each supported platform. Each environment.yml file contains a list of the packages which are included in the FSL release.

FSL releases are described by a manifest.json file, which is an index of all available environment.yml files, and which contains all of the information needed to install a particular FSL release.

The fsl/conda/manifest repository is where new FSL releases, both public and internal, are created. The environment.yml and manifest.json files for a new release are automatically generated from information stored in the fsl-release.yml file in that repository.

The manifest.json and environment.yml files for public and internal releases are currently published to https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/releases/.

Full FSL installations

The standard FSL installation procedure is similar on all platforms, and involves downloading and running a shell script called getfsl.sh. This script does the following:

  1. Downloads a micromamba installer, and installs it to ${FSLDIR} - the default installation location is ~/fsl/.

  2. Installs a Python interpreter into ${FSLDIR}.

  3. Downloads and runs a Python script called fslinstaller.py.

The fslinstaller.py script then performs the following tasks:

  1. Downloads a YAML environment.yml file from https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/releases/, containing a conda environment specification for the latest FSL version (or the version requested by the user).

  2. Installs the FSL environment by running: ${FSLDIR}/bin/micromamba env update -p ${FSLDIR} -f environment.yml

  3. Modifies the user's shell configuration so that FSL is accessible in their shell environment.

The getfsl.sh script is automatically generated by a CI / CD job in the fsl/conda/manifest repository. The fslinstaller.py script is maintained at the fsl/conda/installer Gitlab repository.

Partial FSL installations

Users may choose to install specific FSL packages by installing them directly from the FSL conda channel into their own conda environment. More details on this can be found in the installation section.

FSL conda packages

All FSL projects and their dependencies are published as conda packages. Most FSL conda packages are published to an internally maintained channel, but some packages are published to the conda-forge channel at https://anaconda.org/conda-forge/.

All FSL projects, and any dependencies which are not available on conda-forge, are built according to a conda recipe, which describes how the project can be built as a conda package. All FSL conda recipes are hosted as git repositories on the FMRIB gitlab server, under the fsl/conda/ group.

FSL conda packages are built automatically using Gitlab CI - the CI infrastructure for automatically building conda packages is hosted in the fsl/conda/fsl-ci-rules repository.

Public, development, and internal channels

FSL projects are published to one of three internally managed conda channels:

  • The public channel contains stable packages for most FSL projects. Every time a new tag is added to a project repository, a stable conda package is built and published to the public channel.

  • The development channel may contain unstable/pre-release packages for some FSL projects. These packages may be built from any branch or commit of the project repository. This channel is intended for use by developers who wish to publish experimental changes for testing, evaluation, and/or feedback.

  • The internal channel contains stable packages for FSL projects which are not part of official FSL releases, and are only part of internal releases.

These channels are currently hosted online at the following URLs:

Note that once a package has been published to the public or internal channels, it cannot be removed unless there are exceptional circumstances.