erplibre/.claude/rules/08-deployment.md
Mathieu Benoit e20d8d9baa [ADD] install: uv to place Python packages, pip as fallback
uv replaces pip where it can: the tools venv and the Poetry bootstrap. The
choice lives in EL_PIP_PROVIDER -- auto, uv or pip -- and in a single
file, lib_pip_provider.sh, on the exact model of the mise/pyenv switch. A
uv failure falls back to pip: it is stricter on metadata and rejects
packages pip accepts.

Three guards. The target always goes through "--python" rather than being
inferred from the active venv: poetry.toml declares a "./.venv" uv would
also look for. Python 3.7, still used by Odoo 12 and 13, stays on pip. And
"uv pip sync" is never used: it would delete pip itself and everything
Poetry laid down.

One bug falls along the way: the idempotence guard aimed at
.venv.erplibre/bin/poetry while Poetry installs into the Odoo venv, so a
successful replay reported failure all the same.

--- FR ---

uv remplace pip là où il le peut : le venv d'outils et l'amorçage de
Poetry. Le choix vit dans EL_PIP_PROVIDER — auto, uv ou pip — et dans un
seul fichier, lib_pip_provider.sh, sur le modèle exact de l'aiguillage
mise/pyenv. Un échec d'uv retombe sur pip : il est plus strict sur les
métadonnées et refuse des paquets que pip accepte.

Trois gardes. La cible passe toujours par « --python » plutôt que d'être
déduite du venv actif : poetry.toml déclare un « ./.venv » qu'uv
chercherait aussi. Python 3.7, encore utilisé par Odoo 12 et 13, reste sur
pip. Et « uv pip sync » n'est jamais employé : il supprimerait pip
lui-même et tout ce que Poetry a posé.

Un défaut tombe au passage : le garde d'idempotence visait
.venv.erplibre/bin/poetry alors que Poetry s'installe dans le venv Odoo,
si bien qu'un rejeu réussi rapportait quand même un échec.

Assisted-by: Claude Opus 5
2026-08-16 23:33:49 -04:00

1.7 KiB

Déploiement

  • Docker : docker-compose.yml (PostgreSQL 18 + PostGIS 3.6)
  • Systemd : script/systemd/ pour les services
  • Nginx : script/nginx/ pour le reverse proxy
  • SSL : Certbot pour les certificats
  • DNS : script/deployment/update_dns_cloudflare.py

Plateformes supportées : Ubuntu 24.04 / 25.10 / 26.04, Linux Mint 22.3, Debian 12, AlmaLinux 9+, Rocky Linux 9+, openSUSE Tumbleweed, Arch Linux, macOS (mise ou pyenv), Windows (WSL/Docker).

Ubuntu 20.04 et 22.04 sont abandonnées : pikepdf exige qpdf >= 12.2, compilé en C++20, quand focal livre GCC 9.

Interpréteur Python

EL_PYTHON_PROVIDER (dans env_var.sh) vaut auto, mise ou pyenv. auto reprend un interpréteur DÉJÀ posé, quel que soit le fournisseur ; sinon il préfère mise, qui pose un CPython précompilé, et retombe sur pyenv, qui le compile.

Un seul fichier décide : script/install/lib_python_provider.sh. mise n'est jamais installé automatiquement — make install_mise porte cette décision. Pas de binaire mise pour s390x à ce jour : cette architecture reste sur pyenv.

Paquets Python

EL_PIP_PROVIDER (dans env_var.sh) vaut auto, uv ou pip. auto prend uv s'il est présent et si le venv visé est en Python ≥ 3.8, sinon pip ; un échec d'uv retombe sur pip. Un seul fichier décide : script/install/lib_pip_provider.sh. uv n'est jamais installé automatiquement — make install_uv porte cette décision.

Portée réelle : le venv d'outils et l'amorçage de Poetry. poetry install n'est pas concerné — uv ne lit pas poetry.lock — et c'est pourtant l'étape qui domine. Sur s390x le gain est quasi nul : une trentaine de paquets sans roue se compilent, et uv n'enlève pas une seconde de gcc.