def finish_builds_on_success(self, projects: Projects, current_version: str): write_to_console("All builds completed successfully, build file updated") ProjectListManager().save_project_list(projects) version_list = ProjectVersionManager().build_version_list( projects, current_version ) ProjectVersionManager().save_version_list(version_list)
def setup(self): write_to_console("Loading default configuration", color="blue") ConfigurationManager.load("monorepo-builder-config.json") write_to_console("Checking for installer folder") configuration = ConfigurationManager.get() Path(configuration.installer_folder).mkdir(exist_ok=True)
def run(version: str): write_to_console("Starting the build", color="blue") runner = Runner() runner.setup() projects = runner.gather_projects() build_requests = runner.do_builds(projects) if build_requests.success: runner.finish_builds_on_success(projects, version) else: runner.finish_builds_on_failure(build_requests) write_to_console("Build complete", color="blue")
def load(cls, configuration_filename: str): if not Path(configuration_filename).exists(): write_to_console( "Configuration file not found; default configuration used", color="red") cls.configuration = Configuration() return with open(configuration_filename, "r") as configuration_file: read_configuration = json.load(configuration_file) cls.configuration = Configuration.build_from_settings( read_configuration)
def run_build(self, project_build_request: ProjectBuildRequest): write_to_console(f"{project_build_request.project.name} Building", color="blue", bold=True) if not project_build_request.project.needs_build: project_build_request.build_status = BuildRequestStatus.NotNeeded write_to_console("Build not needed") return InstallerManager().copy_installers_to_project( project_build_request.project) result = subprocess.run(["./build.sh"], cwd=project_build_request.project.project_path) project_build_request.build_status = BuildRequestStatus.Complete project_build_request.run_successful = result.returncode == 0
def finish_builds_on_failure(self, build_requests: ProjectBuildRequests): write_to_console("Builds failed", color="red") for build_request in build_requests.failed: write_to_console(f"{build_request.project.name} failed")
def gather_projects(self) -> Projects: write_to_console("Creating Project List", color="blue") projects = Projects.projects_factory() write_to_console("Identifying projects requiring a build") BuildRunner().identify_projects_needing_build(projects) return projects