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.
fsl/conda/manifest
: Metadata for managing FSL releasesfsl/conda/manifest-rules
: CI configuration used by thefsl/conda/manifest
repositoryfsl/conda/installer
: Home of thefslinstaller.py
script, for installing FSLfsl/conda/fsl-ci-rules
CI rules for automated building and publishing of FSL conda packagesfsl/<project>
: Source code repository for FSL project<project>
(e.g.fsl/avwutils
)fsl/conda/fsl-<project>
: Conda recipe repository for FSL project<project>
(e.g.fsl/conda/fsl-avwutils
)
More detailed information on a range of topics can be found in the following sub-pages:
- FSL releases: Details on workflows and processes for FSL releases.
- FSL project releases: Details on development and release workflows and processes for individual FSL projects.
- FSL conda recipes: Details on creating FSL conda package recipes, and on building FSL conda packages.
- CI infrastructure: Details on the AWS/CI infrastructure.
- The FSL build system: Details and procedures regarding the build system.
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:
-
Downloads a micromamba installer, and installs it to
${FSLDIR}
- the default installation location is~/fsl/
. -
Installs a Python interpreter into
${FSLDIR}
. -
Downloads and runs a Python script called
fslinstaller.py
.
The fslinstaller.py
script then performs the following tasks:
-
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). -
Installs the FSL environment by running:
${FSLDIR}/bin/micromamba env update -p ${FSLDIR} -f environment.yml
-
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:
- https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/public/
- https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/development/
- https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/internal/ (requires password)
Note that once a package has been published to the public or internal channels, it cannot be removed unless there are exceptional circumstances.