From cb406e12e2ec053c7f4cc84126529cee2c4171c8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 2 Oct 2017 18:35:59 +0200 Subject: [PATCH] fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! Addons autoinstaller and env-based filter --- lib/odoobaselib/__init__.py | 26 ++++++++++++------- tests/__init__.py | 20 +++++++------- tests/scaffoldings/dotd/10.0.Dockerfile | 1 - tests/scaffoldings/dotd/8.0.Dockerfile | 1 - tests/scaffoldings/dotd/9.0.Dockerfile | 1 - tests/scaffoldings/dotd/Dockerfile | 2 ++ tests/scaffoldings/dotd/docker-compose.yaml | 2 +- tests/scaffoldings/smallest/10.0.Dockerfile | 1 - tests/scaffoldings/smallest/8.0.Dockerfile | 1 - tests/scaffoldings/smallest/9.0.Dockerfile | 1 - tests/scaffoldings/smallest/Dockerfile | 2 ++ .../scaffoldings/smallest/docker-compose.yaml | 3 ++- 12 files changed, 34 insertions(+), 27 deletions(-) delete mode 100644 tests/scaffoldings/dotd/10.0.Dockerfile delete mode 100644 tests/scaffoldings/dotd/8.0.Dockerfile delete mode 100644 tests/scaffoldings/dotd/9.0.Dockerfile create mode 100644 tests/scaffoldings/dotd/Dockerfile delete mode 100644 tests/scaffoldings/smallest/10.0.Dockerfile delete mode 100644 tests/scaffoldings/smallest/8.0.Dockerfile delete mode 100644 tests/scaffoldings/smallest/9.0.Dockerfile create mode 100644 tests/scaffoldings/smallest/Dockerfile diff --git a/lib/odoobaselib/__init__.py b/lib/odoobaselib/__init__.py index d389ceb4..c2504986 100644 --- a/lib/odoobaselib/__init__.py +++ b/lib/odoobaselib/__init__.py @@ -9,6 +9,10 @@ CUSTOM_DIR = "/opt/odoo/custom" SRC_DIR = os.path.join(CUSTOM_DIR, 'src') ADDONS_YAML = os.path.join(SRC_DIR, 'addons') +if os.path.isfile('%s.yaml' % ADDONS_YAML): + ADDONS_YAML = '%s.yaml' % ADDONS_YAML +else: + ADDONS_YAML = '%s.yml' % ADDONS_YAML ADDONS_DIR = "/opt/odoo/auto/addons" CLEAN = os.environ.get("CLEAN") == "true" LOG_LEVELS = ("DEBUG", "INFO", "WARNING", "ERROR") @@ -20,11 +24,6 @@ PRIVATE_DIR = os.path.join(SRC_DIR, PRIVATE) CORE_DIR = os.path.join(SRC_DIR, CORE) -if os.path.isfile('%s.yaml' % ADDONS_YAML): - ADDONS_YAML = '%s.yaml' % ADDONS_YAML -else: - ADDONS_YAML = '%s.yml' % ADDONS_YAML - # Customize logging for build logging.root.name = "docker-odoo-base" _log_level = os.environ.get("LOG_LEVEL", "") @@ -48,17 +47,21 @@ def addons_config(): with open(ADDONS_YAML) as addons_file: for doc in yaml.load_all(addons_file): # Skip sections with ONLY and that don't match - for key, values in doc.get("ONLY", dict()).items(): - if os.environ.get(key) not in values: - continue + if any(os.environ.get(key) not in values + for key, values in doc.get("ONLY", dict()).items()): + logging.debug("Skipping section with ONLY %s", doc["ONLY"]) + continue # Flatten all sections in a single dict for repo, addons in doc.items(): if repo == PRIVATE: private_done = True elif repo == CORE: core_done = True + logging.debug("Processing %s repo", repo) for glob in addons: + logging.debug("Expanding glob %s", glob) for addon in iglob(os.path.join(SRC_DIR, repo, glob)): + logging.debug("Registering addon %s", addon) addon = os.path.basename(addon) config.setdefault(addon, set()) config[addon].add(repo) @@ -66,15 +69,18 @@ def addons_config(): logging.debug('Could not find addons configuration yml.') # By default, all private and core addons are enabled if not private_done: + logging.debug("Auto-adding all private repo addons") config.update({ os.path.basename(addon): {PRIVATE} for addon in iglob(os.path.join(SRC_DIR, PRIVATE, "*")) }) if not core_done: + logging.debug("Auto-adding all core repo addons") config.update({ os.path.basename(addon): {CORE} for addon in iglob(os.path.join(SRC_DIR, CORE, "*")) }) + logging.debug("Resulting configuration: %r", config) for addon, repos in config.items(): # Private addons are most important if PRIVATE in repos: @@ -83,6 +89,8 @@ def addons_config(): elif repos == {CORE}: yield addon, CORE # Other addons fall in between + elif len(repos) != 1: + logging.error("Addon %s defined in several repos %s", addon, repos) + raise Exception else: - repos.discard(CORE) yield addon, repos.pop() diff --git a/tests/__init__.py b/tests/__init__.py index 337913cb..a88489d3 100755 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -98,16 +98,16 @@ def compose_test(self, workdir, sub_env, *commands): def test_addons_filtered(self): """Test addons filtering with ``ONLY`` keyword in ``addons.yaml``.""" project_dir = join(SCAFFOLDINGS_DIR, "dotd") - for sub_env in matrix(): + for sub_env in matrix(odoo={"10.0"}): self.compose_test( project_dir, dict(sub_env, DBNAME="prod"), ("test", "-e", "auto/addons/website"), ("test", "-e", "auto/addons/dummy_addon"), ("test", "-e", "auto/addons/private_addon"), - ("sh", "-c", 'test "$(addons-install -lp)" == private_addon'), - ("sh", "-c", 'test "$(addons-install -le)" == dummy_addon'), - ("sh", "-c", 'addons-install -lc | grep ,crm,'), + ("bash", "-c", 'test "$(addons-install -lp)" == private_addon'), + ("bash", "-c", 'test "$(addons-install -le)" == dummy_addon'), + ("bash", "-c", 'addons-install -lc | grep ,crm,'), ) self.compose_test( project_dir, @@ -115,9 +115,9 @@ def test_addons_filtered(self): ("test", "-e", "auto/addons/website"), ("test", "-e", "auto/addons/dummy_addon"), ("test", "!", "-e", "auto/addons/private_addon"), - ("sh", "-c", '[ -z "$(addons-install -lp)" ]'), - ("sh", "-c", '[ "$(addons-install -le)" == dummy_addon ]'), - ("sh", "-c", 'addons-install -lc | grep ,crm,'), + ("bash", "-c", 'test -z "$(addons-install -lp)"'), + ("bash", "-c", 'test "$(addons-install -le)" == dummy_addon'), + ("bash", "-c", 'addons-install -lc | grep ,crm,'), ) self.compose_test( project_dir, @@ -125,9 +125,9 @@ def test_addons_filtered(self): ("test", "!", "-e", "auto/addons/website"), ("test", "-e", "auto/addons/dummy_addon"), ("test", "!", "-e", "auto/addons/private_addon"), - ("sh", "-c", '[ -z "$(addons-install -lp)" ]'), - ("sh", "-c", '[ "$(addons-install -le)" == dummy_addon ]'), - ("sh", "-c", '[ "$(addons-install -lc)" == crm,sale ]'), + ("bash", "-c", 'test -z "$(addons-install -lp)"'), + ("bash", "-c", 'test "$(addons-install -le)" == dummy_addon'), + ("bash", "-c", 'test "$(addons-install -lc)" == crm,sale'), ) def test_smallest(self): diff --git a/tests/scaffoldings/dotd/10.0.Dockerfile b/tests/scaffoldings/dotd/10.0.Dockerfile deleted file mode 100644 index 98e2dcda..00000000 --- a/tests/scaffoldings/dotd/10.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:10.0 diff --git a/tests/scaffoldings/dotd/8.0.Dockerfile b/tests/scaffoldings/dotd/8.0.Dockerfile deleted file mode 100644 index dbf58896..00000000 --- a/tests/scaffoldings/dotd/8.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:8.0 diff --git a/tests/scaffoldings/dotd/9.0.Dockerfile b/tests/scaffoldings/dotd/9.0.Dockerfile deleted file mode 100644 index 6c340767..00000000 --- a/tests/scaffoldings/dotd/9.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:9.0 diff --git a/tests/scaffoldings/dotd/Dockerfile b/tests/scaffoldings/dotd/Dockerfile new file mode 100644 index 00000000..ab96cfa6 --- /dev/null +++ b/tests/scaffoldings/dotd/Dockerfile @@ -0,0 +1,2 @@ +ARG ODOO_MINOR=10.0 +FROM tecnativa/odoo-base:${ODOO_MINOR} diff --git a/tests/scaffoldings/dotd/docker-compose.yaml b/tests/scaffoldings/dotd/docker-compose.yaml index 8dbadb4b..7982d574 100644 --- a/tests/scaffoldings/dotd/docker-compose.yaml +++ b/tests/scaffoldings/dotd/docker-compose.yaml @@ -3,10 +3,10 @@ services: odoo: build: context: ./ - dockerfile: ${ODOO_MINOR}.Dockerfile args: CONFIG_BUILD: 'false' LOG_LEVEL: DEBUG + ODOO_MINOR: ${ODOO_MINOR} tty: true environment: PGUSER: another_odoo diff --git a/tests/scaffoldings/smallest/10.0.Dockerfile b/tests/scaffoldings/smallest/10.0.Dockerfile deleted file mode 100644 index 98e2dcda..00000000 --- a/tests/scaffoldings/smallest/10.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:10.0 diff --git a/tests/scaffoldings/smallest/8.0.Dockerfile b/tests/scaffoldings/smallest/8.0.Dockerfile deleted file mode 100644 index dbf58896..00000000 --- a/tests/scaffoldings/smallest/8.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:8.0 diff --git a/tests/scaffoldings/smallest/9.0.Dockerfile b/tests/scaffoldings/smallest/9.0.Dockerfile deleted file mode 100644 index 6c340767..00000000 --- a/tests/scaffoldings/smallest/9.0.Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM tecnativa/odoo-base:9.0 diff --git a/tests/scaffoldings/smallest/Dockerfile b/tests/scaffoldings/smallest/Dockerfile new file mode 100644 index 00000000..ab96cfa6 --- /dev/null +++ b/tests/scaffoldings/smallest/Dockerfile @@ -0,0 +1,2 @@ +ARG ODOO_MINOR=10.0 +FROM tecnativa/odoo-base:${ODOO_MINOR} diff --git a/tests/scaffoldings/smallest/docker-compose.yaml b/tests/scaffoldings/smallest/docker-compose.yaml index 819fa3f5..5ffe26d4 100644 --- a/tests/scaffoldings/smallest/docker-compose.yaml +++ b/tests/scaffoldings/smallest/docker-compose.yaml @@ -3,9 +3,10 @@ services: odoo: build: context: ./ - dockerfile: ${ODOO_MINOR}.Dockerfile args: COMPILE: "false" + LOG_LEVEL: DEBUG + ODOO_MINOR: ${ODOO_MINOR} WITHOUT_DEMO: "false" tty: true depends_on: