From 83b29758ef2bb4e0561eaf17b14723e4dda64762 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Wed, 5 Mar 2025 12:09:48 +0100 Subject: [PATCH 01/12] version validation --- leverage/leverage.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/leverage/leverage.py b/leverage/leverage.py index 0360f9f..f34103d 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -1,12 +1,12 @@ """ Binbash Leverage Command-line tool. """ +from packaging.version import Version import click -from leverage import __version__ +from leverage import __version__, conf from leverage._internals import pass_state - from leverage.modules.aws import aws from leverage.modules.credentials import credentials from leverage.modules import run, project, terraform, tfautomv, kubectl, shell @@ -25,6 +25,11 @@ def leverage(context, state, verbose): # leverage called with no subcommand click.echo(context.get_help()) + # if there is a version restriction set, make sure we satisfy it + config = conf.load() + minimum_version = config.get('LEVERAGE_CLI_VERSION') + if minimum_version and Version(__version__) < Version(minimum_version): + click.echo(f"\033[91mWARNING\033[0m\tYour current version ({__version__}) is lower than the required minimum ({minimum_version}).") # Add modules to leverage leverage.add_command(run) From 3c496473955fd888ab6c717a600ea733c8d33106 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Wed, 5 Mar 2025 12:09:54 +0100 Subject: [PATCH 02/12] test --- tests/test_conf.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index 550d96b..4107a5a 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -1,8 +1,11 @@ +from unittest import mock + import pytest +from click.testing import CliRunner +from leverage import leverage from leverage.conf import load - ROOT_ENV_FILE = """ # Project settings PROJECT=foobar @@ -52,3 +55,15 @@ def test_load_config(monkeypatch, click_context, tmp_path, write_files, expected loaded_values = load() assert dict(loaded_values) == expected_values + + +def test_version_validation(): + """ + Test that we get a warning if we are working with a version lower than the required by the project. + """ + runner = CliRunner() + with mock.patch("leverage.conf.load", return_value={"LEVERAGE_CLI_VERSION": "99.9.9"}): + result = runner.invoke(leverage) + + assert "is lower than the required minimum (99.9.9)" in result.output + assert result.exit_code == 0 From 1addb9d4c181ff1afc15af47ba3d0a150fda16d3 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Wed, 5 Mar 2025 12:11:01 +0100 Subject: [PATCH 03/12] black --- leverage/leverage.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/leverage/leverage.py b/leverage/leverage.py index f34103d..7339c05 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -1,6 +1,7 @@ """ Binbash Leverage Command-line tool. """ + from packaging.version import Version import click @@ -27,9 +28,12 @@ def leverage(context, state, verbose): # if there is a version restriction set, make sure we satisfy it config = conf.load() - minimum_version = config.get('LEVERAGE_CLI_VERSION') + minimum_version = config.get("LEVERAGE_CLI_VERSION") if minimum_version and Version(__version__) < Version(minimum_version): - click.echo(f"\033[91mWARNING\033[0m\tYour current version ({__version__}) is lower than the required minimum ({minimum_version}).") + click.echo( + f"\033[91mWARNING\033[0m\tYour current version ({__version__}) is lower than the required minimum ({minimum_version})." + ) + # Add modules to leverage leverage.add_command(run) From 56d56b21ae7563f9d3c762463814a4bfe2a374f0 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 6 Mar 2025 10:47:38 +0100 Subject: [PATCH 04/12] only verify version over already started projects --- leverage/leverage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/leverage/leverage.py b/leverage/leverage.py index 7339c05..1feb28b 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -11,6 +11,7 @@ from leverage.modules.aws import aws from leverage.modules.credentials import credentials from leverage.modules import run, project, terraform, tfautomv, kubectl, shell +from leverage.path import NotARepositoryError @click.group(invoke_without_command=True) @@ -27,7 +28,11 @@ def leverage(context, state, verbose): click.echo(context.get_help()) # if there is a version restriction set, make sure we satisfy it - config = conf.load() + try: + config = conf.load() + except NotARepositoryError: + # restrictions are only verified within a leverage project + return minimum_version = config.get("LEVERAGE_CLI_VERSION") if minimum_version and Version(__version__) < Version(minimum_version): click.echo( From 49069f6ed44ff1ce815a6a3bc14a8a1e15c1275e Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 13 Mar 2025 10:33:04 +0100 Subject: [PATCH 05/12] check toolbox version rather than ref-arch --- leverage/__init__.py | 5 +++++ leverage/leverage.py | 17 ++++++++++------- tests/test_conf.py | 8 +++++--- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/leverage/__init__.py b/leverage/__init__.py index 97202d2..3222e43 100644 --- a/leverage/__init__.py +++ b/leverage/__init__.py @@ -7,6 +7,11 @@ __version__ = "0.0.0" __toolbox_version__ = "1.3.5-0.2.0" +MINIMUM_VERSIONS = { + "TERRAFORM": "1.3.5", + "LEVERAGE_CLI": "0.2.0" +} + import sys from shutil import which diff --git a/leverage/leverage.py b/leverage/leverage.py index 1feb28b..81d9585 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -1,12 +1,12 @@ """ Binbash Leverage Command-line tool. """ - +import rich from packaging.version import Version import click -from leverage import __version__, conf +from leverage import __version__, conf, MINIMUM_VERSIONS from leverage._internals import pass_state from leverage.modules.aws import aws from leverage.modules.credentials import credentials @@ -33,11 +33,14 @@ def leverage(context, state, verbose): except NotARepositoryError: # restrictions are only verified within a leverage project return - minimum_version = config.get("LEVERAGE_CLI_VERSION") - if minimum_version and Version(__version__) < Version(minimum_version): - click.echo( - f"\033[91mWARNING\033[0m\tYour current version ({__version__}) is lower than the required minimum ({minimum_version})." - ) + + # check if the current versions are lower than the minimum required + current_values = config.get("TERRAFORM_IMAGE_TAG").split("-") + for key, current in zip(MINIMUM_VERSIONS, current_values): + if Version(current) < Version(MINIMUM_VERSIONS[key]): + rich.print( + f"[red]WARNING[/red]\tYour current {key} version ({current}) is lower than the required minimum ({MINIMUM_VERSIONS[key]})." + ) # Add modules to leverage diff --git a/tests/test_conf.py b/tests/test_conf.py index 4107a5a..f35c747 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -62,8 +62,10 @@ def test_version_validation(): Test that we get a warning if we are working with a version lower than the required by the project. """ runner = CliRunner() - with mock.patch("leverage.conf.load", return_value={"LEVERAGE_CLI_VERSION": "99.9.9"}): - result = runner.invoke(leverage) + with mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}): + with mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}): + result = runner.invoke(leverage) - assert "is lower than the required minimum (99.9.9)" in result.output + assert "Your current TERRAFORM version (1.1.1) is lower than the required minimum (3.3.3)" in result.output.replace("\n", "") + assert "Your current LEVERAGE_CLI version (2.2.2) is lower than the required minimum (4.4.4)" in result.output.replace("\n", "") assert result.exit_code == 0 From c0d2bbc6d1137eb21e43bbad3ffe2992f29b6605 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 13 Mar 2025 10:50:02 +0100 Subject: [PATCH 06/12] black --- tests/test_conf.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index f35c747..e170dbf 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -62,10 +62,15 @@ def test_version_validation(): Test that we get a warning if we are working with a version lower than the required by the project. """ runner = CliRunner() - with mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}): - with mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}): + with mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}), \ + mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}): result = runner.invoke(leverage) - assert "Your current TERRAFORM version (1.1.1) is lower than the required minimum (3.3.3)" in result.output.replace("\n", "") - assert "Your current LEVERAGE_CLI version (2.2.2) is lower than the required minimum (4.4.4)" in result.output.replace("\n", "") + assert "Your current TERRAFORM version (1.1.1) is lower than the required minimum (3.3.3)" in result.output.replace( + "\n", "" + ) + assert ( + "Your current LEVERAGE_CLI version (2.2.2) is lower than the required minimum (4.4.4)" + in result.output.replace("\n", "") + ) assert result.exit_code == 0 From 437e7ca3c66ce2e921245afdbe9958310126b190 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 13 Mar 2025 10:53:33 +0100 Subject: [PATCH 07/12] more black --- leverage/leverage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/leverage/leverage.py b/leverage/leverage.py index 81d9585..845bf93 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -1,6 +1,7 @@ """ Binbash Leverage Command-line tool. """ + import rich from packaging.version import Version From d3327f9e28cd2ad3912d304b3f728f8ead70d836 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 13 Mar 2025 11:02:07 +0100 Subject: [PATCH 08/12] avoid validation when the config is not yet created --- leverage/leverage.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/leverage/leverage.py b/leverage/leverage.py index 845bf93..3d6a45c 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -36,8 +36,11 @@ def leverage(context, state, verbose): return # check if the current versions are lower than the minimum required - current_values = config.get("TERRAFORM_IMAGE_TAG").split("-") - for key, current in zip(MINIMUM_VERSIONS, current_values): + if not (current_values := config.get("TERRAFORM_IMAGE_TAG")): + # at some points of the project (the init), the config file is not created yet + return + # validate both CLI and TF versions + for key, current in zip(MINIMUM_VERSIONS, current_values.split("-")): if Version(current) < Version(MINIMUM_VERSIONS[key]): rich.print( f"[red]WARNING[/red]\tYour current {key} version ({current}) is lower than the required minimum ({MINIMUM_VERSIONS[key]})." From 5e06882d8f2d39c555c5cd9bed448d4c4e92c861 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Thu, 13 Mar 2025 11:04:41 +0100 Subject: [PATCH 09/12] last black round --- leverage/__init__.py | 5 +---- tests/test_conf.py | 8 +++++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/leverage/__init__.py b/leverage/__init__.py index 3222e43..6aca5de 100644 --- a/leverage/__init__.py +++ b/leverage/__init__.py @@ -7,10 +7,7 @@ __version__ = "0.0.0" __toolbox_version__ = "1.3.5-0.2.0" -MINIMUM_VERSIONS = { - "TERRAFORM": "1.3.5", - "LEVERAGE_CLI": "0.2.0" -} +MINIMUM_VERSIONS = {"TERRAFORM": "1.3.5", "LEVERAGE_CLI": "0.2.0"} import sys from shutil import which diff --git a/tests/test_conf.py b/tests/test_conf.py index e170dbf..c7397d4 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -62,9 +62,11 @@ def test_version_validation(): Test that we get a warning if we are working with a version lower than the required by the project. """ runner = CliRunner() - with mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}), \ - mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}): - result = runner.invoke(leverage) + with ( + mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}), + mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}), + ): + result = runner.invoke(leverage) assert "Your current TERRAFORM version (1.1.1) is lower than the required minimum (3.3.3)" in result.output.replace( "\n", "" From 9c19af2abd391ffb4675732d9e49103dcfc86924 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Sat, 15 Mar 2025 10:24:21 +0100 Subject: [PATCH 10/12] is toolbox not cli version --- leverage/__init__.py | 5 ++++- tests/test_conf.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/leverage/__init__.py b/leverage/__init__.py index 6aca5de..a01e8f2 100644 --- a/leverage/__init__.py +++ b/leverage/__init__.py @@ -7,7 +7,10 @@ __version__ = "0.0.0" __toolbox_version__ = "1.3.5-0.2.0" -MINIMUM_VERSIONS = {"TERRAFORM": "1.3.5", "LEVERAGE_CLI": "0.2.0"} +MINIMUM_VERSIONS = { + "TERRAFORM": "1.3.5", + "TOOLBOX": "0.2.0", +} import sys from shutil import which diff --git a/tests/test_conf.py b/tests/test_conf.py index c7397d4..cec0319 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -64,7 +64,7 @@ def test_version_validation(): runner = CliRunner() with ( mock.patch("leverage.conf.load", return_value={"TERRAFORM_IMAGE_TAG": "1.1.1-2.2.2"}), - mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "LEVERAGE_CLI": "4.4.4"}), + mock.patch.dict("leverage.MINIMUM_VERSIONS", {"TERRAFORM": "3.3.3", "TOOLBOX": "4.4.4"}), ): result = runner.invoke(leverage) @@ -72,7 +72,7 @@ def test_version_validation(): "\n", "" ) assert ( - "Your current LEVERAGE_CLI version (2.2.2) is lower than the required minimum (4.4.4)" + "Your current TOOLBOX version (2.2.2) is lower than the required minimum (4.4.4)" in result.output.replace("\n", "") ) assert result.exit_code == 0 From 2ffe5a2de05b644fc66bef5ee869686bde3ce942 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Sat, 15 Mar 2025 10:25:14 +0100 Subject: [PATCH 11/12] fix comment --- leverage/leverage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/leverage/leverage.py b/leverage/leverage.py index 3d6a45c..42b1e6e 100644 --- a/leverage/leverage.py +++ b/leverage/leverage.py @@ -39,7 +39,7 @@ def leverage(context, state, verbose): if not (current_values := config.get("TERRAFORM_IMAGE_TAG")): # at some points of the project (the init), the config file is not created yet return - # validate both CLI and TF versions + # validate both TOOLBOX and TF versions for key, current in zip(MINIMUM_VERSIONS, current_values.split("-")): if Version(current) < Version(MINIMUM_VERSIONS[key]): rich.print( From 08209f80e180fd04ffa30b314869e82cadc7f851 Mon Sep 17 00:00:00 2001 From: Francisco Rivera Date: Sat, 15 Mar 2025 10:25:51 +0100 Subject: [PATCH 12/12] black --- tests/test_conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index cec0319..57ede97 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -71,8 +71,7 @@ def test_version_validation(): assert "Your current TERRAFORM version (1.1.1) is lower than the required minimum (3.3.3)" in result.output.replace( "\n", "" ) - assert ( - "Your current TOOLBOX version (2.2.2) is lower than the required minimum (4.4.4)" - in result.output.replace("\n", "") + assert "Your current TOOLBOX version (2.2.2) is lower than the required minimum (4.4.4)" in result.output.replace( + "\n", "" ) assert result.exit_code == 0