gOdoo-cli 0.17.0__tar.gz → 1.0.1__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/.agents/skills/godoo-changeset-review/SKILL.md +29 -0
- godoo_cli-1.0.1/.agents/skills/godoo-editor-validation/SKILL.md +26 -0
- godoo_cli-1.0.1/.agents/skills/godoo-runtime-validation/SKILL.md +54 -0
- godoo_cli-1.0.1/.agents/skills/godoo-source-workspaces/SKILL.md +20 -0
- godoo_cli-1.0.1/.dockerignore +18 -0
- godoo_cli-1.0.1/.env.sample +34 -0
- godoo_cli-1.0.1/.github/workflows/README.md +88 -0
- godoo_cli-1.0.1/.github/workflows/quality.yml +52 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.github/workflows/version-bump.yml +1 -1
- godoo_cli-1.0.1/.github/workflows/version-publish.yml +144 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.gitignore +5 -2
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.pre-commit-config.yaml +3 -3
- godoo_cli-1.0.1/.vscode/extensions.json +16 -0
- godoo_cli-1.0.1/.vscode/settings.json +35 -0
- godoo_cli-1.0.1/.vscode/tasks.json +27 -0
- godoo_cli-1.0.1/AGENTS.md +37 -0
- godoo_cli-1.0.1/PKG-INFO +225 -0
- godoo_cli-1.0.1/README.md +190 -0
- godoo_cli-1.0.1/addons/godoo_test_succ_mod/__init__.py +3 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/addons/godoo_test_succ_mod/models/__init__.py +1 -1
- godoo_cli-1.0.1/addons/godoo_test_succ_mod/tests/__init__.py +3 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/addons/godoo_test_succ_mod/tests/data.py +2 -2
- godoo_cli-1.0.1/config/nginx.conf.template +84 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/config/postgresql.conf +15 -14
- godoo_cli-1.0.1/docker/Dockerfile +89 -0
- godoo_cli-1.0.1/docker/docker-compose.base.yml +93 -0
- godoo_cli-1.0.1/docker/docker-compose.dev.yml +52 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/docker/docker-compose.traefik.yml +1 -3
- godoo_cli-1.0.1/docker/postgres-init/10-vector.sql +3 -0
- godoo_cli-1.0.1/docs/architecture.md +77 -0
- godoo_cli-1.0.1/docs/downstream.md +260 -0
- godoo_cli-1.0.1/docs/hooks.md +209 -0
- godoo_cli-1.0.1/docs/lifecycle.md +322 -0
- godoo_cli-1.0.1/docs/workspace.md +120 -0
- godoo_cli-1.0.1/makefile +71 -0
- godoo_cli-1.0.1/odoo_manifest.yml +24 -0
- godoo_cli-1.0.1/package-lock.json +28 -0
- godoo_cli-1.0.1/package.json +6 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/pyproject.toml +32 -49
- godoo_cli-1.0.1/scripts/check_docstring_style.py +71 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/scripts/migrations/development/shrink_database.py +4 -9
- godoo_cli-1.0.1/src/godoo_cli/__about__.py +3 -0
- godoo_cli-1.0.1/src/godoo_cli/__init__.py +3 -0
- godoo_cli-1.0.1/src/godoo_cli/__main__.py +6 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/__init__.py +9 -0
- godoo_cli-0.17.0/src/godoo_cli/cli_common.py → godoo_cli-1.0.1/src/godoo_cli/commands/common.py +51 -49
- godoo_cli-1.0.1/src/godoo_cli/commands/configuration.py +237 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/db/__init__.py +5 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/db/archive.py +122 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/db/cli.py +45 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/db/passwords.py +6 -21
- godoo_cli-1.0.1/src/godoo_cli/commands/db/query.py +86 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/db/reset.py +47 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/odoo_bin/__init__.py +1 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/root.py +99 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/rpc/__init__.py +6 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/rpc/cli.py +3 -22
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/rpc/config_parameters.py +12 -15
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/rpc/importer.py +5 -15
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/rpc/modules.py +16 -44
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/commands/rpc/translations.py +8 -44
- godoo_cli-1.0.1/src/godoo_cli/commands/run.py +88 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/__init__.py +28 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/dependencies.py +129 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/init.py +398 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/launch.py +114 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/shell.py +163 -0
- {godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin → godoo_cli-1.0.1/src/godoo_cli/commands/runtime}/shell_scripts/odoo_banner.py +15 -26
- {godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin → godoo_cli-1.0.1/src/godoo_cli/commands/runtime}/shell_scripts/render_report.py +9 -44
- godoo_cli-1.0.1/src/godoo_cli/commands/runtime/status.py +39 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/test/__init__.py +5 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/test/cli.py +19 -0
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/godoo_test/test_load_data.py → godoo_cli-1.0.1/src/godoo_cli/commands/test/load_data.py +34 -24
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/godoo_test/test_run.py → godoo_cli-1.0.1/src/godoo_cli/commands/test/run.py +78 -59
- godoo_cli-1.0.1/src/godoo_cli/commands/upgrade.py +109 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/__init__.py +24 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/common.py +61 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/configure.py +47 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/image.py +81 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/storage.py +48 -0
- godoo_cli-1.0.1/src/godoo_cli/commands/workspace/sync.py +52 -0
- godoo_cli-1.0.1/src/godoo_cli/database/__init__.py +7 -0
- godoo_cli-1.0.1/src/godoo_cli/database/connection.py +128 -0
- godoo_cli-1.0.1/src/godoo_cli/database/postgres.py +51 -0
- godoo_cli-1.0.1/src/godoo_cli/database/settings.py +31 -0
- godoo_cli-1.0.1/src/godoo_cli/database/state.py +94 -0
- godoo_cli-1.0.1/src/godoo_cli/git/__init__.py +4 -0
- godoo_cli-1.0.1/src/godoo_cli/git/git_url.py +94 -0
- godoo_cli-1.0.1/src/godoo_cli/git/repository.py +173 -0
- godoo_cli-1.0.1/src/godoo_cli/helpers/__init__.py +1 -0
- godoo_cli-1.0.1/src/godoo_cli/helpers/hashing.py +24 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/helpers/modules_git.py +6 -23
- godoo_cli-1.0.1/src/godoo_cli/helpers/progress.py +58 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/helpers/system.py +27 -115
- godoo_cli-1.0.1/src/godoo_cli/models/__init__.py +6 -0
- godoo_cli-1.0.1/src/godoo_cli/models/godoo_git_repo.py +5 -0
- godoo_cli-1.0.1/src/godoo_cli/models/godoo_manifest.py +5 -0
- godoo_cli-1.0.1/src/godoo_cli/models/godoo_models.py +190 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/src/godoo_cli/models/godoo_modules.py +33 -41
- godoo_cli-1.0.1/src/godoo_cli/runtime/__init__.py +13 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/archive.py +759 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/baseline.py +68 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/dataset.py +74 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/filestore.py +190 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/hooks.py +345 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/lifecycle.py +352 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/locks.py +171 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/nginx.py +83 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/odoo.py +1088 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/promotion.py +251 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/reset.py +208 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/restore.py +235 -0
- godoo_cli-1.0.1/src/godoo_cli/runtime/status.py +83 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/__init__.py +29 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/editor.py +88 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/git.py +1092 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/image.py +207 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/manifest.py +122 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/operations.py +513 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/specifications.py +142 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/storage.py +89 -0
- godoo_cli-1.0.1/src/godoo_cli/workspace/types.py +112 -0
- godoo_cli-1.0.1/tests/__init__.py +5 -0
- godoo_cli-1.0.1/tests/commands/test_db_archive_cli.py +116 -0
- godoo_cli-1.0.1/tests/commands/test_db_query_cli.py +112 -0
- godoo_cli-1.0.1/tests/commands/test_odoo_bin_commands.py +596 -0
- godoo_cli-1.0.1/tests/commands/test_rpc_commands.py +77 -0
- godoo_cli-1.0.1/tests/commands/test_runtime_cli.py +275 -0
- godoo_cli-1.0.1/tests/commands/test_runtime_dependencies.py +355 -0
- godoo_cli-1.0.1/tests/commands/test_runtime_shell_scripts.py +39 -0
- godoo_cli-1.0.1/tests/commands/test_test_run.py +155 -0
- godoo_cli-1.0.1/tests/commands/test_upgrade.py +265 -0
- godoo_cli-1.0.1/tests/conftest.py +12 -0
- godoo_cli-1.0.1/tests/database/test_db_query.py +111 -0
- godoo_cli-1.0.1/tests/database/test_db_reset.py +817 -0
- godoo_cli-1.0.1/tests/database/test_db_restore.py +478 -0
- godoo_cli-1.0.1/tests/git/test_git_url_uri.py +43 -0
- godoo_cli-1.0.1/tests/integration/test_container_contract.py +255 -0
- godoo_cli-1.0.1/tests/integration/test_odoo_integration.py +631 -0
- godoo_cli-1.0.1/tests/runtime/test_archive_crc.py +191 -0
- godoo_cli-1.0.1/tests/runtime/test_baseline_recovery.py +172 -0
- godoo_cli-1.0.1/tests/runtime/test_database_copy.py +169 -0
- godoo_cli-1.0.1/tests/runtime/test_dataset.py +187 -0
- godoo_cli-1.0.1/tests/runtime/test_filestore.py +880 -0
- godoo_cli-1.0.1/tests/runtime/test_filestore_copy.py +132 -0
- godoo_cli-1.0.1/tests/runtime/test_hooks.py +242 -0
- godoo_cli-1.0.1/tests/runtime/test_init_hooks.py +246 -0
- godoo_cli-1.0.1/tests/runtime/test_init_policy.py +328 -0
- godoo_cli-1.0.1/tests/runtime/test_lifecycle.py +94 -0
- godoo_cli-1.0.1/tests/runtime/test_lifecycle_service.py +226 -0
- godoo_cli-1.0.1/tests/runtime/test_nginx.py +171 -0
- godoo_cli-1.0.1/tests/runtime/test_nginx_cli.py +92 -0
- godoo_cli-1.0.1/tests/runtime/test_odoo_config_generation.py +207 -0
- godoo_cli-1.0.1/tests/runtime/test_odoo_preflight.py +906 -0
- godoo_cli-1.0.1/tests/runtime/test_odoo_version_compatibility.py +114 -0
- godoo_cli-1.0.1/tests/runtime/test_report_url.py +127 -0
- godoo_cli-1.0.1/tests/runtime/test_reset_baseline.py +142 -0
- godoo_cli-1.0.1/tests/runtime/test_runtime_models.py +114 -0
- godoo_cli-1.0.1/tests/runtime/test_runtime_operations.py +325 -0
- godoo_cli-1.0.1/tests/runtime/test_runtime_source_environment.py +240 -0
- godoo_cli-1.0.1/tests/test_logging.py +75 -0
- godoo_cli-1.0.1/tests/workspace/test_godoo_manifest.py +51 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace.py +199 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace_git.py +1051 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace_image.py +308 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace_layout.py +55 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace_runtime_env.py +89 -0
- godoo_cli-1.0.1/tests/workspace/test_workspace_storage.py +251 -0
- godoo_cli-1.0.1/uv.lock +2204 -0
- godoo_cli-0.17.0/.devcontainer/devcontainer.json +0 -103
- godoo_cli-0.17.0/.env.sample +0 -42
- godoo_cli-0.17.0/.eslintignore +0 -2
- godoo_cli-0.17.0/.eslintrc.yml +0 -187
- godoo_cli-0.17.0/.github/workflows/README.md +0 -85
- godoo_cli-0.17.0/.github/workflows/quality.yml +0 -101
- godoo_cli-0.17.0/.github/workflows/version-publish.yml +0 -75
- godoo_cli-0.17.0/.vscode/launch.json +0 -65
- godoo_cli-0.17.0/PKG-INFO +0 -218
- godoo_cli-0.17.0/README.md +0 -187
- godoo_cli-0.17.0/addons/godoo_test_succ_mod/__init__.py +0 -3
- godoo_cli-0.17.0/addons/godoo_test_succ_mod/tests/__init__.py +0 -3
- godoo_cli-0.17.0/assets/godoo-main-cli.png +0 -0
- godoo_cli-0.17.0/config/nginx-proxy_headers.conf +0 -13
- godoo_cli-0.17.0/config/nginx.conf +0 -116
- godoo_cli-0.17.0/config/supervisord.conf +0 -23
- godoo_cli-0.17.0/docker/Dockerfile +0 -222
- godoo_cli-0.17.0/docker/cups/Dockerfile +0 -46
- godoo_cli-0.17.0/docker/cups/config/cups-pdf.conf +0 -306
- godoo_cli-0.17.0/docker/cups/config/cupsd.conf +0 -129
- godoo_cli-0.17.0/docker/cups/cups_entrypoint.sh +0 -17
- godoo_cli-0.17.0/docker/depends_build.sh +0 -32
- godoo_cli-0.17.0/docker/depends_runtime.sh +0 -33
- godoo_cli-0.17.0/docker/docker-compose.base.yml +0 -43
- godoo_cli-0.17.0/docker/docker-compose.devcontainer-traefik.yml +0 -25
- godoo_cli-0.17.0/docker/docker-compose.devcontainer.yml +0 -18
- godoo_cli-0.17.0/docker/psql.gpg +0 -0
- godoo_cli-0.17.0/godoo_src.code-workspace +0 -16
- godoo_cli-0.17.0/makefile +0 -33
- godoo_cli-0.17.0/odoo_manifest.yml +0 -26
- godoo_cli-0.17.0/scripts/container_requirements.sh +0 -33
- godoo_cli-0.17.0/scripts/launchodoo.sh +0 -58
- godoo_cli-0.17.0/scripts/reset_devcontainer.sh +0 -120
- godoo_cli-0.17.0/src/godoo_cli/__about__.py +0 -11
- godoo_cli-0.17.0/src/godoo_cli/__init__.py +0 -13
- godoo_cli-0.17.0/src/godoo_cli/__main__.py +0 -10
- godoo_cli-0.17.0/src/godoo_cli/cli.py +0 -120
- godoo_cli-0.17.0/src/godoo_cli/commands/__init__.py +0 -28
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/__init__.py +0 -10
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/cli.py +0 -36
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/dump.py +0 -112
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/load.py +0 -117
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/pull.py +0 -221
- godoo_cli-0.17.0/src/godoo_cli/commands/backup/util.py +0 -53
- godoo_cli-0.17.0/src/godoo_cli/commands/config.py +0 -44
- godoo_cli-0.17.0/src/godoo_cli/commands/db/__init__.py +0 -10
- godoo_cli-0.17.0/src/godoo_cli/commands/db/cli.py +0 -64
- godoo_cli-0.17.0/src/godoo_cli/commands/db/query.py +0 -174
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/__init__.py +0 -6
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/bootstrap.py +0 -212
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/cli_generate.py +0 -150
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/godoo_test/__init__.py +0 -5
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/godoo_test/cli.py +0 -31
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/launch.py +0 -196
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/shell.py +0 -184
- godoo_cli-0.17.0/src/godoo_cli/commands/odoo_bin/shell_scripts/pregenerate_assets.py +0 -34
- godoo_cli-0.17.0/src/godoo_cli/commands/rpc/__init__.py +0 -19
- godoo_cli-0.17.0/src/godoo_cli/commands/source_get.py +0 -371
- godoo_cli-0.17.0/src/godoo_cli/git/__init__.py +0 -11
- godoo_cli-0.17.0/src/godoo_cli/git/git_odoo_addons.py +0 -133
- godoo_cli-0.17.0/src/godoo_cli/git/git_repo.py +0 -218
- godoo_cli-0.17.0/src/godoo_cli/git/git_url.py +0 -204
- godoo_cli-0.17.0/src/godoo_cli/git/zip_download.py +0 -58
- godoo_cli-0.17.0/src/godoo_cli/helpers/__init__.py +0 -1
- godoo_cli-0.17.0/src/godoo_cli/helpers/cli.py +0 -30
- godoo_cli-0.17.0/src/godoo_cli/helpers/modules_py.py +0 -88
- godoo_cli-0.17.0/src/godoo_cli/helpers/odoo_files.py +0 -37
- godoo_cli-0.17.0/src/godoo_cli/helpers/pip.py +0 -86
- godoo_cli-0.17.0/src/godoo_cli/models/__init__.py +0 -7
- godoo_cli-0.17.0/src/godoo_cli/models/db_connection.py +0 -133
- godoo_cli-0.17.0/src/godoo_cli/models/godoo_git_repo.py +0 -184
- godoo_cli-0.17.0/src/godoo_cli/models/godoo_manifest.py +0 -230
- godoo_cli-0.17.0/src/godoo_cli/models/godoo_models.py +0 -118
- godoo_cli-0.17.0/src/tests/test_git_clone.py +0 -29
- godoo_cli-0.17.0/uv.lock +0 -2163
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.codecovrc +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.github/FUNDING.yml +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/.prettierrc.yml +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/LICENSE +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/addons/.gitkeep +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/addons/godoo_test_succ_mod/__manifest__.py +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/addons/godoo_test_succ_mod/tests/test_succ.py +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/assets/odoo_logo.png +0 -0
- {godoo_cli-0.17.0 → godoo_cli-1.0.1}/thirdparty/.gitkeep +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godoo-changeset-review
|
|
3
|
+
description:
|
|
4
|
+
Review a broad gOdoo working-tree changeset for regressions, compatibility, and simplification across CLI, workspace,
|
|
5
|
+
and runtime boundaries. Use for whole-changeset reviews, not routine single-file fixes.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gOdoo changeset review
|
|
9
|
+
|
|
10
|
+
Establish the review baseline from staged, unstaged, and untracked files. Distinguish existing user work from edits made
|
|
11
|
+
during the review; do not stage or revert unrelated files.
|
|
12
|
+
|
|
13
|
+
Partition substantial reviews by contracts: source ownership and generated configuration, runtime/database behavior, and
|
|
14
|
+
CLI/public interfaces. Load only the matching source-workspace or runtime skill for each partition. Give workers file
|
|
15
|
+
ownership, the baseline, and the questions they must resolve; the parent owns shared validation and integration.
|
|
16
|
+
Delegate review slots from the parent so nested reviewers cannot exhaust capacity.
|
|
17
|
+
|
|
18
|
+
Trace changed behavior through its callers, command registration, environment options, tests, and documentation. Include
|
|
19
|
+
new untracked modules. Check host/container boundaries and retained compatibility paths where the diff crosses them. A
|
|
20
|
+
smaller file is not evidence of a simpler design; examine duplicated state, lock ownership, and failure recovery.
|
|
21
|
+
|
|
22
|
+
Return actionable findings with file locations, a concrete trigger, and the affected contract. Separate demonstrated
|
|
23
|
+
regressions from optional cleanup. Review alone does not authorize implementation, source synchronization, or runtime
|
|
24
|
+
replacement.
|
|
25
|
+
|
|
26
|
+
For authorized fixes, give the existing worker its in-scope failures to repair. Run focused checks during implementation
|
|
27
|
+
and `make lint` / `make test` after integration. Add editor or live-runtime checks only when the changed behavior needs
|
|
28
|
+
them. Report skipped or blocked validation separately from passing checks, and inspect worker evidence and the final
|
|
29
|
+
diff without repeating the entire investigation.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godoo-editor-validation
|
|
3
|
+
description:
|
|
4
|
+
Validate gOdoo editor diagnostics, VS Code Problems, and debugpy attachment against resolved shared sources.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# gOdoo editor validation
|
|
8
|
+
|
|
9
|
+
Read `docs/workspace.md`, then open the generated `<project>.code-workspace`.
|
|
10
|
+
|
|
11
|
+
gOdoo sets `python.languageServer` to `None` so the installed Odoo IDE extension provides Python and Odoo analysis
|
|
12
|
+
without a competing Pylance server. Keep the Python extension for interpreter selection and debugging. The generated
|
|
13
|
+
`python.analysis.extraPaths` covers the resolved project, Odoo, third-party, and archive addon roots. The supported
|
|
14
|
+
source mapping is the generated multi-root workspace plus its generated extra paths.
|
|
15
|
+
|
|
16
|
+
Reload the window after generation, save representative project, Odoo, and addon files, then inspect VS Code Problems.
|
|
17
|
+
Confirm each diagnostic refers to the intended selected host worktree. Problems validate editor analysis, not execution.
|
|
18
|
+
|
|
19
|
+
Inspect exact editor diagnostics in VS Code's Problems panel. Do not require a repository-specific extension or claim
|
|
20
|
+
that command-line lint and tests reproduce the aggregate Problems view. The Problems API is available only inside VS
|
|
21
|
+
Code's extension host, and Odoo IDE does not provide a supported external diagnostics transport. Record this UI check as
|
|
22
|
+
unverified when the active editor is unavailable.
|
|
23
|
+
|
|
24
|
+
Start the downstream debug service separately, attach with the generated `gOdoo: attach` configuration, set a breakpoint
|
|
25
|
+
in exercised code, and confirm the selected host/container mappings and local variables. Runtime startup belongs to
|
|
26
|
+
downstream/runtime validation.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godoo-runtime-validation
|
|
3
|
+
description:
|
|
4
|
+
Validate gOdoo runtime lifecycle and upstream-change adoption in downstream Compose projects, including installed
|
|
5
|
+
revision checks, init/launch, subprocess output, debugging, endpoints, and real Odoo integration tests.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gOdoo runtime validation
|
|
9
|
+
|
|
10
|
+
Resolve the gOdoo checkout and downstream project first. Read `docs/lifecycle.md`, `docs/downstream.md`, and the
|
|
11
|
+
relevant implementation/tests in that gOdoo checkout. Read the downstream Make target, Dockerfile, and selected Compose
|
|
12
|
+
files for the behavior under investigation.
|
|
13
|
+
|
|
14
|
+
## Identify what is being tested
|
|
15
|
+
|
|
16
|
+
Record the upstream revision and relevant uncommitted changes, the downstream revision, and its configured gOdoo
|
|
17
|
+
dependency or pin. For an available built or running target, also establish the image ID and installed gOdoo revision
|
|
18
|
+
from build evidence or package metadata. A host checkout, Dockerfile pin, or package version alone does not prove which
|
|
19
|
+
commit is running. If the revision cannot be established, report that gap before drawing runtime conclusions.
|
|
20
|
+
|
|
21
|
+
Keep Odoo/addon source provenance separate from the installed gOdoo CLI revision. Resolve the selected Compose project,
|
|
22
|
+
services, source mounts, and database/filestore target; avoid dumping unrelated environment values.
|
|
23
|
+
|
|
24
|
+
## Check downstream adoption
|
|
25
|
+
|
|
26
|
+
Trace each relevant upstream contract change to its downstream consumer and focused validation: command flags,
|
|
27
|
+
environment options, source paths, lifecycle hooks, or generated proxy configuration. Keep source and CLI behavior
|
|
28
|
+
upstream; downstream owns images, Compose, mounts, runtime users, service ordering, and project hooks. Check whether the
|
|
29
|
+
downstream pin includes the required fix before proposing another implementation.
|
|
30
|
+
|
|
31
|
+
`runtime init` owns restore, bootstrap, and reconciliation as a one-shot job. `runtime launch` only starts prepared
|
|
32
|
+
state. Keep `init` ahead of `app` with `service_completed_successfully`. gOdoo provides no downstream service
|
|
33
|
+
orchestration.
|
|
34
|
+
|
|
35
|
+
Use the downstream Make/Compose path for authorized runtime validation. Reuse host-resolved workspace paths rather than
|
|
36
|
+
assembling a substitute container with guessed addon mounts. A pin change needs a rebuilt artifact and, when live
|
|
37
|
+
verification is in scope, a recreated target before it establishes runtime behavior. Temporary source overlays prove
|
|
38
|
+
only the overlaid configuration.
|
|
39
|
+
|
|
40
|
+
Start the downstream debug service separately before attaching with generated `gOdoo: attach`. Report source checks,
|
|
41
|
+
built-artifact checks, runtime startup, debugger attachment, lifecycle state, and endpoint results separately. Never
|
|
42
|
+
start services merely to validate source/editor configuration. A compatibility review does not itself authorize
|
|
43
|
+
rebuilds, resets, restores, or upgrades; use any existing authorization and resolve the target before stateful work.
|
|
44
|
+
|
|
45
|
+
## When progress or logging is the problem
|
|
46
|
+
|
|
47
|
+
Trace child stdout/stderr through gOdoo, the init service, and Compose. Check terminal and captured-output behavior
|
|
48
|
+
where relevant, including native progress streams, feedback during quiet finite phases, and process exit status. Input
|
|
49
|
+
reaching 100% does not establish that a restore finished. Captured-output tests do not prove terminal redraw; check the
|
|
50
|
+
reported Make/Compose surface when authorized and available, otherwise name that remaining verification.
|
|
51
|
+
|
|
52
|
+
Finish with the affected contracts, incompatibilities and their owning repository, the smallest required repair, and
|
|
53
|
+
checks tied to the revision/environment actually tested. Stop a review when those findings and remaining verification
|
|
54
|
+
steps are clear; perform repairs or runtime operations only within the requested scope.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godoo-source-workspaces
|
|
3
|
+
description:
|
|
4
|
+
Work on gOdoo manifests, shared source roots, Git worktrees, source locks, archive caches, or generated editor
|
|
5
|
+
workspace and debug files.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gOdoo source workspaces
|
|
9
|
+
|
|
10
|
+
Read `docs/workspace.md` first. `odoo_manifest.yml` is authoritative and requires `odoo`; third-party prefixes are
|
|
11
|
+
validated before locks or paths and cannot alter host/container depth. Git owns pools, worktrees, branches, locks, and
|
|
12
|
+
archive caches below the shared source root. Never hand-edit managed worktrees or generated `.godoo/` and workspace
|
|
13
|
+
files.
|
|
14
|
+
|
|
15
|
+
Run `workspace sync` only with authority for the shared source root; it may reset verified managed worktrees.
|
|
16
|
+
`workspace configure` regenerates state from checked sources. `workspace check` is offline and read-only. Run workspace
|
|
17
|
+
commands from the project directory because that cwd supplies `.env` and manifest-relative paths.
|
|
18
|
+
|
|
19
|
+
Use the actual owning tests: `test_workspace_git.py` and `test_workspace_layout.py` for Git identity/confinement,
|
|
20
|
+
`test_workspace.py` for generated state, and `test_workspace_storage.py` for storage.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Required workspace source root: absolute, outside this project, reachable by Docker Desktop.
|
|
2
|
+
GODOO_SOURCES_ROOT=/Users/you/dev/sources
|
|
3
|
+
# ODOO_MANIFEST defaults to ./odoo_manifest.yml.
|
|
4
|
+
|
|
5
|
+
# Required runtime/database values. Provide downstream secrets outside source control.
|
|
6
|
+
ODOO_MAIN_DB=odoo
|
|
7
|
+
ODOO_DB_FILTER=odoo
|
|
8
|
+
ODOO_DB_PASSWORD=change-me
|
|
9
|
+
ODOO_DB_USER=odoo_user
|
|
10
|
+
ODOO_DB_HOST=db
|
|
11
|
+
ODOO_DB_PORT=5432
|
|
12
|
+
|
|
13
|
+
# Runtime path overrides; representative downstream defaults are explicit.
|
|
14
|
+
# ODOO_MAIN_FOLDER=/odoo/odoo
|
|
15
|
+
# ODOO_WORKSPACE_ADDON_LOCATION=/odoo/godoo_workspace/addons
|
|
16
|
+
# ODOO_CONF_PATH=/odoo/config/odoo.conf
|
|
17
|
+
# ODOO_DATA_DIR=/var/lib/odoo
|
|
18
|
+
# GODOO_X_SENDFILE=true
|
|
19
|
+
# GODOO_REPORT_URL=http://nginx
|
|
20
|
+
# GODOO_NGINX_CONFIG_PATH=/odoo/config/nginx-static.conf
|
|
21
|
+
|
|
22
|
+
# Runtime lifecycle overrides. Hook directories must exist in the runtime environment.
|
|
23
|
+
# GODOO_RUNTIME_SEED=/odoo_restore/runtime.zip
|
|
24
|
+
# GODOO_VERIFY_ARCHIVE_CRC=false
|
|
25
|
+
# GODOO_HOOK_DIRS=/odoo/godoo_workspace/hooks
|
|
26
|
+
# GODOO_ENVIRONMENT=development
|
|
27
|
+
# GODOO_RECONCILE_UPGRADE_PATH=/odoo/godoo_workspace/migration/upgrade
|
|
28
|
+
# GODOO_RECONCILE_PRE_UPGRADE_SCRIPTS=/odoo/godoo_workspace/migration/pre-upgrade.py
|
|
29
|
+
|
|
30
|
+
# Optional XML-RPC connection.
|
|
31
|
+
# ODOO_RPC_HOST=http://localhost:8069
|
|
32
|
+
# ODOO_RPC_USER=admin
|
|
33
|
+
# ODOO_RPC_PASSWORD=admin
|
|
34
|
+
# ODOO_RPC_DB_NAME=odoo
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# CI and releases
|
|
2
|
+
|
|
3
|
+
[Documentation](../../README.md#documentation) · [Repository architecture](../../docs/architecture.md)
|
|
4
|
+
|
|
5
|
+
CI checks the host package. Release workflows publish Python distributions to PyPI and create a GitHub Release; they do
|
|
6
|
+
not publish runtime images or host-adapter bundles.
|
|
7
|
+
|
|
8
|
+
## Workflow map
|
|
9
|
+
|
|
10
|
+
| Workflow | Trigger | Result |
|
|
11
|
+
| ------------------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------- |
|
|
12
|
+
| [Quality](quality.yml) | Pull request, push to `main`, or manual dispatch | Python 3.11/3.12 checks and test/coverage artifacts |
|
|
13
|
+
| [Version bump](version-bump.yml) | Manual dispatch with a bump type | Version change on `release/<version>` and an editable release PR |
|
|
14
|
+
| [Release and publish](version-publish.yml) | Merged PR into `main` carrying the `release` label | Verified Python package publication, tag, and GitHub Release |
|
|
15
|
+
|
|
16
|
+
## Quality checks
|
|
17
|
+
|
|
18
|
+
Arrows show the steps in each Python job. The final artifact upload uses `if: always()`, so it is also attempted when an
|
|
19
|
+
earlier step fails; reports may be absent if their producing step never ran. The PR author diagnoses failures, and the
|
|
20
|
+
reviewer checks the linked Actions results before accepting the change.
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TD
|
|
24
|
+
Trigger["GitHub receives a pull request,<br/>a main push, or a manual Quality dispatch"]
|
|
25
|
+
Trigger --> Matrix["GitHub Actions runs two independent jobs:<br/>Python 3.11 and Python 3.12"]
|
|
26
|
+
Matrix --> Install["Each job: install locked uv dependencies"]
|
|
27
|
+
Install --> Wheel["Build wheel and install it in a fresh environment;<br/>check package import and CLI help outside checkout"]
|
|
28
|
+
Wheel --> Lint["make lint<br/>Check source rules and formatting"]
|
|
29
|
+
Lint --> Test["make test<br/>Run repository tests and produce JUnit and coverage XML"]
|
|
30
|
+
Test --> Upload["Upload test-results artifact<br/>for that Python version"]
|
|
31
|
+
Install -.->|if a later step fails, still attempt upload| Upload
|
|
32
|
+
Upload --> Review["PR author and reviewer inspect failures<br/>and test artifacts on the GitHub Actions run"]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The wheel smoke test installs into a fresh environment and checks imports and CLI help outside the checkout. The
|
|
36
|
+
workflow installs PostgreSQL development headers and copies `.env.sample` for repository tests. JUnit and coverage
|
|
37
|
+
upload is attempted even after failure. Real Odoo/PostgreSQL integration tests remain opt-in.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Reproduce the main host checks locally after configuring the project .env.
|
|
41
|
+
uv sync --locked
|
|
42
|
+
make lint
|
|
43
|
+
make test
|
|
44
|
+
|
|
45
|
+
# Inspect recent CI runs with GitHub CLI.
|
|
46
|
+
gh run list --workflow quality.yml --limit 5
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Create a release
|
|
50
|
+
|
|
51
|
+
The maintainer chooses and reviews the release; GitHub Actions performs the version change and publication steps. The
|
|
52
|
+
release notes are the PR description. They are separate from the JUnit test and coverage artifacts above.
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
flowchart TD
|
|
56
|
+
Maintainer["Maintainer manually runs<br/>Version Bump with a chosen bump type"]
|
|
57
|
+
Maintainer --> Bump["version-bump.yml: update package version,<br/>push release/version branch, and open release PR"]
|
|
58
|
+
Bump --> Review["Maintainer edits the PR's release notes<br/>and reviews its diff and available CI results"]
|
|
59
|
+
Review --> Merge["Maintainer merges the release-labeled PR into main"]
|
|
60
|
+
Merge --> Verify["version-publish.yml verifies release identity:<br/>repository, branch, PR title, version, merge commit, and tag"]
|
|
61
|
+
Verify --> Publish["Build Python distributions<br/>and publish them to PyPI"]
|
|
62
|
+
Publish --> Tag["Create vVERSION tag at the merge commit,<br/>or verify an existing tag points there"]
|
|
63
|
+
Tag --> Release["Create GitHub Release using the merged PR description;<br/>preserve an existing release"]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Maintainers: choose patch, minor, major, rc, beta, or alpha.
|
|
68
|
+
# This dispatch creates and pushes a release branch and opens a PR.
|
|
69
|
+
gh workflow run version-bump.yml --ref main -f bump_type=patch
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Edit the generated PR description before merging: it becomes the release notes. Keep these identities aligned:
|
|
73
|
+
|
|
74
|
+
| Identity | Required value |
|
|
75
|
+
| ----------------- | ----------------------------------- |
|
|
76
|
+
| Source repository | This repository |
|
|
77
|
+
| Target branch | `main` |
|
|
78
|
+
| PR title | `🔖 Release <version>` |
|
|
79
|
+
| Source branch | `release/<version>` |
|
|
80
|
+
| Package version | The same version, verified by Hatch |
|
|
81
|
+
| Tag | `v<version>` at the PR merge commit |
|
|
82
|
+
|
|
83
|
+
The publication workflow rejects an existing tag pointing elsewhere. It publishes to PyPI before creating the tag and
|
|
84
|
+
GitHub Release. Existing GitHub Releases keep their descriptions; alpha, beta, and release-candidate versions are marked
|
|
85
|
+
as prereleases.
|
|
86
|
+
|
|
87
|
+
If a run fails, inspect the failed step and existing PyPI/tag/release state before retrying that run. Do not move an
|
|
88
|
+
existing release tag to bypass a mismatch.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Quality
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: quality-${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
QualityChecks:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
strategy:
|
|
20
|
+
matrix:
|
|
21
|
+
python-version: ["3.11", "3.12"]
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v5
|
|
24
|
+
- uses: astral-sh/setup-uv@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
enable-cache: true
|
|
28
|
+
- run: sudo apt-get update && sudo apt-get install -y libpq-dev
|
|
29
|
+
- run: uv sync --locked
|
|
30
|
+
- name: Build and smoke test wheel
|
|
31
|
+
run: |
|
|
32
|
+
set -eu
|
|
33
|
+
smoke_dir="$(mktemp -d)"
|
|
34
|
+
trap 'rm -rf "$smoke_dir"' EXIT
|
|
35
|
+
uv build --wheel --out-dir "$smoke_dir"
|
|
36
|
+
uv venv "$smoke_dir/venv"
|
|
37
|
+
uv pip install --python "$smoke_dir/venv/bin/python" "$smoke_dir"/*.whl
|
|
38
|
+
cd "$smoke_dir"
|
|
39
|
+
env -u PYTHONPATH "$smoke_dir/venv/bin/python" -c "import godoo_cli"
|
|
40
|
+
env -u PYTHONPATH "$smoke_dir/venv/bin/godoo" --help
|
|
41
|
+
- run: cp .env.sample .env
|
|
42
|
+
- run: make lint
|
|
43
|
+
- run: make test PYTEST_ARGS="--junitxml=junit/pytest-results.xml --cov-report=xml -o junit_family=legacy"
|
|
44
|
+
env:
|
|
45
|
+
GODOO_SOURCES_ROOT: ""
|
|
46
|
+
- uses: actions/upload-artifact@v4
|
|
47
|
+
if: always()
|
|
48
|
+
with:
|
|
49
|
+
name: test-results-${{ matrix.python-version }}
|
|
50
|
+
path: |
|
|
51
|
+
junit/pytest-results.xml
|
|
52
|
+
coverage.xml
|
|
@@ -69,7 +69,7 @@ jobs:
|
|
|
69
69
|
# Commit and push the changes
|
|
70
70
|
git add -A
|
|
71
71
|
git commit -m "🔖 Bump version ${{ steps.version_info.outputs.CURRENT_VERSION }} → $NEW_VERSION"
|
|
72
|
-
git push
|
|
72
|
+
git push origin "$RELEASE_BRANCH"
|
|
73
73
|
|
|
74
74
|
- name: Generate Release Notes
|
|
75
75
|
id: changelog
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
name: Release and Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [closed]
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: release-${{ github.event.pull_request.head.ref }}
|
|
14
|
+
cancel-in-progress: false
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
release:
|
|
18
|
+
if: >-
|
|
19
|
+
github.event.pull_request.merged == true &&
|
|
20
|
+
contains(github.event.pull_request.labels.*.name, 'release')
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
env:
|
|
23
|
+
PR_TITLE: ${{ github.event.pull_request.title }}
|
|
24
|
+
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
|
|
25
|
+
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
|
|
26
|
+
EXPECTED_REPO: ${{ github.repository }}
|
|
27
|
+
MERGE_SHA: ${{ github.event.pull_request.merge_commit_sha }}
|
|
28
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 0
|
|
33
|
+
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
|
34
|
+
|
|
35
|
+
- name: Verify release pull request
|
|
36
|
+
id: release
|
|
37
|
+
shell: bash
|
|
38
|
+
run: |
|
|
39
|
+
set -euo pipefail
|
|
40
|
+
if [[ "$PR_HEAD_REPO" != "$EXPECTED_REPO" ]]; then
|
|
41
|
+
echo "Release pull request must come from this repository." >&2
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
if [[ "$PR_TITLE" != "🔖 Release "* ]]; then
|
|
45
|
+
echo "Release pull request title must start with '🔖 Release '." >&2
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
RELEASE_VERSION="${PR_TITLE#🔖 Release }"
|
|
49
|
+
if [[ ! "$RELEASE_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(a[0-9]+|b[0-9]+|rc[0-9]+)?$ ]]; then
|
|
50
|
+
echo "Release pull request title must end with a semantic version." >&2
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
if [[ "$PR_HEAD_REF" != "release/$RELEASE_VERSION" ]]; then
|
|
54
|
+
echo "Expected release branch release/$RELEASE_VERSION, got $PR_HEAD_REF." >&2
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
if [[ "$(git rev-parse HEAD)" != "$MERGE_SHA" ]]; then
|
|
58
|
+
echo "Checked out commit does not match the release merge commit." >&2
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
echo "version=$RELEASE_VERSION" >> "$GITHUB_OUTPUT"
|
|
62
|
+
|
|
63
|
+
- name: Set up Python
|
|
64
|
+
uses: actions/setup-python@v5
|
|
65
|
+
with:
|
|
66
|
+
python-version: "3.12"
|
|
67
|
+
|
|
68
|
+
- name: Install Hatch
|
|
69
|
+
uses: pypa/hatch@install
|
|
70
|
+
|
|
71
|
+
- name: Verify package version
|
|
72
|
+
env:
|
|
73
|
+
RELEASE_VERSION: ${{ steps.release.outputs.version }}
|
|
74
|
+
run: |
|
|
75
|
+
set -euo pipefail
|
|
76
|
+
VERSION="$(hatch version)"
|
|
77
|
+
if [[ "$VERSION" != "$RELEASE_VERSION" ]]; then
|
|
78
|
+
echo "Version mismatch: project has $VERSION, release pull request is $RELEASE_VERSION." >&2
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
- name: Preflight existing Git tag
|
|
83
|
+
env:
|
|
84
|
+
RELEASE_VERSION: ${{ steps.release.outputs.version }}
|
|
85
|
+
run: |
|
|
86
|
+
set -euo pipefail
|
|
87
|
+
TAG="v$RELEASE_VERSION"
|
|
88
|
+
git fetch --tags origin
|
|
89
|
+
if git show-ref --verify --quiet "refs/tags/$TAG"; then
|
|
90
|
+
TAG_COMMIT="$(git rev-parse "$TAG^{commit}")"
|
|
91
|
+
if [[ "$TAG_COMMIT" != "$MERGE_SHA" ]]; then
|
|
92
|
+
echo "Existing tag $TAG points to $TAG_COMMIT, expected $MERGE_SHA." >&2
|
|
93
|
+
exit 1
|
|
94
|
+
fi
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
- name: Build distributions
|
|
98
|
+
run: hatch build
|
|
99
|
+
|
|
100
|
+
- name: Publish to PyPI
|
|
101
|
+
env:
|
|
102
|
+
HATCH_INDEX_USER: __token__
|
|
103
|
+
HATCH_INDEX_AUTH: ${{ secrets.PYPI_TOKEN }}
|
|
104
|
+
run: hatch publish
|
|
105
|
+
|
|
106
|
+
- name: Create or verify Git tag
|
|
107
|
+
env:
|
|
108
|
+
RELEASE_VERSION: ${{ steps.release.outputs.version }}
|
|
109
|
+
run: |
|
|
110
|
+
set -euo pipefail
|
|
111
|
+
TAG="v$RELEASE_VERSION"
|
|
112
|
+
git fetch --tags origin
|
|
113
|
+
if git show-ref --verify --quiet "refs/tags/$TAG"; then
|
|
114
|
+
TAG_COMMIT="$(git rev-parse "$TAG^{commit}")"
|
|
115
|
+
if [[ "$TAG_COMMIT" != "$MERGE_SHA" ]]; then
|
|
116
|
+
echo "Existing tag $TAG points to $TAG_COMMIT, expected $MERGE_SHA." >&2
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
else
|
|
120
|
+
git config user.name "github-actions[bot]"
|
|
121
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
122
|
+
git tag -a "$TAG" "$MERGE_SHA" -m "Release $TAG"
|
|
123
|
+
git push origin "refs/tags/$TAG"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
- name: Create GitHub Release if missing
|
|
127
|
+
env:
|
|
128
|
+
GH_TOKEN: ${{ github.token }}
|
|
129
|
+
RELEASE_VERSION: ${{ steps.release.outputs.version }}
|
|
130
|
+
shell: bash
|
|
131
|
+
run: |
|
|
132
|
+
set -euo pipefail
|
|
133
|
+
TAG="v$RELEASE_VERSION"
|
|
134
|
+
if gh release view "$TAG" >/dev/null 2>&1; then
|
|
135
|
+
echo "GitHub Release $TAG already exists; preserving its description."
|
|
136
|
+
exit 0
|
|
137
|
+
fi
|
|
138
|
+
NOTES_FILE="$RUNNER_TEMP/release-notes.md"
|
|
139
|
+
printf '%s' "$PR_BODY" > "$NOTES_FILE"
|
|
140
|
+
RELEASE_FLAGS=()
|
|
141
|
+
if [[ "$RELEASE_VERSION" =~ (a[0-9]+|b[0-9]+|rc[0-9]+)$ ]]; then
|
|
142
|
+
RELEASE_FLAGS+=(--prerelease)
|
|
143
|
+
fi
|
|
144
|
+
gh release create "$TAG" --verify-tag --title "$TAG" --notes-file "$NOTES_FILE" "${RELEASE_FLAGS[@]}"
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
.DS_Store
|
|
2
|
+
node_modules/
|
|
3
|
+
!.vscode/settings.json
|
|
2
4
|
import
|
|
3
|
-
pyrightconfig.json
|
|
4
5
|
remote_instance_data/
|
|
5
6
|
config/odoo.conf
|
|
6
7
|
*.pass
|
|
7
8
|
*.nogit.*
|
|
8
9
|
.env
|
|
10
|
+
.godoo/
|
|
11
|
+
/*.code-workspace
|
|
12
|
+
/pyrightconfig.json
|
|
9
13
|
*:Zone.Identifier
|
|
10
14
|
*.xlsx
|
|
11
15
|
### Python ###
|
|
@@ -116,7 +120,6 @@ celerybeat.pid
|
|
|
116
120
|
*.sage.py
|
|
117
121
|
|
|
118
122
|
# Environments
|
|
119
|
-
.env
|
|
120
123
|
.venv
|
|
121
124
|
env/
|
|
122
125
|
venv/
|
|
@@ -49,9 +49,9 @@ repos:
|
|
|
49
49
|
args: ["--fix"]
|
|
50
50
|
|
|
51
51
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
52
|
-
rev: v0.
|
|
52
|
+
rev: v0.16.5
|
|
53
53
|
hooks:
|
|
54
|
-
- id: ruff
|
|
54
|
+
- id: ruff-check
|
|
55
55
|
args: [--fix]
|
|
56
56
|
- id: ruff-format
|
|
57
57
|
|
|
@@ -61,5 +61,5 @@ repos:
|
|
|
61
61
|
- id: prettier
|
|
62
62
|
name: prettier
|
|
63
63
|
additional_dependencies:
|
|
64
|
-
- "prettier@
|
|
64
|
+
- "prettier@3.7.4"
|
|
65
65
|
files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|yaml|yml)$
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recommendations": [
|
|
3
|
+
"ms-python.python",
|
|
4
|
+
"ms-python.pylint",
|
|
5
|
+
"charliermarsh.ruff",
|
|
6
|
+
"esbenp.prettier-vscode",
|
|
7
|
+
"redhat.vscode-xml",
|
|
8
|
+
"mtxr.sqltools",
|
|
9
|
+
"mtxr.sqltools-driver-pg",
|
|
10
|
+
"jigar-patel.odoosnippets",
|
|
11
|
+
"trinhanhngoc.vscode-odoo",
|
|
12
|
+
"Odoo.owl-vision",
|
|
13
|
+
"eamodio.gitlens",
|
|
14
|
+
"github.vscode-github-actions"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"python.testing.unittestEnabled": false,
|
|
3
|
+
"python.testing.pytestEnabled": false,
|
|
4
|
+
"xml.symbols.enabled": false,
|
|
5
|
+
"python.languageServer": "Pylance",
|
|
6
|
+
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
|
|
7
|
+
"ruff.path": ["${workspaceFolder}/.venv/bin/ruff"],
|
|
8
|
+
"ruff.configurationPreference": "filesystemFirst",
|
|
9
|
+
"prettier.prettierPath": "./node_modules/prettier",
|
|
10
|
+
"[python]": {
|
|
11
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
12
|
+
"editor.formatOnSave": true,
|
|
13
|
+
"editor.codeActionsOnSave": {
|
|
14
|
+
"source.fixAll.ruff": "explicit",
|
|
15
|
+
"source.organizeImports.ruff": "explicit"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
19
|
+
"editor.formatOnSave": true,
|
|
20
|
+
"[json]": {
|
|
21
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
22
|
+
},
|
|
23
|
+
"[markdown]": {
|
|
24
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
25
|
+
},
|
|
26
|
+
"[yaml]": {
|
|
27
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
28
|
+
},
|
|
29
|
+
"[dockercompose]": {
|
|
30
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
31
|
+
},
|
|
32
|
+
"[github-actions-workflow]": {
|
|
33
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"label": "gOdoo: lint",
|
|
6
|
+
"type": "shell",
|
|
7
|
+
"command": "make",
|
|
8
|
+
"args": ["lint"],
|
|
9
|
+
"options": {
|
|
10
|
+
"cwd": "${workspaceFolder}"
|
|
11
|
+
},
|
|
12
|
+
"problemMatcher": [],
|
|
13
|
+
"group": "build"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"label": "gOdoo: tests",
|
|
17
|
+
"type": "shell",
|
|
18
|
+
"command": "make",
|
|
19
|
+
"args": ["test"],
|
|
20
|
+
"options": {
|
|
21
|
+
"cwd": "${workspaceFolder}"
|
|
22
|
+
},
|
|
23
|
+
"problemMatcher": [],
|
|
24
|
+
"group": "test"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# gOdoo repository contracts
|
|
2
|
+
|
|
3
|
+
Keep only repo-specific behavior that code and tooling do not make obvious. Prefer existing patterns and the smallest
|
|
4
|
+
coherent change.
|
|
5
|
+
|
|
6
|
+
## Execution
|
|
7
|
+
|
|
8
|
+
- The host owns Git, workspace commands, VS Code, linting, and the development `.venv`. Odoo runs in the selected
|
|
9
|
+
environment (`VIRTUAL_ENV`, otherwise the project `.venv`). Downstream owns Docker and system packages; gOdoo never
|
|
10
|
+
detects or orchestrates containers.
|
|
11
|
+
- Load the matching skill under `.agents/skills/` for source-workspace or runtime work; load both only when a change
|
|
12
|
+
crosses those boundaries.
|
|
13
|
+
- Use `godoo-editor-validation` for VS Code diagnostics and development-flow checks, and `godoo-changeset-review` for
|
|
14
|
+
whole-changeset reviews.
|
|
15
|
+
- Keep shared Docker validation sequential.
|
|
16
|
+
|
|
17
|
+
## Code and CLI
|
|
18
|
+
|
|
19
|
+
- Every shell script under `scripts/` has a purpose comment immediately below its shebang.
|
|
20
|
+
- Operational Python modules define and use `LOGGER = logging.getLogger(__name__)`; passive metadata, value-type, and
|
|
21
|
+
re-export modules do not carry unused loggers. Reserve `rich.print()` for user-facing output.
|
|
22
|
+
- Export command groups through `src/godoo_cli/commands/__init__.py` and attach them in
|
|
23
|
+
`src/godoo_cli/commands/root.py`. Reuse env-first option metadata from `src/godoo_cli/commands/common.py`; new options
|
|
24
|
+
need an environment fallback unless there is a concrete reason not to provide one.
|
|
25
|
+
- For Typer commands, keep behavior in the function docstring and parameter help in `Annotated` metadata.
|
|
26
|
+
|
|
27
|
+
## Validation
|
|
28
|
+
|
|
29
|
+
- Implementers run only focused proof for owned behavior; they never run full `make lint` or `make test` unless
|
|
30
|
+
explicitly the integration owner.
|
|
31
|
+
- The coordinator or named integration owner runs `make lint` and `make test` sequentially on the final tree, plus
|
|
32
|
+
applicable editor, workspace, runtime, and live-surface checks.
|
|
33
|
+
- For whole-changeset review, the validator receives a coordinator-generated current staged, unstaged, and untracked
|
|
34
|
+
diff snapshot and coverage manifest before implementer reports or prior findings; it performs an independent first
|
|
35
|
+
pass, then may consume those reports for a targeted second pass.
|
|
36
|
+
- Validate relevant Python typing boundaries and editor configuration with the editor-validation skill; lint and unit
|
|
37
|
+
tests do not establish that editor diagnostics are clear.
|