From 917692d0fbe2544c5d96dcd5b45d678452d07993 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Sat, 9 Apr 2022 00:49:53 +0200 Subject: [PATCH] [REF] add mutualized options in cli_options.py file ; [ADD] project-name argument in init step to have the possibility to have a friendly tag for the odoo docker images ; --- odoo_openupgrade_wizard/cli_docker_build.py | 12 +++++++---- odoo_openupgrade_wizard/cli_get_code.py | 11 ++++++---- odoo_openupgrade_wizard/cli_init.py | 14 +++++++++++- odoo_openupgrade_wizard/cli_options.py | 24 +++++++++++++++++++++ odoo_openupgrade_wizard/templates.py | 4 +++- tests/cli_01_init_test.py | 1 + tests/cli_02_get_code_test.py | 1 + tests/output_01_expected/config.yml | 2 ++ 8 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 odoo_openupgrade_wizard/cli_options.py diff --git a/odoo_openupgrade_wizard/cli_docker_build.py b/odoo_openupgrade_wizard/cli_docker_build.py index a249efd..7639220 100644 --- a/odoo_openupgrade_wizard/cli_docker_build.py +++ b/odoo_openupgrade_wizard/cli_docker_build.py @@ -2,6 +2,10 @@ import click import docker from loguru import logger +from odoo_openupgrade_wizard.cli_options import ( + get_odoo_versions_from_options, + releases_options, +) from odoo_openupgrade_wizard.configuration_version_dependant import ( get_docker_image_tag, get_odoo_env_path, @@ -9,14 +13,14 @@ from odoo_openupgrade_wizard.configuration_version_dependant import ( @click.command() +@releases_options @click.pass_context -def docker_build(ctx): +def docker_build(ctx, releases): """Build Odoo Docker Images. (One image per release)""" - # TODO, make it modular. - # For exemple, possibility to aggregate only 9.0 and 11.0 release docker_client = docker.from_env() - for odoo_version in ctx.obj["config"]["odoo_versions"]: + + for odoo_version in get_odoo_versions_from_options(ctx, releases): logger.info( "Building Odoo docker image for release '%s'. " "This can take a while..." % (odoo_version["release"]) diff --git a/odoo_openupgrade_wizard/cli_get_code.py b/odoo_openupgrade_wizard/cli_get_code.py index 7a5b908..1adb303 100644 --- a/odoo_openupgrade_wizard/cli_get_code.py +++ b/odoo_openupgrade_wizard/cli_get_code.py @@ -1,5 +1,9 @@ import click +from odoo_openupgrade_wizard.cli_options import ( + get_odoo_versions_from_options, + releases_options, +) from odoo_openupgrade_wizard.configuration_version_dependant import ( get_odoo_env_path, ) @@ -7,13 +11,12 @@ from odoo_openupgrade_wizard.tools_system import git_aggregate @click.command() +@releases_options @click.pass_context -def get_code(ctx): +def get_code(ctx, releases): """Get code by running gitaggregate command for each release""" - # TODO, make it modular. - # For exemple, possibility to aggregate only 9.0 and 11.0 release - for odoo_version in ctx.obj["config"]["odoo_versions"]: + for odoo_version in get_odoo_versions_from_options(ctx, releases): folder_path = get_odoo_env_path(ctx, odoo_version) repo_file_path = folder_path / "repos.yml" git_aggregate(folder_path, repo_file_path) diff --git a/odoo_openupgrade_wizard/cli_init.py b/odoo_openupgrade_wizard/cli_init.py index c174d2f..214dabf 100644 --- a/odoo_openupgrade_wizard/cli_init.py +++ b/odoo_openupgrade_wizard/cli_init.py @@ -15,6 +15,15 @@ from odoo_openupgrade_wizard.tools_system import ( @click.command() +@click.option( + "--project-name", + required=True, + prompt=True, + type=str, + help="Name of your project without spaces neither special chars." + " exemple 'my-customer-9-12'. This will be used to tag with a friendly" + " name the odoo docker images.", +) @click.option( "--initial-release", required=True, @@ -35,7 +44,9 @@ from odoo_openupgrade_wizard.tools_system import ( "Ex: 'OCA/web,OCA/server-tools,GRAP/grap-odoo-incubator'", ) @click.pass_context -def init(ctx, initial_release, final_release, extra_repository_list): +def init( + ctx, project_name, initial_release, final_release, extra_repository_list +): """Initialize OpenUpgrade Wizard Environment based on the initial and the final release of Odoo you want to migrate. """ @@ -105,6 +116,7 @@ def init(ctx, initial_release, final_release, extra_repository_list): ensure_file_exists_from_template( ctx.obj["config_file_path"], templates.CONFIG_YML_TEMPLATE, + project_name=project_name, steps=steps, odoo_versions=odoo_versions, ) diff --git a/odoo_openupgrade_wizard/cli_options.py b/odoo_openupgrade_wizard/cli_options.py new file mode 100644 index 0000000..59bbf85 --- /dev/null +++ b/odoo_openupgrade_wizard/cli_options.py @@ -0,0 +1,24 @@ +import click + + +def releases_options(function): + function = click.option( + "--releases", + type=str, + help="Coma-separated values of odoo releases for which" + " you want to perform the operation.", + )(function) + return function + + +def get_odoo_versions_from_options(ctx, releases_arg): + + if not releases_arg: + return ctx.obj["config"]["odoo_versions"] + else: + odoo_versions = [] + releases = [float(x) for x in releases_arg.split(",")] + for odoo_version in ctx.obj["config"]["odoo_versions"]: + if odoo_version["release"] in releases: + odoo_versions.append(odoo_version) + return odoo_versions diff --git a/odoo_openupgrade_wizard/templates.py b/odoo_openupgrade_wizard/templates.py index 41f0044..193a140 100644 --- a/odoo_openupgrade_wizard/templates.py +++ b/odoo_openupgrade_wizard/templates.py @@ -1,4 +1,6 @@ -CONFIG_YML_TEMPLATE = """odoo_versions: +CONFIG_YML_TEMPLATE = """project_name: {{ project_name }} + +odoo_versions: {% for odoo_version in odoo_versions %} - release: {{ odoo_version['release'] }} {% endfor %} diff --git a/tests/cli_01_init_test.py b/tests/cli_01_init_test.py index 3473001..5ea94e0 100644 --- a/tests/cli_01_init_test.py +++ b/tests/cli_01_init_test.py @@ -16,6 +16,7 @@ def test_cli_init(): [ "--env-folder=%s" % output_folder_path, "init", + "--project-name=test-cli-init", "--initial-release=9.0", "--final-release=12.0", "--extra-repository=" diff --git a/tests/cli_02_get_code_test.py b/tests/cli_02_get_code_test.py index dbf5568..81e9aed 100644 --- a/tests/cli_02_get_code_test.py +++ b/tests/cli_02_get_code_test.py @@ -17,6 +17,7 @@ def test_cli_get_code(): [ "--env-folder=%s" % output_folder_path, "init", + "--project-name=test-cli-get-code", "--initial-release=14.0", "--final-release=14.0", "--extra-repository=OCA/web", diff --git a/tests/output_01_expected/config.yml b/tests/output_01_expected/config.yml index 119a750..36512a6 100644 --- a/tests/output_01_expected/config.yml +++ b/tests/output_01_expected/config.yml @@ -1,3 +1,5 @@ +project_name: test-cli-init + odoo_versions: - release: 9.0