diff --git a/helm-chart/renku-core/templates/deployment.yaml b/helm-chart/renku-core/templates/deployment.yaml index 98ea0a8579..7f0313ea26 100644 --- a/helm-chart/renku-core/templates/deployment.yaml +++ b/helm-chart/renku-core/templates/deployment.yaml @@ -137,6 +137,8 @@ spec: value: {{ $.Values.gitLFSSkipSmudge | quote }} - name: RENKU_DOMAIN value: {{ $.Values.global.renku.domain }} + - name: RENKU_PROJECT_DEFAULT_CLI_VERSION + value: {{ $.Values.global.renku.cli_version | default "" | quote }} {{- include "certificates.env.python" $ | nindent 12 }} volumeMounts: - name: shared-volume diff --git a/renku/command/command_builder/database.py b/renku/command/command_builder/database.py index 563e319b78..a9f84b43ae 100644 --- a/renku/command/command_builder/database.py +++ b/renku/command/command_builder/database.py @@ -92,7 +92,7 @@ def _injection_pre_hook(self, builder: Command, context: dict, *args, **kwargs) current_version = Version(__version__) - if current_version < minimum_renku_version: + if Version(current_version.base_version) < minimum_renku_version: raise errors.MinimumVersionError(current_version, minimum_renku_version) def _post_hook(self, builder: Command, context: dict, result: CommandResult, *args, **kwargs) -> None: diff --git a/renku/ui/service/controllers/templates_create_project.py b/renku/ui/service/controllers/templates_create_project.py index 9b4f6d1292..051f6e460d 100644 --- a/renku/ui/service/controllers/templates_create_project.py +++ b/renku/ui/service/controllers/templates_create_project.py @@ -15,6 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """Renku service template create project controller.""" +import os import shutil from typing import Any, Dict, Optional, cast @@ -72,8 +73,10 @@ def default_metadata(self): "__project_slug__": self.ctx["project_slug"], "__project_description__": self.ctx["project_description"], } - if is_release(): - metadata["__renku_version__"] = __version__ + + cli_version = os.environ.get("RENKU_PROJECT_DEFAULT_CLI_VERSION") or __version__ + if is_release(cli_version): + metadata["__renku_version__"] = cli_version return metadata diff --git a/renku/version.py b/renku/version.py index ed89ebfb1d..1678b09903 100644 --- a/renku/version.py +++ b/renku/version.py @@ -16,6 +16,7 @@ """Version information for Renku.""" import re +from typing import Optional try: from importlib.metadata import distribution, version @@ -27,9 +28,12 @@ __minimum_project_version__ = "2.4.0" -def is_release(): +def is_release(version: Optional[str] = None): """Check if current version is a release semver.""" - if re.match(r"\d+.\d+.\d+$", __version__): + if not version: + version = __version__ + + if re.match(r"\d+.\d+.\d+(rc\d+)?$", version): return True return False diff --git a/tests/service/controllers/test_templates_create_project.py b/tests/service/controllers/test_templates_create_project.py index 340f80fbce..f70c234d01 100644 --- a/tests/service/controllers/test_templates_create_project.py +++ b/tests/service/controllers/test_templates_create_project.py @@ -159,3 +159,31 @@ def test_except_project_name_handler(project_name, ctrl_init, svc_client_templat TemplatesCreateProjectCtrl(cache, user_data, payload) assert "Project name contains only unsupported characters" in str(exc_info.value) + + +def test_template_create_project_with_custom_cli_ctrl( + ctrl_init, svc_cache_dir, svc_client_templates_creation, mocker, monkeypatch +): + """Test template create project controller.""" + monkeypatch.setenv("RENKU_PROJECT_DEFAULT_CLI_VERSION", "9.9.9rc9") + from renku.ui.service.controllers.templates_create_project import TemplatesCreateProjectCtrl + + cache, user_data = ctrl_init + _, _, payload, _ = svc_client_templates_creation + + ctrl = TemplatesCreateProjectCtrl(cache, user_data, payload) + mocker.patch.object(ctrl, "new_project_push", return_value=None) + response = ctrl.to_response() + + # Check response. + assert {"result"} == response.json.keys() + assert {"project_id", "url", "namespace", "name", "slug"} == response.json["result"].keys() + + cache_dir, _ = svc_cache_dir + + project_path = ( + cache_dir / user_data["user_id"] / response.json["result"]["namespace"] / response.json["result"]["slug"] + ) + + with open(project_path / "Dockerfile") as f: + assert "ARG RENKU_VERSION=9.9.9rc9" in f.read()