Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

restore CI output group folding in github actions #38167

Merged
merged 6 commits into from
Aug 15, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 53 additions & 18 deletions test/fold_block.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,65 @@
import itertools
import os
import typing

next_block_id = 1


class Fold(object):
class BaseCiCfg:
_block_id_gen = itertools.count(1)

def __init__(self):
global next_block_id
self.block_id = next_block_id
next_block_id += 1

def get_message(self, msg=''):
if os.environ.get('TRAVIS') == 'true':
if msg:
msg += ', '
msg += "see folded block '%s' above for details" % self.get_block_name()
self.block_id = next(self._block_id_gen)

@classmethod
def is_ci(cls) -> bool:
raise NotImplementedError("Use BaseCiCfg only as fallback")

def get_message(self, msg: str = "") -> str:
return msg

def _get_message_folded(self, msg: str = "") -> str:
if msg:
msg += ", "
msg += "see folded block '%s' above for details" % self.get_block_name()
return msg

def get_block_name(self):
return 'block%d' % self.block_id
def get_block_name(self) -> str:
return "block%d" % self.block_id

def __enter__(self):
return self

def __exit__(self, type, value, traceback):
pass


class GithubActionsCiCfg(BaseCiCfg):
@classmethod
def is_ci(cls) -> bool:
return os.environ.get("GITHUB_ACTIONS") == "true"

def get_message(self, msg=""):
return self._get_message_folded(msg)

def __enter__(self):
if os.environ.get('TRAVIS') == 'true':
print('travis_fold:start:%s' % self.get_block_name())
print("\n::group::%s" % self.get_block_name())
return self

def __exit__(self, type, value, traceback):
if os.environ.get('TRAVIS') == 'true':
print('travis_fold:end:%s' % self.get_block_name())
print("\n::endgroup::")


# determine CI system, and set as Fold
def _determine_ci_system() -> typing.Type[BaseCiCfg]:
def visitor(cls: typing.Type[BaseCiCfg]) -> typing.Optional[typing.Type[BaseCiCfg]]:
for sub in cls.__subclasses__():
if sub.is_ci():
return sub
res = visitor(sub)
if res:
return res
return None

return visitor(BaseCiCfg) or BaseCiCfg


Fold = _determine_ci_system()
Loading