Switch to monorepo
Our current practice of splitting components over multiple repositories, e.g. Core, Fatras, Framework, has lead to undiscovered breakage and impedance missmatch during development. E.g. changes in the Core lead to performance regressions that were discovered only much later in the framework. Git submodule handling is also hard to understand, especially for beginners, and breaks easily.
Switching to a monorepo with optional build components should allow consistent development and testing without the current delay between Core and Framework. Optional component handling is already available in the Core and can be easily reused for this.
At the end, the directory structure of the merged repository should look as follows:
# as-before
Core/
include/
...
src/
...
# as-before (could also be renamed to CorePlugins to clarify the relation to Core)
Plugins/
DD4hep/
...
# previously handle as special, but can be treated as just another plugin
Legacy/
...
...
# cleaned-up content from acts-fatras/Core
Fatras/
include/
...
src/
...
# cleaned-up content from acts-framework
Standalone/
Algorithms/
...
Detectors/
...
Framework/
...
Io/
...
# formerly 'Examples'
Run/
...
Tests/
Benchmarks/
...
Examples/
...
# integration tests, can use multiple components
IntegrationTests/
...
# unit-tests, should always use only a single component
UnitTests/
Core/
...
Plugins/
...
Fatras/
...
Framework/
...
# as-before
docs/
...
# 3rd party libraries that are usually not available via the system
# package manager; shipped as copies and built as part of the regular
# process. use copies instead of submodules to avoid the headache.
# keep this limited to small libraries/ few files by policy.
thirdparty/
dfelibs/
...
nlohmann_json/
...
Target names can use the current style to provide a bit of namespacing, i.e.
# core
ActsCore
# core plugins
# TODO this should be named ActsPlugin... for consistency
Acts...Plugin
# fatras
ActsFatras
# Test framework components
ActsFramework...
# Standalone tools (formerly part of acts-framework)
ActsGen...
ActsSim...
ActsRec...
# tests
ActsBenchmark...
ActsIntegrationTest...
ActsUnitTest...
This is a major change and will and should not happen at once, i.e. within one of the current weekly/biweekly release cycle. There is also some clean-up in progress for both Fatras and the Framework. This should finish before moving the code back to the main repository.
Propose schedule/ order:
-
Prepare main repository
-
Verify CMake tools are sufficient (Existing tools
ActsComponentsHelpers.cmake
can be used directly for additional components) -
Make
Legacy
a regular plugin (#688 (closed), !750 (merged)) - Split integration and unit tests (#689 (closed), !749 (merged))
-
Move nlohman json library to
thirdparty
(!733 (merged)) -
(to be decided) Rename plugin targets to
ActsPlugin...
-
Verify CMake tools are sufficient (Existing tools
-
Add Gitlab labels to tag issues for specific components (Available as group labels
Component - ...
) -
Finish Fatras clean-upClean up Fatras after import into Core repo-
acts-fatras#1now tracked as #693 (closed) - acts-fatras#2
-
acts-fatras#3now tracked as #694 (closed) -
acts-fatras#4now tracked as #695 (closed) -
acts-fatras#5now tracked as #696 (closed) -
acts-fatras#6now tracked as #697 (closed) -
acts-fatras#7now tracked as #698 (closed)
-
- Move Fatras component to main repo (!751 (merged))
- Finish Framework clean-up
- Move Framework components to main repo