From 96479236476a4eb336d7378b2fa403a9fbcd882b Mon Sep 17 00:00:00 2001 From: edraft Date: Sun, 12 Oct 2025 18:19:58 +0200 Subject: [PATCH] Improved build --- src/cli/cpl/cli/command/project/build.py | 33 ++++++++------ src/cli/cpl/cli/model/project.py | 56 ++++++++++++++---------- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/src/cli/cpl/cli/command/project/build.py b/src/cli/cpl/cli/command/project/build.py index f8c51fa1..91225ec7 100644 --- a/src/cli/cpl/cli/command/project/build.py +++ b/src/cli/cpl/cli/command/project/build.py @@ -42,18 +42,23 @@ def build(project: str, dist: str = None, skip_py_build: bool = None, verbose: b create_pyproject_toml(project, dist_path / project.name) python = str(get_venv_python(venv)) - subprocess.run( - [ - python, - "-m", - "build", - "--outdir", - str(dist_path / project.name), - str(dist_path / project.name), - ], - check=True, - stdin=subprocess.DEVNULL if not verbose else None, - stdout=subprocess.DEVNULL if not verbose else None, - stderr=subprocess.DEVNULL if not verbose else None, + Console.spinner( + "Building python package...", + lambda: ( + subprocess.run( + [ + python, + "-m", + "build", + "--outdir", + str(dist_path / project.name), + str(dist_path / project.name), + ], + check=True, + stdin=subprocess.DEVNULL if not verbose else None, + stdout=subprocess.DEVNULL if not verbose else None, + stderr=subprocess.DEVNULL if not verbose else None, + ) + ), ) - Console.write_line("\nDone!") + Console.write_line(" Done!") diff --git a/src/cli/cpl/cli/model/project.py b/src/cli/cpl/cli/model/project.py index 37fa4e5d..cb78ba12 100644 --- a/src/cli/cpl/cli/model/project.py +++ b/src/cli/cpl/cli/model/project.py @@ -3,7 +3,7 @@ import os import re import shutil from pathlib import Path -from typing import Optional, List, Dict +from typing import Optional, List, Dict, Self from urllib.parse import urlparse from cpl.cli.model.build import Build @@ -228,42 +228,50 @@ class Project(CPLStructureModel): for p in references: os.chdir(Path(p.path).parent) - p.do_build(dist, verbose) + p.do_build(dist, verbose, self) os.chdir(old_dir) - def do_build(self, dist: Path, verbose: bool = False): - self.build_references(dist, verbose) - - Console.write_line(f"Building project {self.name}...") + def do_build(self, dist: Path, verbose: bool = False, parent: Self = None): if isinstance(dist, str): dist = Path(dist) - dist_path = dist / self.name - rel_dir = Path(self.path).parent / Path(self.directory) + dist_project = self if parent is None else parent + dist_path = (dist / dist_project.name / self.directory).resolve().absolute() + + if parent is None: + if verbose: + Console.write_line(f" Cleaning dist folder at {dist_path}...") + shutil.rmtree(str(dist_path), ignore_errors=True) if verbose: - Console.write_line(f" Collecting project '{self.name}' files...") + Console.write_line(f" Building references for project {self.name}...") - files = self._collect_files(rel_dir) + self.build_references(dist, verbose) - if len(files) == 0: - return + # Console.write_line(f"Building project {self.name}...") + def _build(): + if verbose: + Console.write_line(f" Collecting project '{self.name}' files...") - if verbose: - Console.write_line(f" Cleaning dist folder at {dist_path.absolute()}...") + rel_dir = (Path(self.path).parent / Path(self.directory)).absolute() + files = self._collect_files(rel_dir) + if len(files) == 0: + if verbose: + Console.write_line(f" No files found in {rel_dir}, skipping copy.") + return - shutil.rmtree(str(dist_path), ignore_errors=True) + for file in files: + rel_path = file.relative_to(rel_dir) + dest_file_path = dist_path / rel_path - for file in files: - rel_path = file.relative_to(rel_dir) - dest_file_path = dist_path / rel_path + if not dest_file_path.parent.exists(): + os.makedirs(dest_file_path.parent, exist_ok=True) - if not dest_file_path.parent.exists(): - os.makedirs(dest_file_path.parent, exist_ok=True) + shutil.copy(file, dest_file_path) - shutil.copy(file, dest_file_path) + if verbose: + Console.write_line(f" Copied {len(files)} files from {rel_dir} to {dist_path}") + Console.write_line(" Done!") - if verbose: - Console.write_line(f" Copied {len(files)} files from {rel_dir.absolute()} to {dist_path.absolute()}") - Console.write_line(" Done!") + Console.spinner(f"Building project {self.name}...", lambda: _build())