gOdoo-cli 1.0.1__tar.gz → 1.0.3__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.
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.agents/skills/godoo-runtime-validation/SKILL.md +3 -3
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.env.sample +4 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/PKG-INFO +8 -7
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/README.md +7 -6
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docker/Dockerfile +2 -2
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docker/docker-compose.base.yml +7 -3
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docker/docker-compose.dev.yml +2 -1
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docs/downstream.md +23 -14
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docs/hooks.md +19 -5
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docs/lifecycle.md +62 -25
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/pyproject.toml +1 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/__about__.py +1 -1
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/configuration.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/archive.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/importer.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/run.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/__init__.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/init.py +158 -66
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/launch.py +32 -4
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/shell.py +6 -0
- godoo_cli-1.0.3/src/godoo_cli/commands/runtime/start.py +56 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/test/load_data.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/test/run.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/archive.py +2 -0
- godoo_cli-1.0.3/src/godoo_cli/runtime/checksums.py +220 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/filestore.py +4 -1
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/hooks.py +27 -1
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/lifecycle.py +8 -4
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/promotion.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/reset.py +14 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/restore.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/git.py +2 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_runtime_cli.py +1 -1
- godoo_cli-1.0.3/tests/commands/test_runtime_start.py +82 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/conftest.py +1 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/integration/test_container_contract.py +7 -5
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/integration/test_odoo_integration.py +164 -1
- godoo_cli-1.0.3/tests/runtime/test_checksums.py +184 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_filestore.py +14 -6
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_hooks.py +119 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_init_hooks.py +38 -11
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_lifecycle.py +8 -3
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.agents/skills/godoo-changeset-review/SKILL.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.agents/skills/godoo-editor-validation/SKILL.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.agents/skills/godoo-source-workspaces/SKILL.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.codecovrc +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.dockerignore +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.github/FUNDING.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.github/workflows/README.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.github/workflows/quality.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.github/workflows/version-bump.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.github/workflows/version-publish.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.gitignore +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.pre-commit-config.yaml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.prettierrc.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.vscode/extensions.json +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.vscode/settings.json +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/.vscode/tasks.json +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/AGENTS.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/LICENSE +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/.gitkeep +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/__manifest__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/models/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/tests/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/tests/data.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/addons/godoo_test_succ_mod/tests/test_succ.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/assets/odoo_logo.png +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/config/nginx.conf.template +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/config/postgresql.conf +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docker/docker-compose.traefik.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docker/postgres-init/10-vector.sql +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docs/architecture.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/docs/workspace.md +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/makefile +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/odoo_manifest.yml +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/package-lock.json +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/package.json +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/scripts/check_docstring_style.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/scripts/migrations/development/shrink_database.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/__main__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/common.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/passwords.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/query.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/db/reset.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/odoo_bin/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/root.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/config_parameters.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/modules.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/rpc/translations.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/dependencies.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/shell_scripts/odoo_banner.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/shell_scripts/render_report.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/runtime/status.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/test/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/test/cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/upgrade.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/common.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/configure.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/image.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/storage.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/commands/workspace/sync.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/database/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/database/connection.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/database/postgres.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/database/settings.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/database/state.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/git/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/git/git_url.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/git/repository.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/helpers/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/helpers/hashing.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/helpers/modules_git.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/helpers/progress.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/helpers/system.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/models/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/models/godoo_git_repo.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/models/godoo_manifest.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/models/godoo_models.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/models/godoo_modules.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/baseline.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/dataset.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/locks.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/nginx.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/odoo.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/runtime/status.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/editor.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/image.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/manifest.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/operations.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/specifications.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/storage.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/src/godoo_cli/workspace/types.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/__init__.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_db_archive_cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_db_query_cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_odoo_bin_commands.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_rpc_commands.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_runtime_dependencies.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_runtime_shell_scripts.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_test_run.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/commands/test_upgrade.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/database/test_db_query.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/database/test_db_reset.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/database/test_db_restore.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/git/test_git_url_uri.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_archive_crc.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_baseline_recovery.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_database_copy.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_dataset.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_filestore_copy.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_init_policy.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_lifecycle_service.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_nginx.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_nginx_cli.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_odoo_config_generation.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_odoo_preflight.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_odoo_version_compatibility.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_report_url.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_reset_baseline.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_runtime_models.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_runtime_operations.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/runtime/test_runtime_source_environment.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/test_logging.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_godoo_manifest.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace_git.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace_image.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace_layout.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace_runtime_env.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/tests/workspace/test_workspace_storage.py +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/thirdparty/.gitkeep +0 -0
- {godoo_cli-1.0.1 → godoo_cli-1.0.3}/uv.lock +0 -0
|
@@ -28,9 +28,9 @@ environment options, source paths, lifecycle hooks, or generated proxy configura
|
|
|
28
28
|
upstream; downstream owns images, Compose, mounts, runtime users, service ordering, and project hooks. Check whether the
|
|
29
29
|
downstream pin includes the required fix before proposing another implementation.
|
|
30
30
|
|
|
31
|
-
`runtime
|
|
32
|
-
|
|
33
|
-
orchestration.
|
|
31
|
+
`runtime start` initializes and reconciles explicitly before launching the same target on every app process start. Keep
|
|
32
|
+
maintenance `runtime init` out of ordinary startup; the app depends on a healthy database. `runtime launch` starts
|
|
33
|
+
prepared state only. gOdoo provides no downstream service orchestration.
|
|
34
34
|
|
|
35
35
|
Use the downstream Make/Compose path for authorized runtime validation. Reuse host-resolved workspace paths rather than
|
|
36
36
|
assembling a substitute container with guessed addon mounts. A pin change needs a rebuilt artifact and, when live
|
|
@@ -32,3 +32,7 @@ ODOO_DB_PORT=5432
|
|
|
32
32
|
# ODOO_RPC_USER=admin
|
|
33
33
|
# ODOO_RPC_PASSWORD=admin
|
|
34
34
|
# ODOO_RPC_DB_NAME=odoo
|
|
35
|
+
|
|
36
|
+
# runtime start reconciles before every server process start, including Docker restart.
|
|
37
|
+
# The first source-baseline run deliberately updates installed source-backed modules.
|
|
38
|
+
GODOO_UPDATE_CHANGED=true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gOdoo-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: Odoo lifecycle, Python dependency preflight, and shared Git workspaces.
|
|
5
5
|
Project-URL: repository, https://github.com/OpenJKSoftware/gOdoo
|
|
6
6
|
Author-email: Joshua Kreuder <Joshua_Kreuder@outlook.com>
|
|
@@ -144,19 +144,20 @@ in the Python environment that contains Odoo; gOdoo uses `VIRTUAL_ENV`, otherwis
|
|
|
144
144
|
Commands read the project `.env`. **Explicit CLI values → exported environment → project `.env`** is the configuration
|
|
145
145
|
precedence. Use `godoo --help` or `godoo <command> --help` for the full reference.
|
|
146
146
|
|
|
147
|
-
### Prepare
|
|
147
|
+
### Prepare on every server start
|
|
148
148
|
|
|
149
149
|
Initialization prepares the database and matching filestore, checks dependencies, and runs selected module updates and
|
|
150
|
-
hooks.
|
|
151
|
-
|
|
150
|
+
hooks. `runtime start` performs this work before launching Odoo on the same target. Use it as the app entrypoint so
|
|
151
|
+
Docker restarts also prepare the runtime; the app depends on a healthy database.
|
|
152
152
|
|
|
153
153
|
```bash
|
|
154
154
|
# Run in a configured runtime environment with other Odoo writers stopped.
|
|
155
|
-
godoo runtime
|
|
155
|
+
godoo runtime start --update-changed
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
`--update-changed` selects native upgrades from source hashes; unchanged starts skip upgrades. Explicit maintenance
|
|
159
|
+
`runtime init` and prepared-only `runtime launch` remain available. `runtime init --if-needed` skips all hooks and
|
|
160
|
+
reconciliation on a ready runtime; `runtime start` always initializes explicitly. Inspect state without changing it:
|
|
160
161
|
|
|
161
162
|
```bash
|
|
162
163
|
godoo runtime status --json
|
|
@@ -109,19 +109,20 @@ in the Python environment that contains Odoo; gOdoo uses `VIRTUAL_ENV`, otherwis
|
|
|
109
109
|
Commands read the project `.env`. **Explicit CLI values → exported environment → project `.env`** is the configuration
|
|
110
110
|
precedence. Use `godoo --help` or `godoo <command> --help` for the full reference.
|
|
111
111
|
|
|
112
|
-
### Prepare
|
|
112
|
+
### Prepare on every server start
|
|
113
113
|
|
|
114
114
|
Initialization prepares the database and matching filestore, checks dependencies, and runs selected module updates and
|
|
115
|
-
hooks.
|
|
116
|
-
|
|
115
|
+
hooks. `runtime start` performs this work before launching Odoo on the same target. Use it as the app entrypoint so
|
|
116
|
+
Docker restarts also prepare the runtime; the app depends on a healthy database.
|
|
117
117
|
|
|
118
118
|
```bash
|
|
119
119
|
# Run in a configured runtime environment with other Odoo writers stopped.
|
|
120
|
-
godoo runtime
|
|
120
|
+
godoo runtime start --update-changed
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
`--update-changed` selects native upgrades from source hashes; unchanged starts skip upgrades. Explicit maintenance
|
|
124
|
+
`runtime init` and prepared-only `runtime launch` remain available. `runtime init --if-needed` skips all hooks and
|
|
125
|
+
reconciliation on a ready runtime; `runtime start` always initializes explicitly. Inspect state without changing it:
|
|
125
126
|
|
|
126
127
|
```bash
|
|
127
128
|
godoo runtime status --json
|
|
@@ -48,7 +48,7 @@ RUN --mount=type=cache,target=/root/.cache/uv,sharing=locked \
|
|
|
48
48
|
&& chown -R odoo:odoo "$VIRTUAL_ENV"
|
|
49
49
|
WORKDIR /odoo/godoo_workspace
|
|
50
50
|
USER odoo
|
|
51
|
-
CMD ["python", "-m", "godoo_cli", "runtime", "
|
|
51
|
+
CMD ["python", "-m", "godoo_cli", "runtime", "start"]
|
|
52
52
|
|
|
53
53
|
# Materialize selected sources from read-only mounts without Git commands or worktree scans.
|
|
54
54
|
FROM dependencies AS materialized
|
|
@@ -86,4 +86,4 @@ RUN --mount=type=cache,target=/root/.cache/uv,sharing=locked \
|
|
|
86
86
|
COPY --from=materialized --chown=odoo:odoo /image/odoo/ /odoo/
|
|
87
87
|
WORKDIR /odoo/godoo_workspace
|
|
88
88
|
USER odoo
|
|
89
|
-
CMD ["godoo", "runtime", "
|
|
89
|
+
CMD ["godoo", "runtime", "start"]
|
|
@@ -23,6 +23,9 @@ x-runtime: &runtime
|
|
|
23
23
|
ODOO_WORKSPACE_ADDON_LOCATION: ${ODOO_WORKSPACE_ADDON_LOCATION:-/odoo/godoo_workspace/addons}
|
|
24
24
|
ODOO_CONF_PATH: ${ODOO_CONF_PATH:-/odoo/config/odoo.conf}
|
|
25
25
|
GODOO_RUNTIME_SEED: "${GODOO_RUNTIME_SEED:-}"
|
|
26
|
+
GODOO_UPDATE_CHANGED: ${GODOO_UPDATE_CHANGED:-true}
|
|
27
|
+
GODOO_RECONCILE_UPDATE: "${GODOO_RECONCILE_UPDATE:-}"
|
|
28
|
+
GODOO_RECONCILE_INSTALL: "${GODOO_RECONCILE_INSTALL:-}"
|
|
26
29
|
GODOO_X_SENDFILE: ${GODOO_X_SENDFILE:-true}
|
|
27
30
|
GODOO_HOOK_DIRS: "${GODOO_HOOK_DIRS:-}"
|
|
28
31
|
GODOO_ENVIRONMENT: "${GODOO_ENVIRONMENT:-}"
|
|
@@ -37,16 +40,17 @@ x-runtime: &runtime
|
|
|
37
40
|
services:
|
|
38
41
|
init:
|
|
39
42
|
<<: *runtime
|
|
43
|
+
profiles: [maintenance]
|
|
40
44
|
command: [godoo, runtime, init]
|
|
41
45
|
depends_on:
|
|
42
46
|
db:
|
|
43
47
|
condition: service_healthy
|
|
44
48
|
app:
|
|
45
49
|
<<: *runtime
|
|
46
|
-
command: [godoo, runtime,
|
|
50
|
+
command: [godoo, runtime, start, "--extra-args=${ODOO_BIN_ARGS:+${ODOO_BIN_ARGS} }--proxy-mode"]
|
|
47
51
|
depends_on:
|
|
48
|
-
|
|
49
|
-
condition:
|
|
52
|
+
db:
|
|
53
|
+
condition: service_healthy
|
|
50
54
|
nginx:
|
|
51
55
|
build:
|
|
52
56
|
context: ..
|
|
@@ -28,7 +28,7 @@ services:
|
|
|
28
28
|
-m,
|
|
29
29
|
godoo_cli,
|
|
30
30
|
runtime,
|
|
31
|
-
|
|
31
|
+
start,
|
|
32
32
|
"--extra-args=${ODOO_BIN_ARGS:+${ODOO_BIN_ARGS} }--workers=0 --proxy-mode",
|
|
33
33
|
]
|
|
34
34
|
volumes:
|
|
@@ -39,6 +39,7 @@ services:
|
|
|
39
39
|
GODOO_RUNTIME_ODOO_PATH: ${GODOO_RUNTIME_ODOO_PATH}
|
|
40
40
|
GODOO_RUNTIME_ADDON_PATHS: ${GODOO_RUNTIME_ADDON_PATHS}
|
|
41
41
|
GODOO_DEV_MODE: "1"
|
|
42
|
+
GODOO_KEEP_RESET_BASELINE: ${GODOO_KEEP_RESET_BASELINE:-true}
|
|
42
43
|
ODOO_MANIFEST: /odoo/godoo_workspace/odoo_manifest.yml
|
|
43
44
|
PYTHONPATH: /odoo/godoo_workspace/src
|
|
44
45
|
|
|
@@ -8,16 +8,15 @@ database topology is a same-host PostgreSQL sidecar on an isolated Compose netwo
|
|
|
8
8
|
|
|
9
9
|
## Service and ownership boundaries
|
|
10
10
|
|
|
11
|
-
This diagram shows **Compose startup dependencies**, not HTTP traffic. A failed database healthcheck
|
|
12
|
-
|
|
13
|
-
[HTTP and file delivery](#http-and-file-delivery) section describes request routing.
|
|
11
|
+
This diagram shows **Compose startup dependencies**, not HTTP traffic. A failed database healthcheck prevents app
|
|
12
|
+
startup; failed preparation makes the app exit before it serves. “App service started” is a Compose state, not proof of
|
|
13
|
+
HTTP readiness. The [HTTP and file delivery](#http-and-file-delivery) section describes request routing.
|
|
14
14
|
|
|
15
15
|
```mermaid
|
|
16
16
|
flowchart TD
|
|
17
17
|
Compose["Operator runs downstream Docker Compose"]
|
|
18
18
|
Compose --> DB["Compose starts db<br/>and waits for PostgreSQL's healthcheck"]
|
|
19
|
-
DB -->|database healthy|
|
|
20
|
-
Init -->|init exits with code 0| App["Compose starts app<br/>godoo runtime launch starts Odoo"]
|
|
19
|
+
DB -->|database healthy| App["Compose starts app<br/>godoo runtime start prepares, then serves"]
|
|
21
20
|
App -->|app service started| Nginx["Compose starts nginx<br/>HTTP ingress becomes available"]
|
|
22
21
|
```
|
|
23
22
|
|
|
@@ -61,22 +60,32 @@ healthcheck from [the base Compose file](../docker/docker-compose.base.yml).
|
|
|
61
60
|
|
|
62
61
|
```yaml
|
|
63
62
|
services:
|
|
64
|
-
|
|
65
|
-
command: [godoo, runtime,
|
|
63
|
+
app:
|
|
64
|
+
command: [godoo, runtime, start]
|
|
65
|
+
environment:
|
|
66
|
+
GODOO_UPDATE_CHANGED: "true"
|
|
66
67
|
depends_on:
|
|
67
68
|
db:
|
|
68
69
|
condition: service_healthy
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
init:
|
|
72
|
+
profiles: [maintenance]
|
|
73
|
+
command: [godoo, runtime, init] # Explicit maintenance, excluded from ordinary startup.
|
|
72
74
|
depends_on:
|
|
73
|
-
|
|
74
|
-
condition:
|
|
75
|
+
db:
|
|
76
|
+
condition: service_healthy
|
|
75
77
|
```
|
|
76
78
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
The app owns initialization on every process start, including Docker restarts. Give it all restore dataset mounts and
|
|
80
|
+
settings previously provided to init; seed datasets should be read-only. Stop existing Odoo writers before deployment or
|
|
81
|
+
maintenance initialization. The supported scope is one app service, not concurrent replicas writing the same runtime.
|
|
82
|
+
Use routed HTTP readiness after app startup; a running or restarting container does not prove initialization succeeded.
|
|
83
|
+
|
|
84
|
+
`runtime start` always reconciles and ignores `GODOO_INIT_IF_EMPTY`. That variable still controls standalone
|
|
85
|
+
`runtime init`. Demo mode ignores configured datasets and rejects an explicit seed. All pair operations share the same
|
|
86
|
+
data directory. For maintenance, `docker compose run --rm init` explicitly selects the profiled service. Do not also
|
|
87
|
+
start it through an ordinary deployment service list. Use `runtime launch` only when preparation is deliberately owned
|
|
88
|
+
by a separate caller.
|
|
80
89
|
|
|
81
90
|
## PostgreSQL
|
|
82
91
|
|
|
@@ -18,7 +18,7 @@ Ordinary restores and major upgrades share the same initialization flow.
|
|
|
18
18
|
|
|
19
19
|
Native migration versions must be above the installed version and at or below the manifest version. Fresh installs need
|
|
20
20
|
their own install behavior. There is no transition directory, version-pair selector, implicit module list, or hook
|
|
21
|
-
completion
|
|
21
|
+
implicit migration scheduler. Ordinary database hooks can opt into transactional one-shot completion with `once=True`.
|
|
22
22
|
|
|
23
23
|
## Discover and select hooks
|
|
24
24
|
|
|
@@ -49,6 +49,7 @@ actual boolean. A missing predicate runs whenever eligible; an exception fails i
|
|
|
49
49
|
| `phase` | `prepare`, `after_bootstrap`, `after_restore`, or `after_reconcile`. |
|
|
50
50
|
| `on` | Tuple of `ready`, `bootstrapped`, and/or `restored`; defaults to all. Custom outcome filters are invalid for preparation. |
|
|
51
51
|
| `environments` | Optional tuple of exact `GODOO_ENVIRONMENT` values. Omitted means unrestricted; an allowlist never matches an unset environment. |
|
|
52
|
+
| `once` | Optional boolean, default false. Record successful database-hook completion; preparation hooks cannot use it. |
|
|
52
53
|
|
|
53
54
|
Environment is a deployment input, never inferred from database contents.
|
|
54
55
|
|
|
@@ -101,8 +102,9 @@ Database contexts expose `ctx.env`, `ctx.environment`, and the original `ctx.out
|
|
|
101
102
|
lifecycle markers as an API, rebuild the registry, or perform immediate module installs/updates. Module loading belongs
|
|
102
103
|
in native reconciliation.
|
|
103
104
|
|
|
104
|
-
An eligible `after_restore` database hook conflicts with native pre-upgrade scripts because it would open the
|
|
105
|
-
first.
|
|
105
|
+
An eligible `after_restore` database hook conflicts with selected native pre-upgrade scripts because it would open the
|
|
106
|
+
registry first. `--update-changed` requires database hooks to use `after_reconcile`; it rejects eligible `after_restore`
|
|
107
|
+
and `after_bootstrap` declarations rather than changing their order. Put post-upgrade setup in `after_reconcile`.
|
|
106
108
|
|
|
107
109
|
## Execution and transaction boundaries
|
|
108
110
|
|
|
@@ -147,8 +149,20 @@ already satisfied, running, completed, or failed. Do not log passwords or comple
|
|
|
147
149
|
|
|
148
150
|
## Idempotence and recovery
|
|
149
151
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
Ordinary hooks run whenever eligible, subject to `needs_run`. `on=("restored",)` selects restore initialization and its
|
|
153
|
+
retries; it is not a completion record.
|
|
154
|
+
|
|
155
|
+
Use `Hook(id="project.repair.2026_10", phase="after_reconcile", once=True)` for a transactional one-shot repair. IDs are
|
|
156
|
+
immutable: use a new ID for a new repair. The runner stores completion in `ir_config_parameter` under
|
|
157
|
+
`godoo.hooks.once.<identity-hash>`, in the same transaction as the action. Unrestricted hooks complete globally in that
|
|
158
|
+
database; environment-restricted hooks complete separately for each selected environment. Restores and baseline resets
|
|
159
|
+
carry or rewind the records with the database. Declaration filters still apply, and duplicate IDs remain invalid.
|
|
160
|
+
|
|
161
|
+
Completed hooks skip `needs_run`. A false predicate means the desired state is already satisfied and records completion
|
|
162
|
+
atomically without running the action. An exception rolls back the action and its completion record. A later hook's
|
|
163
|
+
failure preserves earlier committed repairs. Hooks that commit internally or change external systems still need their
|
|
164
|
+
own idempotency: the runner cannot promise exactly-once external effects. Keep recurring environment policy repeatable,
|
|
165
|
+
with state predicates, so ordinary drift is repaired after every controlled start.
|
|
152
166
|
|
|
153
167
|
| Attempt | Outcome visible to hooks |
|
|
154
168
|
| ---------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
@@ -16,44 +16,79 @@ Run in the configured downstream runtime environment. CLI values override export
|
|
|
16
16
|
```bash
|
|
17
17
|
# Prepare and reconcile explicitly, including on an already ready database.
|
|
18
18
|
# Other Odoo writers must be stopped.
|
|
19
|
-
godoo runtime
|
|
19
|
+
godoo runtime start --update-changed
|
|
20
20
|
|
|
21
|
-
#
|
|
21
|
+
# Optional maintenance policy: skip all hooks and reconciliation on a ready runtime.
|
|
22
22
|
godoo runtime init --if-needed && godoo runtime launch
|
|
23
23
|
|
|
24
24
|
# Inspect state without changing the runtime.
|
|
25
25
|
godoo runtime status --json
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
`runtime start` uses the existing init and launch options, resolves one target, and always initializes explicitly before
|
|
29
|
+
serving. It ignores `GODOO_INIT_IF_EMPTY` and has no `--if-needed` option. Bootstrap arguments apply only to
|
|
30
|
+
initialization; server/debugger arguments apply only to launch. Failed initialization returns nonzero without launching,
|
|
31
|
+
and lifecycle locks are released before the server lifetime.
|
|
32
|
+
|
|
33
|
+
For separate maintenance commands, set `GODOO_INIT_IF_EMPTY=true` for conditional init; use `--no-if-needed` to override
|
|
34
|
+
it for deployment jobs that must apply updates or hooks. Conditional init prints the same JSON payload as
|
|
30
35
|
`runtime status --json` and checks readiness before loading datasets, hooks, or Odoo.
|
|
31
36
|
|
|
32
37
|
The diagram below starts when initialization is required or explicitly requested. A ready runtime skipped by
|
|
33
38
|
`--if-needed` exits before this work. Each arrow means the preceding step succeeded; failures stop initialization.
|
|
34
|
-
|
|
35
|
-
retries rerun hooks for the original outcome, as described under
|
|
39
|
+
`runtime start` launches after this work succeeds; `runtime init` exits without serving. The bootstrap/restore branches
|
|
40
|
+
show first initialization; recovery retries rerun hooks for the original outcome, as described under
|
|
36
41
|
[incomplete initialization](#incomplete-initialization).
|
|
37
42
|
|
|
38
43
|
```mermaid
|
|
39
44
|
flowchart TD
|
|
40
|
-
Prepare["
|
|
41
|
-
State -->|ready|
|
|
42
|
-
State -->|missing or empty| Seed{"
|
|
43
|
-
State -->|inconsistent| Stop["Stop
|
|
44
|
-
Seed -->|yes| Restore["
|
|
45
|
-
Seed -->|no| Bootstrap["Odoo
|
|
46
|
-
Restore -->
|
|
47
|
-
Bootstrap -->
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
Reconcile -->
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
Prepare["Prepare hooks and dependency preflight"] --> State{"Database and filestore state"}
|
|
46
|
+
State -->|ready| Plan["Registry-free source selection when enabled"]
|
|
47
|
+
State -->|missing or empty| Seed{"Seed selected?"}
|
|
48
|
+
State -->|inconsistent| Stop["Stop; recover a matching pair"]
|
|
49
|
+
Seed -->|yes| Restore["Restore backup and matching attachments"]
|
|
50
|
+
Seed -->|no| Bootstrap["Native Odoo bootstrap"]
|
|
51
|
+
Restore --> Plan
|
|
52
|
+
Bootstrap --> Plan
|
|
53
|
+
Plan --> OutcomeHooks["Eligible after_restore / after_bootstrap hooks<br/>Legacy ordering; excluded with update-changed"]
|
|
54
|
+
OutcomeHooks --> Reconcile["Native module reconciliation"]
|
|
55
|
+
Reconcile --> Baseline["Verify and save the planned source baseline when enabled"]
|
|
56
|
+
Baseline --> Finalize["Eligible after_reconcile hooks"]
|
|
57
|
+
Finalize --> Ready["Clear pending lifecycle state"]
|
|
58
|
+
Ready --> Launch["runtime start launches Odoo<br/>runtime init exits"]
|
|
53
59
|
```
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
Use `runtime start` as the app entrypoint so Docker restarts also prepare the runtime. Keep `runtime init` as explicit
|
|
62
|
+
maintenance tooling; do not also run a second init service during ordinary startup. gOdoo does not start downstream
|
|
63
|
+
services itself.
|
|
64
|
+
|
|
65
|
+
### Source-driven native reconciliation
|
|
66
|
+
|
|
67
|
+
`--update-changed` or `GODOO_UPDATE_CHANGED=true` selects source changes without loading an Odoo registry. Under the
|
|
68
|
+
runtime lock, after restore/bootstrap and before database hooks, gOdoo reads installed and pending module state and
|
|
69
|
+
compares source snapshots. A missing baseline deliberately upgrades installed source-backed modules once. Later
|
|
70
|
+
unchanged starts request no native updates. Explicit `--update` selections remain explicit; desired installs already
|
|
71
|
+
installed or queued for upgrade are filtered out. Native Odoo expands upgrade dependents and installs new dependencies.
|
|
72
|
+
Pending install/upgrade states are included; pending removals need a selected native action or initialization fails.
|
|
73
|
+
|
|
74
|
+
The independent `godoo.runtime.source_checksums.v1` parameter stores JSON `{"format": 1, "modules": {name: sha256}}`.
|
|
75
|
+
Hashes include deterministic relative filenames and content, all translations regardless of active languages, and core
|
|
76
|
+
Python package sources as part of `base`. Tests, static assets, Git metadata, Python bytecode, and editor swap files are
|
|
77
|
+
excluded. Installed, pending, and requested addons plus their source dependencies are snapshotted before native work. If
|
|
78
|
+
that set can introduce installs, potential auto-install addons and their dependencies are captured too. Unrelated
|
|
79
|
+
ordinary addons are not hashed unless the caller explicitly selects `all`. Imported addons and pathless Studio
|
|
80
|
+
customization are not source modules. Corrupt baseline data fails visibly.
|
|
81
|
+
|
|
82
|
+
Missing installed sources may be deferred only when a selected native update will run configured pre-upgrade cleanup.
|
|
83
|
+
They must be removed or repaired before a strict post-native rescan. Other missing sources fail initialization. Valid
|
|
84
|
+
native upgrade paths can remain configured without forcing an update; pre-upgrade scripts run only with native update
|
|
85
|
+
selections. These settings are dormant on unchanged starts.
|
|
86
|
+
|
|
87
|
+
Only a successful native process with no unfinished module states can advance the baseline. gOdoo verifies final
|
|
88
|
+
installed sources against the snapshot taken before native work and saves that snapshot before post-hooks. Source drift
|
|
89
|
+
or failed native work leaves the old baseline; failed post-hooks retain the successful baseline and earlier completed
|
|
90
|
+
one-shot hooks. The pending lifecycle marker remains until all phases succeed. Native Odoo can commit partial work; this
|
|
91
|
+
is not an atomic module-upgrade guarantee. See the native migration recovery limits in [Hooks](hooks.md).
|
|
57
92
|
|
|
58
93
|
Backups use native Odoo commands on Odoo 19 or newer and PostgreSQL tools on Odoo 16–18.
|
|
59
94
|
|
|
@@ -112,9 +147,9 @@ filestore, SQL and archive overlays are staged once and reused. Disabling the fu
|
|
|
112
147
|
checks. CRC checks detect accidental corruption; they do not establish the archive's origin.
|
|
113
148
|
|
|
114
149
|
On Linux, gOdoo probes one nonempty file before recursive reflink copying, then falls back to rsync or Python copying.
|
|
115
|
-
|
|
116
|
-
[dataset storage](downstream.md#restore-dataset-storage). Reset
|
|
117
|
-
may count shared data more than once.
|
|
150
|
+
Rsync shows progress only when stdout is a terminal; diagnostics remain visible in captured output. Desktop bind mounts
|
|
151
|
+
can make many small attachment copies expensive; see [dataset storage](downstream.md#restore-dataset-storage). Reset
|
|
152
|
+
baselines can share reflink extents, so logical sizes may count shared data more than once.
|
|
118
153
|
|
|
119
154
|
The official upgrade client reports phase start and completion or failure without a heartbeat. Child processes retain
|
|
120
155
|
their native streams. gOdoo forwards SIGINT/SIGTERM, waits for shutdown, and preserves child exit status.
|
|
@@ -267,7 +302,9 @@ make dev
|
|
|
267
302
|
|
|
268
303
|
`godoo db reset` performs the pair operation; callers must stop writers first. `--db-template` selects another database
|
|
269
304
|
with its matching filestore; `--empty` retains drop-only behavior. Reset copies the database and uses rsync to delete
|
|
270
|
-
filestore files absent from the baseline. PostgreSQL's faster copy method is used when available.
|
|
305
|
+
filestore files absent from the baseline. PostgreSQL's faster copy method is used when available. At default verbosity,
|
|
306
|
+
reset logs lock waiting, baseline checks, database and filestore operations, lifecycle updates, and successful
|
|
307
|
+
completion. `--empty` logs database removal and filestore cleanup too.
|
|
271
308
|
|
|
272
309
|
An interrupted reset can leave an incomplete active filestore: its marker blocks init, so rerun reset. A missing or
|
|
273
310
|
incomplete baseline needs a fresh restore. The next init reruns restore hooks, native reconciliation, and final hooks.
|
|
@@ -15,6 +15,8 @@ from ..workspace.types import ResolvedSource
|
|
|
15
15
|
LOGGER = logging.getLogger(__name__)
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
# Resolve distinct CLI, config, and argv inputs before constructing GodooConfig; override precedence stays explicit.
|
|
19
|
+
# pylint: disable-next=too-many-arguments
|
|
18
20
|
def resolve_command_config(
|
|
19
21
|
*,
|
|
20
22
|
odoo_main_path: Path,
|
|
@@ -50,6 +50,8 @@ def dump_database(
|
|
|
50
50
|
return CLI.returner(1)
|
|
51
51
|
|
|
52
52
|
|
|
53
|
+
# Typer declares each archive-restore option in this public callback signature.
|
|
54
|
+
# pylint: disable-next=too-many-arguments
|
|
53
55
|
def load_database(
|
|
54
56
|
db_name: Annotated[str, CLI.database.db_name],
|
|
55
57
|
archive_path: Annotated[Path, typer.Argument()],
|
|
@@ -36,6 +36,8 @@ def _uses_managed_server_config(arguments: list[str]) -> bool:
|
|
|
36
36
|
return _odoo_command_name(arguments) in {None, "server"}
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
# Typer declares each passthrough command option in this public callback signature.
|
|
40
|
+
# pylint: disable-next=too-many-arguments
|
|
39
41
|
def run_odoo(
|
|
40
42
|
arguments: Annotated[list[str], typer.Argument(help="Arguments to pass directly to odoo-bin.")],
|
|
41
43
|
odoo_main_path: Annotated[Path, CLI.odoo_paths.bin_path],
|
|
@@ -8,6 +8,7 @@ from .dependencies import runtime_dependencies
|
|
|
8
8
|
from .init import deployment_init_odoo_runtime
|
|
9
9
|
from .launch import launch_odoo
|
|
10
10
|
from .shell import odoo_shell, odoo_shell_run_script
|
|
11
|
+
from .start import start_odoo_runtime
|
|
11
12
|
from .status import runtime_status
|
|
12
13
|
|
|
13
14
|
LOGGER = logging.getLogger(__name__)
|
|
@@ -20,6 +21,7 @@ def runtime_cli_app() -> typer.Typer:
|
|
|
20
21
|
help="Manage an Odoo runtime: its lifecycle, database, and matching filestore.",
|
|
21
22
|
)
|
|
22
23
|
app.command("init")(deployment_init_odoo_runtime)
|
|
24
|
+
app.command("start")(start_odoo_runtime)
|
|
23
25
|
app.command("dependencies")(runtime_dependencies)
|
|
24
26
|
app.command("launch")(launch_odoo)
|
|
25
27
|
app.command("status")(runtime_status)
|