diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index fcec1553..dd7bce32 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -259,8 +259,7 @@ def build(options: BuildOptions) -> None: docker.copy_out(container_output_dir, options.output_dir) log.step_end() except subprocess.CalledProcessError as error: - print(f'::error::{error}') - print(f'Command {error.cmd} failed with code {error.returncode}. {error.stdout}') + log.error(f'Command {error.cmd} failed with code {error.returncode}. {error.stdout}') troubleshoot(options.package_dir, error) exit(1) diff --git a/cibuildwheel/logger.py b/cibuildwheel/logger.py index 67d4f745..5f73d894 100644 --- a/cibuildwheel/logger.py +++ b/cibuildwheel/logger.py @@ -1,7 +1,7 @@ import os import time import sys -from typing import Optional +from typing import Optional, Union DEFAULT_FOLD_PATTERN = ('{name}', '') FOLD_PATTERNS = { @@ -78,25 +78,39 @@ class Logger: def step(self, step_description: str): self.step_end() self.step_start_time = time.time() - self.start_fold_group(step_description) + self._start_fold_group(step_description) - def step_end(self): + def step_end(self, success=True): if self.step_start_time is not None: - self.end_fold_group() + self._end_fold_group() c = self.colors duration = time.time() - self.step_start_time - print(f'{c.green}✓ {c.end}{duration:.2f}s'.rjust(78)) + if success: + print(f'{c.green}✓ {c.end}{duration:.2f}s'.rjust(78)) + else: + print(f'{c.red}✕ {c.end}{duration:.2f}s'.rjust(78)) + self.step_start_time = None - def start_fold_group(self, name: str): - self.end_fold_group() + def error(self, error: Union[Exception, str]): + self.step_end(success=False) + print() + + if self.fold_mode == 'github': + print(f'::error::{error}') + else: + c = self.colors + print(f'{c.bright_red}Error{c.end} {error}') + + def _start_fold_group(self, name: str): + self._end_fold_group() self.active_fold_group_name = name fold_start_pattern = FOLD_PATTERNS.get(self.fold_mode, DEFAULT_FOLD_PATTERN)[0] print(fold_start_pattern.format(name=self.active_fold_group_name)) print() - def end_fold_group(self): + def _end_fold_group(self): if self.active_fold_group_name: fold_start_pattern = FOLD_PATTERNS.get(self.fold_mode, DEFAULT_FOLD_PATTERN)[1] print(fold_start_pattern.format(name=self.active_fold_group_name)) @@ -142,6 +156,7 @@ class Colors(): yellow = '\033[33m' blue = '\033[34m' cyan = '\033[36m' + bright_red = '\033[91m' bright_green = '\033[92m' white = '\033[37m\033[97m'