Prototype OMIX monorepo for modular analysis modules with shared starter environments.
This repo is organized so each analysis module can be developed, tested, and released independently while sharing a small set of cached starter environments.
OMIX_Test/
├── core/ # Shared scientific R utilities used by modules
├── starter-environments/ # Shared Docker/renv environments
├── modules/ # Independent analysis modules
├── scripts/ # Repo sync and governance automation
├── tests/ # Repo-level contract tests
└── .github/workflows/ # CI for module checks and starter environments
| Environment | Purpose | Example modules |
|---|---|---|
r-base |
Base R, renv, common system libraries | shared utility modules |
r-visualization |
Plotting and visualization packages | volcano, heatmap, PCA, Venn, tSNE/UMAP, limma stats |
r-pathway |
Pathway and gene-set packages | GSVA, GSEA, L2P single, L2P multi |
r-singlecell |
Single-cell packages | future single-cell modules |
Starter environments are intended to be built once, cached in GHCR, and referenced by module runtime builds.
Each module owns its own scientific code, tests, schemas, and runtime entrypoint. The starter environment is declared in module.yml.
Current starter modules:
volcanoheatmappcapca3dvenn_diagramtsne_umapstats_limmapathway_gsvapathway_gseapathway_l2p_singlepathway_l2p_multi
The first platform-ready runtime examples are:
modules/volcano/runtime/modules/pathway_l2p_single/runtime/modules/pathway_l2p_multi/runtime/
All other modules are placeholders until these first examples are validated in Code Ocean.
Platform-ready modules keep their runnable payload under runtime/. OMIX is intended to support multiple execution contexts, including Code Ocean GUI capsules, interactive R work, shell execution, and HPC containers. For code-oriented runs, start from the module README:
modules/volcano/README.mdmodules/pathway_l2p_single/README.mdmodules/pathway_l2p_multi/README.md
If you do not already have the repository locally, clone it first:
git clone https://github.com/NIDAP-Community/OMIX_Test.git
cd OMIX_TestEach module README documents three non-CO run modes:
- Interactive R or notebook work, such as Positron, R Markdown, or Quarto.
- Shell execution with
bash run.sh. - HPC/container execution with Singularity or Apptainer.
For bare R or notebook use, install the module's R dependencies before running examples. Platform-ready modules currently declare this setup in modules/<module>/runtime/environment/postInstall.sh. Shared renv.lock files live under starter-environments/, but there is not yet a populated per-module renv.lock inside each runtime/ folder.
The common shell smoke-test pattern is:
cd modules/<module>/runtime
bash tests/test_run_small.shThe module README gives exact commands for example inputs and points to runtime/docs/usage.md for fuller runtime details.
Each runtime bundle can be layout-projected into a standalone Code Ocean root. The OMIX monorepo remains the source of truth, and reverse sync is guarded so Code Ocean-side edits return only to the matching module runtime directory.
See:
docs/code-ocean-sync.mdfor the step-by-step sync workflowdocs/github-sync-flow.mmdfor the high-level local-machine vs Code Ocean GitHub sync flowdocs/code-ocean-sync-flow.mmdfor the Mermaid/Lucidchart diagram
Every module should contain:
modules/<module>/
├── R/
├── tests/
├── schemas/
├── module.yml
├── README.md
└── CHANGELOG.md
See docs/module-contract.md for the expected manifest fields. The executable entrypoint is declared in module.yml; platform-ready modules usually point to runtime/run.sh.
Each module declares a SemVer version: in module.yml. CI validates the version format and checks that release-impacting module changes update both module.yml and the module's CHANGELOG.md.
Release-impacting changes include files under R/, code/, runtime/, schemas/, and module.yml. Docs-only and tests-only changes do not require a version bump.
Use namespaced tags for monorepo module releases, for example volcano/v0.1.0.
Validate the current scaffold with:
Rscript tests/test-module-contract.RRepo governance helpers live under scripts/lib/, keeping core/ reserved for scientific/runtime package code.
For PR-style versioning checks, compare the current branch against the intended base ref:
Rscript scripts/check_module_versioning.R origin/main- Edit one module under
modules/<module>/. - Commit and push.
- CI validates the module contract and reports changed modules.
- Module-specific build/test jobs can build only the changed runtime.
- Starter environments rebuild only when files under
starter-environments/change.