odoo-toolkit 3.2.0__tar.gz → 3.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo_toolkit-3.3.0/.claude/settings.local.json +16 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/PKG-INFO +1 -1
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/common.py +17 -11
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/dev/start.py +49 -51
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/compose.yaml +39 -11
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/.bash_aliases +6 -5
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/17.0.Dockerfile +2 -2
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/18.0.Dockerfile +4 -4
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/18.4.Dockerfile +4 -4
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/19.0.Dockerfile +5 -4
- odoo_toolkit-3.2.0/odoo_toolkit/docker/odoo/master.Dockerfile → odoo_toolkit-3.3.0/odoo_toolkit/docker/odoo/19.3.Dockerfile +9 -5
- odoo_toolkit-3.3.0/odoo_toolkit/docker/odoo/master.Dockerfile +232 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/multiverse_config/.vscode/launch.json +29 -11
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/multiverse_config/.vscode/settings.json +23 -1
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/mv/common.py +1 -1
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/mv/reset.py +12 -3
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/mv/setup.py +208 -154
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/create.py +2 -2
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/export.py +192 -86
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/update.py +2 -2
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/autotranslate.py +72 -64
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/common.py +62 -10
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/config.py +4 -5
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/copy.py +99 -49
- odoo_toolkit-3.3.0/odoo_toolkit/wl/download.py +269 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/update_components.py +3 -1
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/upload.py +93 -65
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/pyproject.toml +1 -1
- odoo_toolkit-3.3.0/uv.lock +472 -0
- odoo_toolkit-3.2.0/odoo_toolkit/wl/download.py +0 -166
- odoo_toolkit-3.2.0/uv.lock +0 -470
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/.gitignore +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/.vscode/settings.json +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/LICENSE +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/README.md +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/images/mailpit.png +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/__init__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/__main__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/dev/__init__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/dev/common.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/dev/start_db.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/dev/stop.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/append.bashrc +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/starship.toml +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/odoo/startup.sh +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/docker/pgadmin/servers.json +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/main.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/multiverse_config/.vscode/extensions.json +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/multiverse_config/requirements.txt +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/multiverse_config/ruff.toml +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/mv/__init__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/mv/switch.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/__init__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/cldr-common-47/LICENSE +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/cldr-common-47/common/dtd/ldmlSupplemental.dtd +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/cldr-common-47/common/supplemental/plurals.xml +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/cldr.csv +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/po/common.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/__init__.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/odoo_toolkit/wl/update_teams.py +0 -0
- {odoo_toolkit-3.2.0 → odoo_toolkit-3.3.0}/tests/__init__.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"WebFetch(domain:github.com)",
|
|
5
|
+
"WebFetch(domain:docs.weblate.org)",
|
|
6
|
+
"WebSearch",
|
|
7
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
8
|
+
"Bash(curl -s \"https://raw.githubusercontent.com/WeblateOrg/weblate/weblate-5.17/weblate/api/urls.py\")",
|
|
9
|
+
"Bash(curl -s \"https://raw.githubusercontent.com/WeblateOrg/weblate/weblate-5.17/weblate/api/views.py\")",
|
|
10
|
+
"Bash(curl -s \"https://raw.githubusercontent.com/WeblateOrg/weblate/weblate-5.17/weblate/api/pagination.py\")",
|
|
11
|
+
"Bash(curl -s \"https://raw.githubusercontent.com/WeblateOrg/weblate/weblate-5.17/weblate/trans/views/files.py\")",
|
|
12
|
+
"Bash(curl -s \"https://raw.githubusercontent.com/WeblateOrg/weblate/weblate-5.17/weblate/utils/views.py\")",
|
|
13
|
+
"Bash(uv run *)"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import importlib.util
|
|
2
|
+
import re
|
|
2
3
|
import time
|
|
3
4
|
from collections.abc import Callable, Collection, Iterable
|
|
4
5
|
from concurrent.futures import Future
|
|
@@ -213,7 +214,7 @@ def get_valid_modules_to_path_mapping(
|
|
|
213
214
|
com_path: Path,
|
|
214
215
|
ent_path: Path,
|
|
215
216
|
extra_addons_paths: Iterable[Path] = EMPTY_LIST,
|
|
216
|
-
|
|
217
|
+
include_path: Callable[[Path], bool] = lambda _: True,
|
|
217
218
|
) -> dict[str, Path]:
|
|
218
219
|
"""Determine the valid modules and their directories.
|
|
219
220
|
|
|
@@ -221,8 +222,8 @@ def get_valid_modules_to_path_mapping(
|
|
|
221
222
|
:param com_path: The Odoo Community repository.
|
|
222
223
|
:param ent_path: The Odoo Enterprise repository.
|
|
223
224
|
:param extra_addons_paths: Optional extra directories containing Odoo modules, defaults to `[]`.
|
|
224
|
-
:param
|
|
225
|
-
defaults to `
|
|
225
|
+
:param include_path: A function to include modules when using `all`, `community`, or `enterprise`,
|
|
226
|
+
defaults to always `True`.
|
|
226
227
|
:return: A mapping from all valid modules to their directories.
|
|
227
228
|
"""
|
|
228
229
|
base_module_path = com_path.expanduser().resolve() / "odoo" / "addons"
|
|
@@ -239,22 +240,22 @@ def get_valid_modules_to_path_mapping(
|
|
|
239
240
|
# Determine all modules to consider.
|
|
240
241
|
modules_to_consider: dict[str, Path] = {}
|
|
241
242
|
if "all" in modules:
|
|
242
|
-
modules_to_consider.update((m, p) for m, p in all_modules.items() if
|
|
243
|
+
modules_to_consider.update((m, p) for m, p in all_modules.items() if include_path(p))
|
|
243
244
|
if "community" in modules:
|
|
244
|
-
modules_to_consider.update((m, p) for m, p in com_modules.items() if
|
|
245
|
+
modules_to_consider.update((m, p) for m, p in com_modules.items() if include_path(p))
|
|
245
246
|
if "enterprise" in modules:
|
|
246
|
-
modules_to_consider.update((m, p) for m, p in ent_modules.items() if
|
|
247
|
+
modules_to_consider.update((m, p) for m, p in ent_modules.items() if include_path(p))
|
|
247
248
|
if "community-l10n" in modules:
|
|
248
249
|
modules_to_consider.update(
|
|
249
|
-
(m, p) for m, p in com_modules.items() if is_l10n_module(m) and (
|
|
250
|
+
(m, p) for m, p in com_modules.items() if is_l10n_module(m) and include_path(p)
|
|
250
251
|
)
|
|
251
252
|
if "enterprise-l10n" in modules:
|
|
252
253
|
modules_to_consider.update(
|
|
253
|
-
(m, p) for m, p in ent_modules.items() if is_l10n_module(m) and (
|
|
254
|
+
(m, p) for m, p in ent_modules.items() if is_l10n_module(m) and include_path(p)
|
|
254
255
|
)
|
|
255
256
|
modules_to_consider.update(
|
|
256
257
|
(m, p) for m, p in all_modules.items()
|
|
257
|
-
if any(fnmatch(m, mp) for mp in modules) and (
|
|
258
|
+
if any(fnmatch(m, mp) for mp in modules) and include_path(p)
|
|
258
259
|
)
|
|
259
260
|
|
|
260
261
|
return modules_to_consider
|
|
@@ -319,8 +320,13 @@ def get_odoo_version(odoo_repo: Path) -> float | None:
|
|
|
319
320
|
spec.loader.exec_module(module)
|
|
320
321
|
|
|
321
322
|
if hasattr(module, attribute_name):
|
|
322
|
-
|
|
323
|
-
|
|
323
|
+
major, minor, *_ = getattr(module, attribute_name)
|
|
324
|
+
if isinstance(major, str):
|
|
325
|
+
match = re.search(r"\d+", major)
|
|
326
|
+
if not match:
|
|
327
|
+
return None
|
|
328
|
+
major = int(match.group())
|
|
329
|
+
return float(major + (minor / 10))
|
|
324
330
|
|
|
325
331
|
return None
|
|
326
332
|
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
9
|
from python_on_whales import DockerException
|
|
10
|
+
from rich.progress import Progress
|
|
10
11
|
from typer import Argument, Exit, Option, Typer
|
|
11
12
|
|
|
12
13
|
from odoo_toolkit.common import (
|
|
@@ -33,7 +34,7 @@ def start(
|
|
|
33
34
|
Argument(
|
|
34
35
|
help="The Odoo branch to start a development server for, like `19.0`, `saas-19.1`, `master`.",
|
|
35
36
|
),
|
|
36
|
-
],
|
|
37
|
+
] = "master",
|
|
37
38
|
workspace: Annotated[
|
|
38
39
|
Path,
|
|
39
40
|
Option(
|
|
@@ -74,8 +75,8 @@ def start(
|
|
|
74
75
|
your machine at the location specified by `-w`. Your specified workspace will be sourced in the container at the
|
|
75
76
|
location `/code` and allows live code updates during local development.\n
|
|
76
77
|
\n
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
Depending on the version you're developing for, the right Docker container will be used. It contains the right
|
|
79
|
+
configuration and dependencies for that version.\n
|
|
79
80
|
\n
|
|
80
81
|
When you're done with the container, you can exit the session by running the `exit` command. At this point, the
|
|
81
82
|
container will still be running and you can start a new session using the same `otk dev start` command.
|
|
@@ -123,38 +124,7 @@ def start(
|
|
|
123
124
|
|
|
124
125
|
try:
|
|
125
126
|
with TransientProgress() as progress:
|
|
126
|
-
|
|
127
|
-
progress_task = progress.add_task("Building Docker image :coffee: ...", total=None)
|
|
128
|
-
# Build Docker image if it wasn't already or when forced.
|
|
129
|
-
output_generator = DOCKER.compose.build(
|
|
130
|
-
[f"odoo-{odoo_version}"],
|
|
131
|
-
stream_logs=True,
|
|
132
|
-
cache=not build_no_cache,
|
|
133
|
-
)
|
|
134
|
-
for stream_type, stream_content in output_generator:
|
|
135
|
-
# Loop through every output line to check on the progress.
|
|
136
|
-
if stream_type != "stdout":
|
|
137
|
-
continue
|
|
138
|
-
match = re.search(r"(\d+)/(\d+)\]", stream_content.decode())
|
|
139
|
-
if match:
|
|
140
|
-
completed, total = (int(g) for g in match.groups())
|
|
141
|
-
progress.update(
|
|
142
|
-
progress_task,
|
|
143
|
-
description=f"Building Docker image :coffee: ({completed}/{total + 1}) ...",
|
|
144
|
-
total=total + 1,
|
|
145
|
-
completed=completed,
|
|
146
|
-
)
|
|
147
|
-
else:
|
|
148
|
-
# (Under)estimate progress update per log line in the longest task.
|
|
149
|
-
progress.update(progress_task, advance=0.0002)
|
|
150
|
-
progress.update(progress_task, description="Building Docker image :coffee: ...", total=1, completed=1)
|
|
151
|
-
print_success("Docker image built")
|
|
152
|
-
|
|
153
|
-
if not DOCKER.image.exists(f"dylankiss/odoo-dev:{odoo_version}"):
|
|
154
|
-
progress_task = progress.add_task("Pulling Docker image :coffee: ...", total=None)
|
|
155
|
-
DOCKER.image.pull([f"dylankiss/odoo-dev:{odoo_version}"], quiet=True, platform="linux/amd64")
|
|
156
|
-
progress.update(progress_task, total=1, completed=1)
|
|
157
|
-
print_success("Docker image pulled")
|
|
127
|
+
_ensure_docker_image(odoo_version, build, build_no_cache, progress)
|
|
158
128
|
|
|
159
129
|
progress_task = progress.add_task("Starting containers ...", total=None)
|
|
160
130
|
# Start the container in the background.
|
|
@@ -177,25 +147,53 @@ def start(
|
|
|
177
147
|
raise Exit from e
|
|
178
148
|
|
|
179
149
|
|
|
150
|
+
def _ensure_docker_image(odoo_version: str, build: bool, build_no_cache: bool, progress: Progress) -> None:
|
|
151
|
+
"""Build or pull the Docker image for the given Odoo version if not already present."""
|
|
152
|
+
if build or build_no_cache:
|
|
153
|
+
progress_task = progress.add_task("Building Docker image :coffee: ...", total=None)
|
|
154
|
+
output_generator = DOCKER.compose.build(
|
|
155
|
+
[f"odoo-{odoo_version}"],
|
|
156
|
+
stream_logs=True,
|
|
157
|
+
cache=not build_no_cache,
|
|
158
|
+
)
|
|
159
|
+
for stream_type, stream_content in output_generator:
|
|
160
|
+
if stream_type != "stdout":
|
|
161
|
+
continue
|
|
162
|
+
match = re.search(r"(\d+)/(\d+)\]", stream_content.decode())
|
|
163
|
+
if match:
|
|
164
|
+
completed, total = (int(g) for g in match.groups())
|
|
165
|
+
progress.update(
|
|
166
|
+
progress_task,
|
|
167
|
+
description=f"Building Docker image :coffee: ({completed}/{total + 1}) ...",
|
|
168
|
+
total=total + 1,
|
|
169
|
+
completed=completed,
|
|
170
|
+
)
|
|
171
|
+
else:
|
|
172
|
+
# (Under)estimate progress update per log line in the longest task.
|
|
173
|
+
progress.update(progress_task, advance=0.0002)
|
|
174
|
+
progress.update(progress_task, description="Building Docker image :coffee: ...", total=1, completed=1)
|
|
175
|
+
print_success("Docker image built")
|
|
176
|
+
|
|
177
|
+
if not DOCKER.image.exists(f"dylankiss/odoo-dev:{odoo_version}"):
|
|
178
|
+
progress_task = progress.add_task("Pulling Docker image :coffee: ...", total=None)
|
|
179
|
+
DOCKER.image.pull([f"dylankiss/odoo-dev:{odoo_version}"], quiet=True, platform="linux/amd64")
|
|
180
|
+
progress.update(progress_task, total=1, completed=1)
|
|
181
|
+
print_success("Docker image pulled")
|
|
182
|
+
|
|
183
|
+
|
|
180
184
|
def _get_odoo_container_version_from_branch(odoo_branch: str) -> str:
|
|
181
185
|
"""Get the Odoo version to use for the container based on the provided Odoo branch."""
|
|
182
186
|
if odoo_branch in ("master", "main"):
|
|
183
187
|
return "master"
|
|
184
188
|
match = re.search(r"(\d+(\.\d+)?)", odoo_branch)
|
|
185
|
-
if match:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if version <=
|
|
194
|
-
return
|
|
195
|
-
if version > 19.0: # noqa: PLR2004
|
|
196
|
-
return "master"
|
|
197
|
-
print_warning(
|
|
198
|
-
f"Could not determine Odoo version from branch '{odoo_branch}'. "
|
|
199
|
-
"Falling back to 'master' version for the container.",
|
|
200
|
-
)
|
|
189
|
+
if not match:
|
|
190
|
+
print_warning(
|
|
191
|
+
f"Could not determine Odoo version from branch '{odoo_branch}'. "
|
|
192
|
+
"Falling back to 'master' version for the container.",
|
|
193
|
+
)
|
|
194
|
+
return "master"
|
|
195
|
+
version = float(match.group(1))
|
|
196
|
+
for max_version, container_version in [(17.0, "17.0"), (18.0, "18.0"), (18.4, "18.4"), (19.0, "19.0"), (19.3, "19.3")]:
|
|
197
|
+
if version <= max_version:
|
|
198
|
+
return container_version
|
|
201
199
|
return "master"
|
|
@@ -9,7 +9,7 @@ services:
|
|
|
9
9
|
- linux/amd64
|
|
10
10
|
image: dylankiss/odoo-dev:master
|
|
11
11
|
container_name: odoo-master
|
|
12
|
-
hostname: odoo-
|
|
12
|
+
hostname: odoo-master
|
|
13
13
|
platform: linux/amd64
|
|
14
14
|
depends_on:
|
|
15
15
|
- postgres
|
|
@@ -23,8 +23,36 @@ services:
|
|
|
23
23
|
- odoo-postgres-sockets:/var/run/postgresql
|
|
24
24
|
- odoo-ssh-keys:/home/odoo/.ssh
|
|
25
25
|
ports:
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- 5678:5678 # debugpy
|
|
27
|
+
- 8070:8070 # odoo
|
|
28
|
+
working_dir: /code
|
|
29
|
+
stdin_open: true
|
|
30
|
+
tty: true
|
|
31
|
+
|
|
32
|
+
odoo-19.3:
|
|
33
|
+
build:
|
|
34
|
+
context: ./odoo
|
|
35
|
+
dockerfile: 19.3.Dockerfile
|
|
36
|
+
platforms:
|
|
37
|
+
- linux/amd64
|
|
38
|
+
image: dylankiss/odoo-dev:19.3
|
|
39
|
+
container_name: odoo-19.1-19.3
|
|
40
|
+
hostname: odoo-19-1-19-3
|
|
41
|
+
platform: linux/amd64
|
|
42
|
+
depends_on:
|
|
43
|
+
- postgres
|
|
44
|
+
- mailpit
|
|
45
|
+
- pgadmin
|
|
46
|
+
volumes:
|
|
47
|
+
- ${ODOO_WORKSPACE_DIR:-~}:/code
|
|
48
|
+
- ${GITCONFIG_PATH:-~/.gitconfig}:/home/odoo/.gitconfig
|
|
49
|
+
- odoo-filestore:/home/odoo/.local/share/Odoo
|
|
50
|
+
- odoo-bash-history-data-noble:/home/odoo/.bash_history_data
|
|
51
|
+
- odoo-postgres-sockets:/var/run/postgresql
|
|
52
|
+
- odoo-ssh-keys:/home/odoo/.ssh
|
|
53
|
+
ports:
|
|
54
|
+
- 5683:5678 # debugpy
|
|
55
|
+
- 8075:8075 # odoo
|
|
28
56
|
working_dir: /code
|
|
29
57
|
stdin_open: true
|
|
30
58
|
tty: true
|
|
@@ -51,8 +79,8 @@ services:
|
|
|
51
79
|
- odoo-postgres-sockets:/var/run/postgresql
|
|
52
80
|
- odoo-ssh-keys:/home/odoo/.ssh
|
|
53
81
|
ports:
|
|
54
|
-
-
|
|
55
|
-
-
|
|
82
|
+
- 5682:5678 # debugpy
|
|
83
|
+
- 8074:8074 # odoo
|
|
56
84
|
working_dir: /code
|
|
57
85
|
stdin_open: true
|
|
58
86
|
tty: true
|
|
@@ -79,8 +107,8 @@ services:
|
|
|
79
107
|
- odoo-postgres-sockets:/var/run/postgresql
|
|
80
108
|
- odoo-ssh-keys:/home/odoo/.ssh
|
|
81
109
|
ports:
|
|
82
|
-
-
|
|
83
|
-
-
|
|
110
|
+
- 5681:5678 # debugpy
|
|
111
|
+
- 8073:8073 # odoo
|
|
84
112
|
working_dir: /code
|
|
85
113
|
stdin_open: true
|
|
86
114
|
tty: true
|
|
@@ -107,8 +135,8 @@ services:
|
|
|
107
135
|
- odoo-postgres-sockets:/var/run/postgresql
|
|
108
136
|
- odoo-ssh-keys:/home/odoo/.ssh
|
|
109
137
|
ports:
|
|
110
|
-
-
|
|
111
|
-
-
|
|
138
|
+
- 5680:5678 # debugpy
|
|
139
|
+
- 8072:8072 # odoo
|
|
112
140
|
working_dir: /code
|
|
113
141
|
stdin_open: true
|
|
114
142
|
tty: true
|
|
@@ -135,8 +163,8 @@ services:
|
|
|
135
163
|
- odoo-postgres-sockets:/var/run/postgresql
|
|
136
164
|
- odoo-ssh-keys:/home/odoo/.ssh
|
|
137
165
|
ports:
|
|
138
|
-
-
|
|
139
|
-
-
|
|
166
|
+
- 5679:5678 # debugpy
|
|
167
|
+
- 8071:8071 # odoo
|
|
140
168
|
working_dir: /code
|
|
141
169
|
stdin_open: true
|
|
142
170
|
tty: true
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
case "$(hostname)" in
|
|
2
|
-
"odoo-17")
|
|
3
|
-
"odoo-18")
|
|
4
|
-
"odoo-18-1-18-4") export ODOO_PORT="
|
|
5
|
-
"odoo-19")
|
|
6
|
-
|
|
2
|
+
"odoo-17") export ODOO_PORT="8071" ;;
|
|
3
|
+
"odoo-18") export ODOO_PORT="8072" ;;
|
|
4
|
+
"odoo-18-1-18-4") export ODOO_PORT="8073" ;;
|
|
5
|
+
"odoo-19") export ODOO_PORT="8074" ;;
|
|
6
|
+
"odoo-19-1-19-3") export ODOO_PORT="8075" ;;
|
|
7
|
+
*) export ODOO_PORT="8070" ;;
|
|
7
8
|
esac
|
|
8
9
|
|
|
9
10
|
port_opt="--http-port=$ODOO_PORT --http-interface=0.0.0.0"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Container definition for Odoo <=17.0
|
|
2
|
-
# Last updated: 2026-
|
|
2
|
+
# Last updated: 2026-06-06
|
|
3
3
|
|
|
4
4
|
# Use Ubuntu 22.04 LTS (Jammy Jellyfish)
|
|
5
5
|
FROM ubuntu:jammy
|
|
@@ -205,7 +205,7 @@ COPY startup.sh /home/odoo/.local/bin/startup.sh
|
|
|
205
205
|
WORKDIR /code
|
|
206
206
|
|
|
207
207
|
# Expose useful ports
|
|
208
|
-
EXPOSE 5678
|
|
208
|
+
EXPOSE 5678 8071
|
|
209
209
|
|
|
210
210
|
# Set Tini as the entrypoint
|
|
211
211
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Container definition for Odoo >17.0 and <=18.0
|
|
2
|
-
# Last updated: 2026-
|
|
2
|
+
# Last updated: 2026-06-06
|
|
3
3
|
|
|
4
4
|
# Use Ubuntu 24.04 LTS (Noble Numbat)
|
|
5
5
|
FROM ubuntu:noble
|
|
@@ -85,6 +85,7 @@ RUN set -x; \
|
|
|
85
85
|
python3-xmlsec \
|
|
86
86
|
python3-markdown2 \
|
|
87
87
|
python3-aiosmtpd \
|
|
88
|
+
python3-paramiko \
|
|
88
89
|
# Moved packages
|
|
89
90
|
python3-venv \
|
|
90
91
|
# Extra packages
|
|
@@ -120,7 +121,7 @@ RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/tru
|
|
|
120
121
|
&& rm -rf /var/lib/apt/lists/*
|
|
121
122
|
|
|
122
123
|
# Install Google Chrome
|
|
123
|
-
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-
|
|
124
|
+
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_145.0.7632.116-1_amd64.deb -o /tmp/chrome.deb \
|
|
124
125
|
&& apt-get update \
|
|
125
126
|
&& apt-get -y install --no-install-recommends \
|
|
126
127
|
/tmp/chrome.deb \
|
|
@@ -150,7 +151,6 @@ RUN uv pip install --no-cache-dir \
|
|
|
150
151
|
pdf417gen==0.7.1 \
|
|
151
152
|
astroid==3.3.9 \
|
|
152
153
|
pylint==3.3.6 \
|
|
153
|
-
paramiko==2.12.0 \
|
|
154
154
|
# Extra packages
|
|
155
155
|
debugpy \
|
|
156
156
|
pydevd-odoo \
|
|
@@ -204,7 +204,7 @@ COPY startup.sh /home/odoo/.local/bin/startup.sh
|
|
|
204
204
|
WORKDIR /code
|
|
205
205
|
|
|
206
206
|
# Expose useful ports
|
|
207
|
-
EXPOSE 5678
|
|
207
|
+
EXPOSE 5678 8072
|
|
208
208
|
|
|
209
209
|
# Set Tini as the entrypoint
|
|
210
210
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Container definition for Odoo >18.0 and <=saas-18.4
|
|
2
|
-
# Last updated: 2026-
|
|
2
|
+
# Last updated: 2026-06-06
|
|
3
3
|
|
|
4
4
|
# Use Ubuntu 24.04 LTS (Noble Numbat)
|
|
5
5
|
FROM ubuntu:noble
|
|
@@ -85,6 +85,7 @@ RUN set -x; \
|
|
|
85
85
|
python3-xmlsec \
|
|
86
86
|
python3-markdown2 \
|
|
87
87
|
python3-aiosmtpd \
|
|
88
|
+
python3-paramiko \
|
|
88
89
|
# Moved packages
|
|
89
90
|
python3-venv \
|
|
90
91
|
# Extra packages
|
|
@@ -120,7 +121,7 @@ RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/tru
|
|
|
120
121
|
&& rm -rf /var/lib/apt/lists/*
|
|
121
122
|
|
|
122
123
|
# Install Google Chrome
|
|
123
|
-
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-
|
|
124
|
+
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_145.0.7632.116-1_amd64.deb -o /tmp/chrome.deb \
|
|
124
125
|
&& apt-get update \
|
|
125
126
|
&& apt-get -y install --no-install-recommends \
|
|
126
127
|
/tmp/chrome.deb \
|
|
@@ -151,7 +152,6 @@ RUN uv pip install --no-cache-dir \
|
|
|
151
152
|
astroid==3.3.9 \
|
|
152
153
|
pylint==3.3.8 \
|
|
153
154
|
unidiff==0.7.3 \
|
|
154
|
-
paramiko==2.12.0 \
|
|
155
155
|
markdown2==2.4.11 \
|
|
156
156
|
# Extra packages
|
|
157
157
|
debugpy \
|
|
@@ -206,7 +206,7 @@ COPY startup.sh /home/odoo/.local/bin/startup.sh
|
|
|
206
206
|
WORKDIR /code
|
|
207
207
|
|
|
208
208
|
# Expose useful ports
|
|
209
|
-
EXPOSE 5678
|
|
209
|
+
EXPOSE 5678 8073
|
|
210
210
|
|
|
211
211
|
# Set Tini as the entrypoint
|
|
212
212
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Container definition for Odoo >saas-18.4 and <=19.0
|
|
2
|
-
# Last updated: 2026-
|
|
2
|
+
# Last updated: 2026-06-06
|
|
3
3
|
|
|
4
4
|
# Use Ubuntu 24.04 LTS (Noble Numbat)
|
|
5
5
|
FROM ubuntu:noble
|
|
@@ -85,6 +85,7 @@ RUN set -x; \
|
|
|
85
85
|
python3-xmlsec \
|
|
86
86
|
python3-markdown2 \
|
|
87
87
|
python3-aiosmtpd \
|
|
88
|
+
python3-paramiko \
|
|
88
89
|
# Moved packages
|
|
89
90
|
python3-venv \
|
|
90
91
|
# Extra packages
|
|
@@ -120,7 +121,7 @@ RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/tru
|
|
|
120
121
|
&& rm -rf /var/lib/apt/lists/*
|
|
121
122
|
|
|
122
123
|
# Install Google Chrome
|
|
123
|
-
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-
|
|
124
|
+
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_145.0.7632.116-1_amd64.deb -o /tmp/chrome.deb \
|
|
124
125
|
&& apt-get update \
|
|
125
126
|
&& apt-get -y install --no-install-recommends \
|
|
126
127
|
/tmp/chrome.deb \
|
|
@@ -150,8 +151,8 @@ RUN uv pip install --no-cache-dir \
|
|
|
150
151
|
pdf417gen==0.7.1 \
|
|
151
152
|
pylint==4.0.3 \
|
|
152
153
|
unidiff==0.7.3 \
|
|
153
|
-
paramiko==2.12.0 \
|
|
154
154
|
markdown2==2.4.11 \
|
|
155
|
+
coverage==7.4.4 \
|
|
155
156
|
# Extra packages
|
|
156
157
|
debugpy \
|
|
157
158
|
pydevd-odoo \
|
|
@@ -205,7 +206,7 @@ COPY startup.sh /home/odoo/.local/bin/startup.sh
|
|
|
205
206
|
WORKDIR /code
|
|
206
207
|
|
|
207
208
|
# Expose useful ports
|
|
208
|
-
EXPOSE 5678
|
|
209
|
+
EXPOSE 5678 8074
|
|
209
210
|
|
|
210
211
|
# Set Tini as the entrypoint
|
|
211
212
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Container definition for Odoo >19.0 and <=
|
|
2
|
-
# Last updated: 2026-
|
|
1
|
+
# Container definition for Odoo >19.0 and <=saas-19.3
|
|
2
|
+
# Last updated: 2026-06-06
|
|
3
3
|
|
|
4
4
|
# Use Ubuntu 24.04 LTS (Noble Numbat)
|
|
5
5
|
FROM ubuntu:noble
|
|
@@ -8,6 +8,7 @@ ENV LANG=C.UTF-8 \
|
|
|
8
8
|
TERM=xterm-256color \
|
|
9
9
|
PYTHONUNBUFFERED=1 \
|
|
10
10
|
PYTHONHASHSEED=0 \
|
|
11
|
+
ODOO_RUNBOT=1 \
|
|
11
12
|
NODE_PATH=/usr/lib/node_modules/ \
|
|
12
13
|
npm_config_prefix=/usr \
|
|
13
14
|
PATH="/venv/odoo/bin:/venv/odoo-doc/bin:/home/odoo/.local/bin:$PATH"
|
|
@@ -85,6 +86,7 @@ RUN set -x; \
|
|
|
85
86
|
python3-xmlsec \
|
|
86
87
|
python3-markdown2 \
|
|
87
88
|
python3-aiosmtpd \
|
|
89
|
+
python3-paramiko \
|
|
88
90
|
# Moved packages
|
|
89
91
|
python3-venv \
|
|
90
92
|
# Extra packages
|
|
@@ -120,7 +122,7 @@ RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/tru
|
|
|
120
122
|
&& rm -rf /var/lib/apt/lists/*
|
|
121
123
|
|
|
122
124
|
# Install Google Chrome
|
|
123
|
-
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-
|
|
125
|
+
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_145.0.7632.116-1_amd64.deb -o /tmp/chrome.deb \
|
|
124
126
|
&& apt-get update \
|
|
125
127
|
&& apt-get -y install --no-install-recommends \
|
|
126
128
|
/tmp/chrome.deb \
|
|
@@ -150,8 +152,10 @@ RUN uv pip install --no-cache-dir \
|
|
|
150
152
|
pdf417gen==0.7.1 \
|
|
151
153
|
pylint==4.0.3 \
|
|
152
154
|
unidiff==0.7.3 \
|
|
153
|
-
paramiko==2.12.0 \
|
|
154
155
|
markdown2==2.4.11 \
|
|
156
|
+
semgrep==1.116.0 \
|
|
157
|
+
ruff==0.15.0 \
|
|
158
|
+
coverage==7.4.4 \
|
|
155
159
|
# Extra packages
|
|
156
160
|
debugpy \
|
|
157
161
|
pydevd-odoo \
|
|
@@ -218,7 +222,7 @@ COPY startup.sh /home/odoo/.local/bin/startup.sh
|
|
|
218
222
|
WORKDIR /code
|
|
219
223
|
|
|
220
224
|
# Expose useful ports
|
|
221
|
-
EXPOSE 5678 8075
|
|
225
|
+
EXPOSE 5678 8075
|
|
222
226
|
|
|
223
227
|
# Set Tini as the entrypoint
|
|
224
228
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|