Skip to content

Repository layout

FedMS is a multi-repository project. Each fedms_* module is its own git repo with its own MR queue, its own CI pipeline, and its own issue tracker. Sites are also their own repos.

The GitLab group

Everything lives under the fedms GitLab group, organized into sub-groups:

Sub-group Contents
fedms/components/ The reusable building blocks.
fedms/components/recipes/ Optional Drupal recipes.
fedms/components/tests/ E2E test suites.
fedms/sites/ Tenant sites.
(top level) Documentation, support, gitlab-profile, helpdesk.

The complete project list

GitLab path Composer name Role
fedms/components/profile fedms/profile The install profile.
fedms/components/attachments fedms/attachment fedms_attachment module.
fedms/components/content fedms/content fedms_content module.
fedms/components/eca fedms/eca fedms_eca module + 10 ECA models.
fedms/components/federation fedms/federation fedms_federation module + permissions YAML.
fedms/components/locale fedms/locale fedms_locale module.
fedms/components/tasks fedms/task fedms_task module.
fedms/components/scripts fedms/scripts Install / config / export shell scripts.
fedms/components/recipe fedms/recipe Parent recipe scaffold.
fedms/components/recipes/attachment-recording fedms-recipe/attachment_recording Optional recipe.
fedms/components/recipes/send-email fedms-recipe/send_email Optional recipe.
fedms/components/recipes/zoom-video fedms-recipe/zoom_video Optional recipe.
fedms/components/tests/cypress fedms/cypress Cypress E2E (deprecated).
fedms/components/tests/playwright fedms/playwright Playwright E2E (active).
fedms/components/skill (Internal) FedMS-specific opencode skill.
fedms/sites/amplius-partners Amplius tenant site.
fedms/sites/demo Demo tenant site (full-feature test bed).
fedms/documentation This documentation site (mkdocs).
fedms/gitlab-profile The group's landing page.
fedms/support Public helpdesk issue queue.

Composer registry

All fedms/* and fedms-recipe/* packages are published to the group-level Composer registry at:

1
https://gitlab.lakedrops.com/api/v4/group/fedms/-/packages/composer/

Tenant sites add this URL to their composer.json as a repository.

A typical tenant site layout

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
amplius/                                    ← site repo (fedms/sites/amplius-partners)
├── AGENTS.md                               ← AI agent orientation
├── composer.json                           ← requires fedms/profile
├── composer.lock
├── .ahoy.yml                               ← Ahoy command tree
├── .lakedrops.yml                          ← L3D / docker4drupal config (PHP version, domains)
├── .gitlab-ci.yml                          ← includes fedms.gitlab-ci.yml from scripts component
├── docker-compose.yml                      ← local dev stack
├── recipes/                                ← site-level Drupal recipes
├── tests/
│   ├── cypress/                            ← deprecated
│   ├── playwright/                         ← active
│   ├── backstop/                           ← BackstopJS visual regression
│   ├── phpunit.xml.dist
│   ├── phpcs.files
│   └── phpstan.neon
├── vendor/                                 ← Composer (.gitignore'd)
│   └── fedms/scripts/                      ← install.sh, config.sh, ahoy.yml
├── mkdocs/                                 ← (the documentation repo is checked out here)
└── web/
    ├── profiles/contrib/fedms/             ← the install profile
    └── modules/contrib/
        ├── fedms_attachment/
        ├── fedms_content/
        ├── fedms_eca/                      ← config/optional/ holds the ECA models
        ├── fedms_federation/
        ├── fedms_locale/
        └── fedms_task/

Important: every directory under web/modules/contrib/fedms_* and web/profiles/contrib/fedms is its own git repo, checked out from its corresponding GitLab project. When you work on a module, you cd into the module's directory and operate on its repo, not the site's.

Per-module layout

Inside any web/modules/contrib/fedms_*/ directory:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
fedms_X/
├── composer.json                       ← Composer package metadata
├── fedms_X.info.yml                    ← Drupal module metadata
├── fedms_X.install                     ← Install / update hooks (if any)
├── fedms_X.module                      ← Procedural hooks (if any)
├── fedms_X.permissions.yml             ← Permission definitions
├── fedms_X.routing.yml                 ← Routes (if any)
├── fedms_X.services.yml                ← Service definitions
├── fedms_X.links.{action,menu,task,contextual}.yml  ← UI link definitions
├── phpstan.neon                        ← Module-specific static analysis config
├── config/
│   ├── install/                        ← Config installed on enable
│   └── optional/                       ← Config installed when deps are present
└── src/
    ├── Entity/
    ├── Form/
    ├── Hook/                           ← #[Hook]-attributed hook classes
    ├── Plugin/
    └── ...

The exact subdirectories vary per module. See the per-module pages:

Branching conventions

Across all FedMS repos:

Branch What it is
develop Active development. All MRs target this. Composer dev-* dependencies point here.
main / tagged releases Production-ready. Tagged releases come off main.
feature/<short-name> Feature branches that MR into develop.
fix/<short-name> Fix branches.
feature/advanced (Test repos only) Advanced E2E test branch — never merged back.

develop is the default branch on every FedMS repo.

Next steps