Skip to content

Contributing

Matteo Boscolo edited this page May 25, 2026 · 3 revisions

Contributing

Contributions are welcome — bug fixes, new modules, documentation and translations. This page describes how the repository is organized and the conventions to follow so your pull request can be merged smoothly.

Repository layout

  • Each top-level folder is a separate Odoo module (e.g. plm, plm_engineering, plm_web_3d).
  • mirror_document_server/ is a standalone Flask service, not an Odoo module.
  • documents/ holds legacy design documents.
  • The development branch for this Odoo series is 19.0. Each major Odoo version has its own branch.

Before you start

  1. Open an issue describing the bug or feature, so work isn't duplicated: https://github.com/OmniaGit/odooplm/issues
  2. Fork the repo and create a topic branch off 19.0.
  3. Clone with submodules (the 3D/DXF viewer libs are submodules):
    git clone --recurse-submodules -b 19.0 https://github.com/OmniaGit/odooplm.git

Coding standards

The repo follows the OCA (Odoo Community Association) conventions and enforces them with pre-commit. The configured tools include:

  • black — Python formatting
  • isort — import ordering
  • flake8 — linting (.flake8)
  • pylint (.pylintrc, .pylintrc-mandatory) — Odoo-aware linting
  • pyupgrade, autoflake — modernize / clean Python
  • prettier (.prettierrc.yml) + eslint (.eslintrc.yml) — JS/CSS/XML assets
  • OCA maintainer-tools — manifest fixing, addon list maintenance
  • generic hooks — trailing whitespace, end-of-file, XML validity, merge-conflict checks

Install and run pre-commit

pip install pre-commit
cd odooplm
pre-commit install        # run automatically on each commit
pre-commit run --all-files  # run on the whole repo once

Please make sure pre-commit run --all-files is clean before opening a PR.

Module conventions

  • Every module needs a valid __manifest__.py with at least: name, version (in 19.0.x.y.z form), author (OmniaSolutions), website, category, license, depends, data.
  • Keep the depends list minimal and accurate.
  • Default license for new modules is AGPL-3 unless there's a specific reason otherwise.
  • Place security rules under security/, views under views/, reports under report/, data under data/, and front-end assets under static/.

Testing

Run the PLM test suites with Odoo's test tags. For example:

odoo -c odoo.conf -d <db> -i <module> --test-tags=odoo_plm,odoo_plm_web_revision,plm_automatic_weight --stop-after-init

When developing views, auto-reload XML with:

odoo -c odoo.conf --dev=xml

Please add or update tests for the behaviour you change, and tag them so they run under the appropriate --test-tags.

Commit messages

The project uses a tagged commit format:

[TAG] | Short description of the change

Where TAG is one of:

Tag Use for
FIX Bug fixes
ADD New features / modules
IMP Improvements to existing behaviour
MOD Modifications / refactors

Example: [FIX] | plm_web_3d: correct section plane normal on STEP import

Submitting a pull request

  1. Keep each PR focused on one change.
  2. Write a clear description: what changed, why, and how to test it.
  3. Reference the related issue.
  4. Ensure pre-commit passes and tests are green.
  5. Target the 19.0 branch.

License

By contributing you agree that your contributions are licensed under the same license as the module you modify (AGPL-3 for most modules, LGPL-3 for a few — check the module's __manifest__.py).

Contact

Clone this wiki locally