Document repository purpose, architecture, workflows, and usage: - CI deployment workflow explanation - Linting tools overview - How to modify CI configuration - How to add new Odoo version support - Configuration files explanation - Secrets setup - Version differences (16.0 vs 18.0)
odoo-elabore-ci
Centralized CI/CD configuration for Elabore's Odoo repositories.
Purpose
This repository manages linting and CI configuration centrally for all Odoo repositories (*-addons and *-tools) in the Elabore organization on Gitea.
Benefits:
- Single, consistent configuration across all repos
- Automatic updates via deployment workflow
- Multi-version Odoo support (16.0, 18.0, etc.)
- Based on OCA (Odoo Community Association) standards
Architecture
odoo-elabore-ci/
├── .gitea/workflows/
│ └── deploy-config.yml # Automatic deployment workflow
└── config/
├── common/ # Shared files (all versions)
│ ├── .editorconfig
│ └── .gitea/workflows/
│ └── pre-commit.yml # CI workflow deployed to each repo
├── 16.0/ # Odoo 16.0 configuration
│ ├── .eslintrc.yml
│ ├── .prettierrc.yml
│ ├── .pre-commit-config.yaml
│ ├── .pylintrc
│ ├── .pylintrc-mandatory
│ └── .ruff.toml
└── 18.0/ # Odoo 18.0 configuration
├── eslint.config.cjs
├── prettier.config.cjs
├── .pre-commit-config.yaml
├── .pylintrc
├── .pylintrc-mandatory
└── .ruff.toml
How It Works
Deployment Workflow (deploy-config.yml)
When a push is made to the main branch of this repository:
- The workflow automatically detects available versions (folders in
config/other thancommon/) - For each
*-addonsor*-toolsrepository in the organization:- For each configured Odoo version (16.0, 18.0, etc.):
- Attempts to clone the corresponding branch from the target repo
- If it exists: copies
config/common/thenconfig/{version}/ - Creates a Pull Request if changes are detected
- For each configured Odoo version (16.0, 18.0, etc.):
CI Workflow (pre-commit.yml)
Deployed to each target repository, this workflow runs on every Pull Request:
- Sets up Python 3.11 environment
- Installs and runs
pre-commitwith all configured hooks - Verifies no untracked files were generated
Linting Tools
| Tool | Purpose | Target Files |
|---|---|---|
| Ruff | Python linter + formatter | .py |
| Pylint-Odoo | Odoo-specific rules | .py, __manifest__.py, XML |
| ESLint | JavaScript linter | .js |
| Prettier | Multi-language formatter | JS, CSS, XML, JSON, YAML, MD |
| pre-commit-hooks | Generic checks | Trailing whitespace, merge conflicts, etc. |
| OCA hooks | Odoo community standards | Manifests, README, translations |
Usage Guide
Modifying CI Configuration
-
Edit files in
config/:config/common/: changes applied to all versionsconfig/{version}/: version-specific changes
-
Commit and push to
main:git add . git commit -m "[IMP] description of change" git push origin main -
The workflow automatically creates PRs in all affected repos
Adding a New Odoo Version
-
Create the configuration directory:
mkdir config/{new_version} -
Copy and adapt files from the closest version or from an OCA repo:
# Example for Odoo 19.0 based on 18.0 cp config/18.0/* config/19.0/ -
Adapt the copied files:
File Required Changes .pylintrcvalid-odoo-versions=19.0.pylintrc-mandatoryvalid-odoo-versions=19.0.ruff.tomltarget-versionif Python version changes.pre-commit-config.yamlHook versions if needed -
Commit and push:
git add config/19.0/ git commit -m "[ADD] support for Odoo 19.0 configuration" git push origin main
The workflow will automatically detect the new folder and deploy the configuration to repos with a 19.0 branch.
Secrets Configuration
The workflow requires a Gitea token with the following permissions:
- Read access to all organization repos
- Write access (to create PRs)
Configure the ELABORE_BOT_TOKEN secret in the repository settings.
Version Differences
16.0 vs 18.0
| Aspect | 16.0 | 18.0 |
|---|---|---|
| ESLint config | .eslintrc.yml |
eslint.config.cjs (flat config) |
| Prettier config | .prettierrc.yml |
prettier.config.cjs |
| Node.js | 16.17.0 | 22.9.0 |
| Prettier | 2.7.1 | 3.3.3 |
| ESLint | 8.x | 9.x |
| Additional hooks | - | whool-init, oca-gen-external-dependencies |
Configuration Files
.pylintrc vs .pylintrc-mandatory
.pylintrc: All rules (optional + mandatory), non-blocking mode (--exit-zero). Useful for IDEs..pylintrc-mandatory: Critical rules only, blocking mode. Used by CI.
Elabore-Specific Rules
Files are customized for Elabore:
manifest-required-authors=Elabore- URLs pointing to
https://git.elabore.coop/elabore/
Contributing
- Test changes locally with
pre-commit run --all-files - Follow commit conventions (tags
[IMP],[FIX],[ADD], etc.) - Auto-generated PRs should be reviewed before merging
Resources
License
AGPL-3.0