import os import traceback from cpl_cli.configuration import ProjectSettings from cpl_core.utils import String from cpl_cli.configuration.version_settings_name_enum import VersionSettingsNameEnum from cpl_cli.configuration.workspace_settings import WorkspaceSettings from cpl_core.application.application_abc import ApplicationABC from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.console.console import Console from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_core.pipes.version_pipe import VersionPipe from set_version.git_service import GitService from set_version.version_setter_service import VersionSetterService class Application(ApplicationABC): def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): ApplicationABC.__init__(self, config, services) self._workspace: WorkspaceSettings = config.get_configuration(WorkspaceSettings) self._git_service: GitService = self._services.get_service(GitService) self._version_setter: VersionSetterService = self._services.get_service(VersionSetterService) self._version_pipe: VersionPipe = self._services.get_service(VersionPipe) def configure(self): self._configuration.parse_console_arguments(self._services) def main(self): Console.write_line("Set versions:") args = self._configuration.additional_arguments version = {} branch = "" suffix = "" force = False if "--force" in args: args.remove("--force") force = True if len(args) > 1: Console.error(f'Unexpected argument(s): {", ".join(args[1:])}') return if len(args) == 1: suffix = args[0] try: branch = self._git_service.get_active_branch_name() Console.write_line(f"Found branch: {branch}") except Exception as e: Console.error("Branch not found", traceback.format_exc()) return try: if suffix != "": self._configuration.add_json_file( self._workspace.projects[self._workspace.default_project], optional=False, output=False ) ps: ProjectSettings = self._configuration.get_configuration(ProjectSettings) version[VersionSettingsNameEnum.major.value] = ps.version.major version[VersionSettingsNameEnum.minor.value] = ps.version.minor version[VersionSettingsNameEnum.micro.value] = suffix elif branch.startswith("#"): self._configuration.add_json_file( self._workspace.projects[self._workspace.default_project], optional=False, output=False ) ps: ProjectSettings = self._configuration.get_configuration(ProjectSettings) version[VersionSettingsNameEnum.major.value] = ps.version.major version[VersionSettingsNameEnum.minor.value] = ps.version.minor version[VersionSettingsNameEnum.micro.value] = f'dev{branch.split("#")[1]}' else: version[VersionSettingsNameEnum.major.value] = branch.split(".")[0] version[VersionSettingsNameEnum.minor.value] = branch.split(".")[1] if len(branch.split(".")) == 2: if suffix == "": suffix = "0" version[VersionSettingsNameEnum.micro.value] = f"{suffix}" else: version[VersionSettingsNameEnum.micro.value] = f'{branch.split(".")[2]}{suffix}' except Exception as e: Console.error(f"Branch {branch} does not contain valid version") return diff_paths = [] for file in self._git_service.get_diff_files(): if file.startswith("tools"): continue if "/" in file: file = file.split("/")[1] else: file = os.path.basename(os.path.dirname(file)) if file in diff_paths: continue diff_paths.append(file) try: skipped = [] for project in self._workspace.projects: if project not in diff_paths and String.convert_to_snake_case(project) not in diff_paths and not force: # Console.write_line(f'Skipping {project} due to missing changes') skipped.append(project) continue Console.write_line(f"Set dependencies {self._version_pipe.transform(version)} for {project}") self._version_setter.set_dependencies( self._workspace.projects[project], version, "Dependencies", skipped=skipped ) self._version_setter.set_dependencies( self._workspace.projects[project], version, "DevDependencies", skipped=skipped ) Console.write_line(f"Set version {self._version_pipe.transform(version)} for {project}") self._version_setter.set_version(self._workspace.projects[project], version) except Exception as e: Console.error("Version could not be set", traceback.format_exc()) return