2. mx-bluesky repository structure#

Date: 2024-08-21

Status#

Accepted

Context#

Initially, we wanted to separate “application code” such as hyperion from “library code” generic over MX beamlines belonging in mx-bluesky. However, as these were developed together and also together with dodal, dependency management became impossible.

Decision#

We will stick to a monorepo repository structure as follows:

mx_bluesky/
├-src/
| └-mx_bluesky/
|   ├-common/               # Plan stubs, utilities, and other common code
|   ├-beamlines/
|   | ├-i03/
|   | ├-i04/
|   | └-i24/
|   |   └-serial/           # Plans for one beamline go in the respective module
|   └-hyperion/             # Plans for more than one beamline go in the top level
├-tests/
| ├-unit_tests/                             # Tests are separated into "unit_tests" and "system_tests"
| | └-{mirror of mx_bluesky structure}/     # Where the former refers to tests which can be run without
| ├-system_tests/                           # access to external services, and the latter might need
| | └-{mirror of mx_bluesky structure}/     # to talk to ISPyB, the DLS filesystem, etc.
| └-test_data/
└-docs/
  ├-developer/
  └-user/

To preserve some of the benefits we would have had from separate repositories, code from beamline or “application” modules (e.g. mx_bluesky.i24.serial or mx_bluesky.hyperion) may import from mx_bluesky.common but not the other way around - this should be enforced with a check in CI.