diff --git a/Chart.yaml b/Chart.yaml index b4789e3..8d26929 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -5,7 +5,7 @@ description: | Variation between instances is expressed via values.yaml only. No chart variants. No string-templating in Tower. type: application -version: 0.1.3 +version: 0.1.4 appVersion: "1.0" keywords: - odoo diff --git a/templates/odoo-deployment.yaml b/templates/odoo-deployment.yaml index e9f953a..32bfd11 100644 --- a/templates/odoo-deployment.yaml +++ b/templates/odoo-deployment.yaml @@ -118,30 +118,59 @@ spec: args: - | set -eu - mkdir -p /target/odoosky_hoot_dom_shim + mkdir -p /target/odoosky_hoot_dom_shim/static/src : > /target/odoosky_hoot_dom_shim/__init__.py + # Investigated three approaches before settling on this one: + # + # 1. Drop the hoot-dom lib files into web.assets_backend + # (`web/static/lib/hoot-dom/**/*`). They got bundled + # but the asset compiler registered them under their + # path-based names (`@web/../lib/hoot-dom/hoot-dom`) + # and ignored the `@odoo-module alias=@odoo/hoot-dom` + # directive — that directive only fires for files + # under `static/src/`, not `static/lib/`. Bundle grew, + # `@odoo/hoot-dom` still undefined. + # 2. Add `web/static/tests/_framework/hoot_module_loader.js` + # on top of #1 (mirror of upstream assets_unit_tests_setup). + # Same outcome — the loader patches `odoo.define` for + # follow-on hoot test files but doesn't register the + # canonical alias. + # 3. (this) Inject a tiny alias file under our addon's + # `static/src/` that bridges the two names with a + # plain `odoo.define` call. The lib files are already + # in the prod bundle (the broken manifest puts them + # only in unit_tests_setup, but Odoo's barcode/tour + # code in static/src/ references them so they get + # pulled in transitively); the alias file just + # re-exports them under the canonical name production + # code asks for. + cat > /target/odoosky_hoot_dom_shim/static/src/hoot_dom_alias.js <<'JSEOF' + /** @odoo-module ignore */ + // OdooSky platform shim: register `@odoo/hoot-dom` as an + // alias for the path-based module the asset compiler + // produces from web/static/lib/hoot-dom/hoot-dom.js. + // Without this, prod source files in barcodes / sale / + // web_tour that `import '@odoo/hoot-dom'` fail to bootstrap + // because no module is registered under that name in the + // production bundle. + odoo.define( + "@odoo/hoot-dom", + ["@web/../lib/hoot-dom/hoot-dom"], + function (require) { + return require("@web/../lib/hoot-dom/hoot-dom"); + } + ); + JSEOF cat > /target/odoosky_hoot_dom_shim/__manifest__.py <<'PYEOF' { 'name': 'OdooSky hoot-dom backend shim', - 'version': '18.0.1.0.1', + 'version': '18.0.1.0.2', 'category': 'Hidden', - 'summary': 'Inject hoot/hoot-dom + module loader into web.assets_backend (workaround for upstream manifest bug)', + 'summary': 'Register @odoo/hoot-dom alias in web.assets_backend (workaround for upstream alias-not-honored bug)', 'depends': ['web'], - # Mirror the asset list from web.__manifest__.py's - # assets_unit_tests_setup bundle. The loader at the - # end registers each lib file as an `@odoo/hoot-dom` - # module — without it, the bare lib files don't - # define themselves as the dependency name production - # code references. We exclude the same test artifacts - # the upstream bundle excludes (hoot_style.css + - # hoot/tests). 'assets': { 'web.assets_backend': [ - 'web/static/lib/hoot/**/*', - 'web/static/lib/hoot-dom/**/*', - ('remove', 'web/static/lib/hoot/ui/hoot_style.css'), - ('remove', 'web/static/lib/hoot/tests/**/*'), - 'web/static/tests/_framework/hoot_module_loader.js', + 'odoosky_hoot_dom_shim/static/src/hoot_dom_alias.js', ], }, 'installable': True,