Skip to main content

Organize Modules in Nested Directories

Skysize mounts your repository root into the Odoo container and scans it one level deep for modules. An immediate subdirectory of the root that contains a __manifest__.py file is detected as an Odoo module. Skysize does not recurse into deeper subdirectories.


The simplest and most reliable layout places every module directly at the root of the repository:

my-odoo-repo/
├── account_extension/ ← module (has __manifest__.py) ✅
├── payment_custom/ ← module (has __manifest__.py) ✅
├── hr_attendance_extra/ ← module (has __manifest__.py) ✅
└── hr_contract_custom/ ← module (has __manifest__.py) ✅

With this layout every module is exactly one level below the root, so all of them are detected automatically. No additional configuration is required.


The problem with nested directories

If your modules are grouped under intermediate folders, they are two or more levels deep and will not be detected:

my-odoo-repo/
└── addons/
├── finance/
│ ├── account_extension/ ← three levels deep ❌ not detected
│ └── payment_custom/ ← three levels deep ❌ not detected
└── hr/
├── hr_attendance_extra/ ← three levels deep ❌ not detected
└── hr_contract_custom/ ← three levels deep ❌ not detected

Here the repository root contains only addons/, which has no __manifest__.py, so Skysize finds no modules.

To keep modules in subdirectories, tell Skysize where to look using the Custom addons path field in the branch settings (under Addon Configuration). List one or more directories relative to your repository root, each starting with /, separated by commas:

/addons/finance,/addons/hr

With that setting, Skysize scans addons/finance and addons/hr for modules (one level deep, as usual), so all four modules in the example above are detected. The paths are resolved against your repository, so /addons/finance means the addons/finance folder in your repo.

A few things to know:

  • Each path must start with /, Skysize rejects entries that don't.
  • The setting is saved per branch and applied on the next deployment.
  • Custom paths replace root-level scanning. If you also keep modules at the repository root, include the root in the list as well.

Alternative fix: flatten to the root

If you'd rather not use the field, move the module folders so each sits directly at the repository root:

git mv addons/finance/account_extension ./account_extension
git mv addons/finance/payment_custom ./payment_custom
git mv addons/hr/hr_attendance_extra ./hr_attendance_extra
git mv addons/hr/hr_contract_custom ./hr_contract_custom
git commit -m "Flatten module layout to repository root"
git push

The next deployment will detect all four modules.


Install the modules in Odoo

Detected modules are available on the server but are not installed automatically.

  1. Open your Odoo instance.
  2. Enable developer mode: Settings → Activate the developer mode.
  3. Go to Apps, click Update Apps List, then search for each module and click Install.