diff --git a/README.md b/README.md index b66ecb6..067be44 100644 --- a/README.md +++ b/README.md @@ -80,10 +80,10 @@ scripts/ ... src/ env_10.0/ - debian_requirements.txt + extra_debian_requirements.txt Dockerfile odoo.cfg - python_requirements.txt + extra_python_requirements.txt repos.yml src/ env_11.0/ @@ -124,12 +124,12 @@ modules.csv Repo files are pre-generated. You can update them with your custom settings. (custom branches, extra PRs, git shallow options, etc...) - - ``python_requirements.txt`` enumerates the list of extra python librairies + - ``extra_python_requirements.txt`` enumerates the list of extra python librairies required to run the odoo instance. The syntax should respect the ``pip install -r`` command. (See : https://pip.pypa.io/en/stable/reference/requirements-file-format/) - - ``debian_requirements.txt`` enumerates the list of extra system librairies + - ``extra_debian_requirements.txt`` enumerates the list of extra system librairies required to run the odoo instance. - ``odoo.cfg`` file. Add here extra configuration required for your custom modules. @@ -144,6 +144,28 @@ extra repositories, or dependencies... - In your repos.yml, preserve ``openupgrade`` and ``server-tools`` repositories to have all the features of the librairies available. +## Command: ``pull-submodule`` + +**Prerequites:** init + +if you already have a repos.yml file on github / gitlab, it can be convenient to +synchronize the repository, instead of copy past the ``repos.yml`` manually. + +In that case, you can add extra values, in the ``config.yml`` file in the section + +``` +odoo_version_settings: + 12.0: + repo_url: url_of_the_repo_that_contains_a_repos_yml_file + repo_branch: 12.0 + repo_file_path: repos.yml +``` + +then run following command : + +``` +odoo-openupgrade-wizard pull-submodule +``` ## Command: ``get-code`` @@ -156,7 +178,8 @@ odoo-openupgrade-wizard get-code This command will simply get all the Odoo code required to run all the steps for your migration with the ``gitaggregate`` tools. -The code is defined in the ``repos.yml`` of each sub folders. +The code is defined in the ``repos.yml`` of each environment folders. (or in the +directory ``repo_submodule`` if you use ``pull-submodule`` feature.) **Note** @@ -178,10 +201,6 @@ odoo-openupgrade-wizard get-code --versions 10.0,11.0 This will build local docker images that will be used in the following steps. -This script will pull official odoo docker images, defined in the ``Dockerfile`` of -each folder, and build a custom images on top the official one, installing inside -custom librairies defined in ``debian_requirements.txt``, ``python_requirements.txt``. - At this end of this step executing the following command should show a docker image per version. diff --git a/odoo_openupgrade_wizard/cli/cli.py b/odoo_openupgrade_wizard/cli/cli.py index b3cf4dd..570f9e5 100644 --- a/odoo_openupgrade_wizard/cli/cli.py +++ b/odoo_openupgrade_wizard/cli/cli.py @@ -23,6 +23,7 @@ from odoo_openupgrade_wizard.cli.cli_generate_module_analysis import ( from odoo_openupgrade_wizard.cli.cli_get_code import get_code from odoo_openupgrade_wizard.cli.cli_init import init from odoo_openupgrade_wizard.cli.cli_install_from_csv import install_from_csv +from odoo_openupgrade_wizard.cli.cli_pull_submodule import pull_submodule from odoo_openupgrade_wizard.cli.cli_run import run from odoo_openupgrade_wizard.cli.cli_upgrade import upgrade from odoo_openupgrade_wizard.tools.tools_system import ensure_folder_exists @@ -116,5 +117,6 @@ main.add_command(generate_module_analysis) main.add_command(get_code) main.add_command(init) main.add_command(install_from_csv) +main.add_command(pull_submodule) main.add_command(run) main.add_command(upgrade) diff --git a/odoo_openupgrade_wizard/cli/cli_get_code.py b/odoo_openupgrade_wizard/cli/cli_get_code.py index 14dfd9d..01ba5c5 100644 --- a/odoo_openupgrade_wizard/cli/cli_get_code.py +++ b/odoo_openupgrade_wizard/cli/cli_get_code.py @@ -4,7 +4,10 @@ from odoo_openupgrade_wizard.cli.cli_options import ( get_odoo_versions_from_options, versions_options, ) -from odoo_openupgrade_wizard.tools.tools_odoo import get_odoo_env_path +from odoo_openupgrade_wizard.tools.tools_odoo import ( + get_odoo_env_path, + get_repo_file_path, +) from odoo_openupgrade_wizard.tools.tools_system import git_aggregate @@ -24,5 +27,5 @@ def get_code(ctx, versions, jobs): for odoo_version in get_odoo_versions_from_options(ctx, versions): folder_path = get_odoo_env_path(ctx, odoo_version) - repo_file_path = folder_path / "repos.yml" + repo_file_path = get_repo_file_path(ctx, odoo_version) git_aggregate(folder_path, repo_file_path, jobs) diff --git a/odoo_openupgrade_wizard/cli/cli_pull_submodule.py b/odoo_openupgrade_wizard/cli/cli_pull_submodule.py new file mode 100644 index 0000000..48279fe --- /dev/null +++ b/odoo_openupgrade_wizard/cli/cli_pull_submodule.py @@ -0,0 +1,51 @@ +import click +from loguru import logger + +from odoo_openupgrade_wizard.cli.cli_options import ( + get_odoo_versions_from_options, + versions_options, +) +from odoo_openupgrade_wizard.tools.tools_odoo import get_odoo_env_path +from odoo_openupgrade_wizard.tools.tools_system import execute_check_output + + +@click.command() +@versions_options +@click.pass_context +def pull_submodule(ctx, versions): + """Pull submodule that contains repos.yml file, if define in config.yml""" + + for odoo_version in get_odoo_versions_from_options(ctx, versions): + version_cfg = ( + ctx.obj["config"]["odoo_version_settings"][odoo_version] or {} + ) + if version_cfg.get("repo_url"): + logger.info( + f"Pull repos.yml from git repository" + f" for version {odoo_version} ..." + ) + submodule_path = ( + get_odoo_env_path(ctx, odoo_version) / "repo_submodule" + ) + if not submodule_path.exists(): + execute_check_output( + [ + "git", + "submodule", + "add", + "-b", + str(version_cfg["repo_branch"]), + version_cfg["repo_url"], + submodule_path, + ] + ) + else: + execute_check_output( + ["git", "pull", "origin", str(version_cfg["repo_branch"])], + working_directory=submodule_path, + ) + else: + logger.warning( + f"No submodule configuration found" + f" for version {odoo_version} ..." + ) diff --git a/odoo_openupgrade_wizard/templates/config.yml.j2 b/odoo_openupgrade_wizard/templates/config.yml.j2 index 611c5c3..509d317 100644 --- a/odoo_openupgrade_wizard/templates/config.yml.j2 +++ b/odoo_openupgrade_wizard/templates/config.yml.j2 @@ -17,7 +17,6 @@ odoo_versions: odoo_version_settings: {%- for odoo_version in odoo_versions %} {{odoo_version}}: - repo_url: False {%- endfor %} diff --git a/odoo_openupgrade_wizard/tools/tools_odoo.py b/odoo_openupgrade_wizard/tools/tools_odoo.py index d66be4e..7fbab7e 100644 --- a/odoo_openupgrade_wizard/tools/tools_odoo.py +++ b/odoo_openupgrade_wizard/tools/tools_odoo.py @@ -24,12 +24,32 @@ from odoo_openupgrade_wizard.tools.tools_postgres import get_postgres_container from odoo_openupgrade_wizard.tools.tools_system import get_script_folder +def get_repo_file_path(ctx, odoo_version: float) -> Path: + """return the relative path of the repos.yml file + of a given odoo version""" + repo_file = False + # Check if submodule path exists + version_cfg = ( + ctx.obj["config"]["odoo_version_settings"][odoo_version] or {} + ) + submodule_path = get_odoo_env_path(ctx, odoo_version) / "repo_submodule" + + if submodule_path.exists(): + repo_file = submodule_path / version_cfg["repo_file_path"] + if repo_file.exists(): + return repo_file + else: + logger.warning(f"Unable to find the repo file {repo_file}.") + repo_file = get_odoo_env_path(ctx, odoo_version) / Path("repos.yml") + if not repo_file.exists(): + raise Exception(f"Unable to find the repo file {repo_file}.") + return repo_file + + def get_odoo_addons_path( ctx, root_path: Path, migration_step: dict, execution_context: str = False ) -> str: - repo_file = get_odoo_env_path(ctx, migration_step["version"]) / Path( - "repos.yml" - ) + repo_file = get_repo_file_path(ctx, migration_step["version"]) base_module_folder = get_base_module_folder(migration_step) stream = open(repo_file, "r") data = yaml.safe_load(stream) diff --git a/odoo_openupgrade_wizard/tools/tools_system.py b/odoo_openupgrade_wizard/tools/tools_system.py index 3f5c95e..3409856 100644 --- a/odoo_openupgrade_wizard/tools/tools_system.py +++ b/odoo_openupgrade_wizard/tools/tools_system.py @@ -1,5 +1,6 @@ import argparse import os +import subprocess from pathlib import Path import importlib_resources @@ -104,3 +105,8 @@ def git_aggregate(folder_path: Path, config_path: Path, jobs: int): def get_local_user_id(): return os.getuid() + + +def execute_check_output(args_list, working_directory=False): + logger.debug("Execute %s" % " ".join(args_list)) + subprocess.check_output(args_list, cwd=working_directory) diff --git a/tests/data/output_expected/config.yml b/tests/data/output_expected/config.yml index d41e83f..a31773e 100644 --- a/tests/data/output_expected/config.yml +++ b/tests/data/output_expected/config.yml @@ -15,9 +15,7 @@ odoo_versions: odoo_version_settings: 14.0: - repo_url: False 15.0: - repo_url: False migration_steps: