Development Environment#

Warning

These instructions have some inaccuracies on Windows.

Get the code and Mamba#

Clone the repo#

Fork and clone the repository in your preferred manner. Refer to GitHub documentation for how to do so.

Install micromamba#

Setting the development environment requires conda, mamba, or micromamba. Since some commands are automated with micromamba, and to avoid any runtime linking issue, it is best to work with micromamba.

Refer to the installation page for how to install micromamba or mamba.

Running commands manually#

Note

The CI files in .github/workflow provide an alternative way of developing Mamba.

Install development dependencies#

micromamba create -n mamba -c conda-forge -f dev/environment-dev.yml
micromamba activate mamba

Compile libmamba and other artifacts#

libmamba is built using CMake. Typically during development, we build everything dynamically using dependencies from Conda-Forge.

The first step is to configure the build options. A recommended set is already provided as CMake Preset, but feel free to use any variations.

Note

If you do choose to use the provided CMake Preset, you may need to install ccache as an extra requirement as specified in dev/environment-dev-extra.yml.

Note

All cmake commands listed below use bash multi-line syntax. On Windows, replace \ trailing character with ^.

cmake -B build/ -G Ninja --preset mamba-unix-shared-debug-dev

Compilation can then be launched with:

cmake --build build/ --parallel

libmamba tests#

The tests for libmamba are written in C++.

./build/libmamba/tests/test_libmamba

micromamba integration tests#

Many micromamba integration tests are written through a pytest Python wrapper. The environment variable TEST_MAMBA_EXE controls which executable is being tested.

export TEST_MAMBA_EXE="${PWD}/build/micromamba/micromamba"
python -m pytest micromamba/tests

libmambapy tests#

To run the libmambapy tests, the Python package needs to be properly installed first.

Warning

This needs to be done every time libmamba changes.

cmake --install build/ --prefix "${CONDA_PREFIX}"

Then the Python bindings can be installed

python -m pip install --no-deps --no-build-isolation libmambapy/

Finally the tests can be run:

python -m pytest libmambapy/tests

Code Formatting#

Code formatting is done using Pre-Commit hooks. Whichever way you decided to install development dependencies, we recommend installing Pre-Commit hooks with

pre-commit install

Alternatively, the checks can be run manually

pre-commit run --all-files