From 9072c7faf45abbc4f1767d4f75f18e334406a743 Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Mon, 7 Aug 2023 09:27:55 +0900 Subject: [PATCH 1/6] restore CI output group folding in github actions See official docs for details: https://docs.github.com/en/actions/using-workflows/ workflow-commands-for-github-actions#grouping-log-lines --- test/fold_block.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index 7cd0abd7e93ad..d471e5f158bd1 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -22,9 +22,9 @@ def get_block_name(self): def __enter__(self): if os.environ.get('TRAVIS') == 'true': - print('travis_fold:start:%s' % self.get_block_name()) + print('::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('::endgroup::') From 9e32e3d5dc453b3740a213398573c4aa93691461 Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Mon, 7 Aug 2023 10:04:47 +0900 Subject: [PATCH 2/6] CI fold for both GHA and travis --- test/fold_block.py | 81 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index d471e5f158bd1..57cd298c91faa 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -1,30 +1,75 @@ +import itertools import os -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_block_name(self): - return 'block%d' % self.block_id + 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) -> str: + return "block%d" % self.block_id def __enter__(self): - if os.environ.get('TRAVIS') == 'true': - print('::group::%s' % self.get_block_name()) return self def __exit__(self, type, value, traceback): - if os.environ.get('TRAVIS') == 'true': - print('::endgroup::') + pass + + +class TravisCiCfg(BaseCiCfg): + @classmethod + def is_ci(cls) -> bool: + return os.environ.get("TRAVIS") == "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()) + return self + + def __exit__(self, type, value, traceback): + print("travis_fold:end:%s" % self.get_block_name()) + + +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("::group::%s" % self.get_block_name()) + return self + + def __exit__(self, type, value, traceback): + if os.environ.get("TRAVIS") == "true": + print("::endgroup::") + + +# determine CI system, and set as Fold +for cls_ in BaseCiCfg.__subclasses__(): + if cls_.is_ci(): + Fold = cls_ + break +else: + Fold = BaseCiCfg From f6136424ce46ecabcfd9cbe929c94bca65da3738 Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Mon, 7 Aug 2023 10:10:25 +0900 Subject: [PATCH 3/6] bugfixes --- test/fold_block.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index 57cd298c91faa..1cf16a3e7dd08 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -40,8 +40,7 @@ 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("travis_fold:start:%s" % self.get_block_name()) return self def __exit__(self, type, value, traceback): @@ -57,13 +56,11 @@ def get_message(self, msg=""): return self._get_message_folded(msg) def __enter__(self): - if os.environ.get("TRAVIS") == "true": - print("::group::%s" % self.get_block_name()) + print("::group::%s" % self.get_block_name()) return self def __exit__(self, type, value, traceback): - if os.environ.get("TRAVIS") == "true": - print("::endgroup::") + print("::endgroup::") # determine CI system, and set as Fold From 5a3ade2302d57f51ba13f5a48b7d6d6437d3620f Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Mon, 7 Aug 2023 10:15:14 +0900 Subject: [PATCH 4/6] ci: fix fold: add newline before fold start --- test/fold_block.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index 1cf16a3e7dd08..ca4f57f5c4728 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -40,11 +40,11 @@ def get_message(self, msg=""): return self._get_message_folded(msg) def __enter__(self): - print("travis_fold:start:%s" % self.get_block_name()) + print("\ntravis_fold:start:%s" % self.get_block_name()) return self def __exit__(self, type, value, traceback): - print("travis_fold:end:%s" % self.get_block_name()) + print("\ntravis_fold:end:%s" % self.get_block_name()) class GithubActionsCiCfg(BaseCiCfg): @@ -56,11 +56,11 @@ def get_message(self, msg=""): return self._get_message_folded(msg) def __enter__(self): - print("::group::%s" % self.get_block_name()) + print("\n::group::%s" % self.get_block_name()) return self def __exit__(self, type, value, traceback): - print("::endgroup::") + print("\n::endgroup::") # determine CI system, and set as Fold From b27c8538d7e00f8c4d220a93d1c1be2f4bf11751 Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Tue, 8 Aug 2023 09:43:29 +0900 Subject: [PATCH 5/6] remove travis from ci folding --- test/fold_block.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index ca4f57f5c4728..c849290f720fa 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -31,22 +31,6 @@ def __exit__(self, type, value, traceback): pass -class TravisCiCfg(BaseCiCfg): - @classmethod - def is_ci(cls) -> bool: - return os.environ.get("TRAVIS") == "true" - - def get_message(self, msg=""): - return self._get_message_folded(msg) - - def __enter__(self): - print("\ntravis_fold:start:%s" % self.get_block_name()) - return self - - def __exit__(self, type, value, traceback): - print("\ntravis_fold:end:%s" % self.get_block_name()) - - class GithubActionsCiCfg(BaseCiCfg): @classmethod def is_ci(cls) -> bool: From 5b9739fba9f7e218bef5268da1b76b715b271e95 Mon Sep 17 00:00:00 2001 From: SubaruArai Date: Tue, 8 Aug 2023 10:12:37 +0900 Subject: [PATCH 6/6] allow multi-level inheritance for ci fold classes --- test/fold_block.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/test/fold_block.py b/test/fold_block.py index c849290f720fa..c6e11d1d4ffe7 100644 --- a/test/fold_block.py +++ b/test/fold_block.py @@ -1,5 +1,6 @@ import itertools import os +import typing class BaseCiCfg: @@ -48,9 +49,17 @@ def __exit__(self, type, value, traceback): # determine CI system, and set as Fold -for cls_ in BaseCiCfg.__subclasses__(): - if cls_.is_ci(): - Fold = cls_ - break -else: - Fold = BaseCiCfg +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()