Consolidate remote modules into hierarchical category repos
Reduce ~60 remote module repos to ~5 domain-based category repos plus ~13 independent repos. New itk_fetch_module_group() CMake function enables hierarchical sub-groups. Proof of concept (ITKRemoteAnalysis, 8 modules, 77/77 tests pass) in PR #6061. Supersedes #5134.
Problem
ITK has ~60 remote module repositories, each with its own git repo, CI, Python packaging, and boilerplate:
Discussed in #6034 where @blowekamp, @dzenanz, and @hjmjohnson agreed consolidation is needed during the 6.0 beta phase.
Proposal
Group modules into 5 category repos by domain (per @thewtex and @dzenanz: no "Kitware" category, no standalone "Microscopy" — group by domain):
| Category Repo |
Candidate Modules |
Count |
| ITKRemoteIO |
AnalyzeObjectLabelMap, IOFDF, IOMeshMZ3, IOMeshSTL, IOMeshSWC, IOScanco, IOTransformDCMTK, MGHIO, IOOpenSlide |
9 |
| ITKRemoteFiltering |
AnisotropicDiffusionLBR, FastBilateral, GenericLabelInterpolator, HigherOrderAccurateGradient, LabelErodeDilate, MorphologicalContourInterpolation, MultipleImageIterator, ParabolicMorphology, PhaseSymmetry, RLEImage, SimpleITKFilters, SmoothingRecursiveYvvGaussianFilter, SplitComponents |
13 |
| ITKRemoteMesh |
BSplineGradient, Cuberille, FPFH, MeshNoise, MeshToPolyData, PrincipalComponentsAnalysis, SubdivisionQuadEdgeMeshFilter |
7 |
| ITKRemoteAnalysis |
BoneEnhancement, BoneMorphometry, HASI, IsotropicWavelets, PerformanceBenchmarking, RANSAC, TextureFeatures, Thickness3D, (+ StructuralSimilarity from #6034) |
8-9 |
| ITKRemoteRegistration |
FixedPointInverseDisplacementField, GrowCut, LesionSizingToolkit, MinimalPathExtraction, Montage, PolarTransform, SkullStrip, Strain, TwoProjectionRegistration, VariationalRegistration |
10 |
Stay independent (large, complex, or external dependencies):
- RTK, CudaCommon (RTKConsortium)
- TubeTK (large, many examples/applications — @dzenanz)
- Ultrasound (complex multi-dependency, serves as blueprint — @dzenanz)
- WebAssemblyInterface (wasm toolchain)
- AdaptiveDenoising (ntustison — external maintainer)
- Cleaver (SCIInstitute — external dependencies, defer — @dzenanz)
- SCIFIO, Shape, TractographyTRX (external orgs)
- SphinxExamples (documentation)
- VkFFTBackend (GPU backend)
- TotalVariation, IOOMEZarrNGFF (external dependencies, defer — @dzenanz)
- BioCell (legacy, may deprecate)
CMake mechanism
New ITKGroup_Remote_<Category> sub-group options, all OFF by default:
ITKGroup_Remote = OFF # master switch (existing)
ITKGroup_Remote_IO = OFF # NEW: fetches ITKRemoteIO repo when ON
ITKGroup_Remote_Filtering = OFF
ITKGroup_Remote_Mesh = OFF
ITKGroup_Remote_Analysis = OFF
ITKGroup_Remote_Registration = OFF
- Sub-group OFF: repo not cloned, modules not available
- Sub-group ON: repo cloned, all contained modules individually toggleable via
Module_<name>
ITKGroup_Remote=ON: all sub-groups enabled (backward compat)
- Modules with
EXCLUDE_FROM_DEFAULT need explicit Module_<name>=ON even when sub-group is ON
~160 lines of CMake changes across 3 files. New itk_fetch_module_group() function. Existing itk_fetch_module() untouched (independent repos keep working).
Python packaging
Per-category wheels (itk-remote-io, itk-remote-filtering, etc.) replace individual itk-<name> packages. Old packages get a deprecation release pointing to the new category package.
New module workflow
New filters added as a subdirectory PR to the appropriate category repo. No new git repo, no new CI, no new PyPI package setup.
Example: SSIM (PR #6034) goes into ITKRemoteAnalysis as StructuralSimilarity/ subdirectory.
Implementation phases
Decisions
| Question |
Decision |
Source |
| Category groupings |
5 domain categories (IO, Filtering, Mesh, Analysis, Registration) |
@thewtex, @dzenanz |
"Kitware" category |
No — merge by domain |
@thewtex, @dzenanz |
Microscopy category |
No — IOOpenSlide goes to IO |
@dzenanz |
| KitwareMedical modules |
Merge into domain categories |
@thewtex, @dzenanz |
| TubeTK |
Stay independent (large, many examples) |
@dzenanz |
| Ultrasound |
Stay independent, serves as blueprint |
@dzenanz |
| External-dep modules |
Defer (TotalVariation, Cleaver, IOOMEZarrNGFF) |
@dzenanz |
| EXCLUDE_FROM_DEFAULT |
Respected: need explicit Module_<name>=ON |
Confirmed by prototype |
| Backward compat |
ITKGroup_Remote=ON enables all sub-groups |
Confirmed by prototype |
| Supersedes |
#5134 |
@dzenanz |
| AdaptiveDenoising (ntustison) |
TBD — discuss with maintainer |
|
| PyPI: individual to category wheels |
TBD |
|
| BioCell |
TBD — may deprecate |
|
References
Consolidate remote modules into hierarchical category repos
Reduce ~60 remote module repos to ~5 domain-based category repos plus ~13 independent repos. New
itk_fetch_module_group()CMake function enables hierarchical sub-groups. Proof of concept (ITKRemoteAnalysis, 8 modules, 77/77 tests pass) in PR #6061. Supersedes #5134.Problem
ITK has ~60 remote module repositories, each with its own git repo, CI, Python packaging, and boilerplate:
Discussed in #6034 where @blowekamp, @dzenanz, and @hjmjohnson agreed consolidation is needed during the 6.0 beta phase.
Proposal
Group modules into 5 category repos by domain (per @thewtex and @dzenanz: no "Kitware" category, no standalone "Microscopy" — group by domain):
Stay independent (large, complex, or external dependencies):
CMake mechanism
New
ITKGroup_Remote_<Category>sub-group options, all OFF by default:Module_<name>ITKGroup_Remote=ON: all sub-groups enabled (backward compat)EXCLUDE_FROM_DEFAULTneed explicitModule_<name>=ONeven when sub-group is ON~160 lines of CMake changes across 3 files. New
itk_fetch_module_group()function. Existingitk_fetch_module()untouched (independent repos keep working).Python packaging
Per-category wheels (
itk-remote-io,itk-remote-filtering, etc.) replace individualitk-<name>packages. Old packages get a deprecation release pointing to the new category package.New module workflow
New filters added as a subdirectory PR to the appropriate category repo. No new git repo, no new CI, no new PyPI package setup.
Example: SSIM (PR #6034) goes into ITKRemoteAnalysis as
StructuralSimilarity/subdirectory.Implementation phases
itk_fetch_module_group()in WIP: Combine many remote to few remote module groups #6061Decisions
"Kitware" categoryMicroscopy categoryModule_<name>=ONITKGroup_Remote=ONenables all sub-groupsReferences
itk_fetch_module_group()and Analysis proof of concept