diff --git a/src/spring-cloud/azext_spring_cloud/_buildservices_factory.py b/src/spring-cloud/azext_spring_cloud/_buildservices_factory.py index dce0c0fd415..1e5fb111f48 100644 --- a/src/spring-cloud/azext_spring_cloud/_buildservices_factory.py +++ b/src/spring-cloud/azext_spring_cloud/_buildservices_factory.py @@ -16,6 +16,7 @@ from .vendored_sdks.appplatform.v2022_01_01_preview import models from ._deployment_uploadable_factory import uploader_selector from ._log_stream import LogStream +from .vendored_sdks.appplatform.v2022_01_01_preview.models._app_platform_management_client_enums import SupportedRuntimeValue logger = get_logger(__name__) @@ -56,14 +57,14 @@ def _get_upload_info(self): except AttributeError as e: raise AzureInternalError("Failed to get a SAS URL to upload context. Error: {}".format(e)) - def _queue_build(self, relative_path=None, builder=None, target_module=None, app=None, **_): + def _queue_build(self, relative_path=None, builder=None, target_module=None, runtime_version=None, app=None, **_): subscription = get_subscription_id(self.cmd.cli_ctx) service_resource_id = '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.AppPlatform/Spring/{}'.format(subscription, self.resource_group, self.service) properties = models.BuildProperties( builder='{}/buildservices/default/builders/{}'.format(service_resource_id, builder), agent_pool='{}/buildservices/default/agentPools/default'.format(service_resource_id), relative_path=relative_path, - env={"BP_MAVEN_BUILT_MODULE": target_module} if target_module else None) + env=self._get_build_env(target_module, runtime_version)) build = models.Build(properties=properties) try: return self.client.build_service.create_or_update_build(self.resource_group, @@ -74,6 +75,22 @@ def _queue_build(self, relative_path=None, builder=None, target_module=None, app except (AttributeError, CloudError) as e: raise DeploymentError("Failed to create or update a build. Error: {}".format(e.message)) + def _get_build_env(self, target_module, runtime_version): + if all(x is None for x in [target_module, runtime_version]): + return None + env = {} + if target_module: + env['BP_MAVEN_BUILT_MODULE'] = target_module + + runtime_version_table = { + SupportedRuntimeValue.JAVA8: '8.*', + SupportedRuntimeValue.JAVA11: '11.*', + SupportedRuntimeValue.JAVA17: '17.*' + } + if runtime_version: + env['BP_JVM_VERSION'] = runtime_version_table.get(runtime_version, '11.*') + return env + def _wait_build_finished(self, build_result_id): ''' Wait build result finished and stream the log during the waiting diff --git a/src/spring-cloud/azext_spring_cloud/tests/latest/test_asc_app.py b/src/spring-cloud/azext_spring_cloud/tests/latest/test_asc_app.py index b4a428baaf8..9912d566571 100644 --- a/src/spring-cloud/azext_spring_cloud/tests/latest/test_asc_app.py +++ b/src/spring-cloud/azext_spring_cloud/tests/latest/test_asc_app.py @@ -265,7 +265,21 @@ def test_app_deploy_enterprise(self, file_mock): self.assertIsNone(resource.properties.source.version) self.assertEqual({'applicationConfigurationService': {'configFilePatterns': 'my-pattern'}},\ resource.properties.deployment_settings.addon_configs) - + + @mock.patch('azext_spring_cloud._deployment_uploadable_factory.FileUpload.upload_and_build') + def test_app_deploy_build_enterprise(self, file_mock): + file_mock.return_value = mock.MagicMock() + deployment=self._get_deployment() + self._execute('rg', 'asc', 'app', deployment=deployment, artifact_path='my-path', runtime_version='Java_8') + resource = self.put_build_resource + self.assertEqual({"BP_JVM_VERSION": "8.*"}, resource.properties.env) + self._execute('rg', 'asc', 'app', deployment=deployment, artifact_path='my-path', runtime_version='Java_11') + resource = self.put_build_resource + self.assertEqual({"BP_JVM_VERSION": "11.*"}, resource.properties.env) + self._execute('rg', 'asc', 'app', deployment=deployment, artifact_path='my-path', runtime_version='Java_17') + resource = self.put_build_resource + self.assertEqual({"BP_JVM_VERSION": "17.*"}, resource.properties.env) + @mock.patch('azext_spring_cloud._deployment_uploadable_factory.FolderUpload.upload_and_build') def test_app_deploy_folder_enterprise(self, file_mock): file_mock.return_value = mock.MagicMock()