Workaround the Github forgetting styles bug
This commit is contained in:
@@ -22,9 +22,11 @@ from cibuildwheel.typing import PLATFORMS, PlatformName, assert_never
|
||||
from cibuildwheel.util import (
|
||||
CIBW_CACHE_PATH,
|
||||
BuildSelector,
|
||||
CIProvider,
|
||||
Unbuffered,
|
||||
chdir,
|
||||
detect_ci_provider,
|
||||
fix_ansi_codes_for_github_actions,
|
||||
)
|
||||
|
||||
|
||||
@@ -319,7 +321,10 @@ def print_preamble(platform: str, options: Options, identifiers: list[str]) -> N
|
||||
|
||||
print("Build options:")
|
||||
print(f" platform: {platform}")
|
||||
print(textwrap.indent(options.summary(identifiers), " "))
|
||||
options_summary = textwrap.indent(options.summary(identifiers), " ")
|
||||
if detect_ci_provider() == CIProvider.github_actions:
|
||||
options_summary = fix_ansi_codes_for_github_actions(options_summary)
|
||||
print(options_summary)
|
||||
|
||||
print()
|
||||
print(f"Cache folder: {CIBW_CACHE_PATH}")
|
||||
|
||||
@@ -669,6 +669,10 @@ class Options:
|
||||
default_value: Any,
|
||||
overrides: dict[str, Any] | None = None,
|
||||
) -> str:
|
||||
"""
|
||||
Return a summary of the option value, including any overrides, with
|
||||
ANSI 'dim' color if it's the default.
|
||||
"""
|
||||
value_str = self.option_summary_value(option_value)
|
||||
default_value_str = self.option_summary_value(default_value)
|
||||
overrides_value_strs = {
|
||||
|
||||
@@ -672,3 +672,31 @@ def chdir(new_path: Path | str) -> Generator[None, None, None]:
|
||||
yield
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
|
||||
def fix_ansi_codes_for_github_actions(text: str) -> str:
|
||||
"""
|
||||
Github Actions forgets the current ANSI style on every new line. This
|
||||
function repeats the current ANSI style on every new line.
|
||||
"""
|
||||
ansi_code_regex = re.compile(r"(\033\[[0-9;]*m)")
|
||||
ansi_codes: list[str] = []
|
||||
output = ""
|
||||
|
||||
for line in text.split("\n"):
|
||||
# add the current ANSI codes to the beginning of the line
|
||||
output += "".join(ansi_codes) + line + "\n"
|
||||
|
||||
# split the line at each ANSI code
|
||||
parts = ansi_code_regex.split(line)
|
||||
# if there are any ANSI codes, save them
|
||||
if len(parts) > 1:
|
||||
# iterate over the ANSI codes in this line
|
||||
for code in parts[1::2]:
|
||||
if code == "\033[0m":
|
||||
# reset the list of ANSI codes when the clear code is found
|
||||
ansi_codes = []
|
||||
else:
|
||||
ansi_codes.append(code)
|
||||
|
||||
return output
|
||||
|
||||
Reference in New Issue
Block a user