From 40821a247823b35d7ff10ba490d0d930fe8f5afa Mon Sep 17 00:00:00 2001 From: Yih-Dar <2521628+ydshieh@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:36:13 +0100 Subject: [PATCH] Fix CI slack reporting issue (#34833) * fix * fix * fix * fix * fix --------- Co-authored-by: ydshieh --- src/transformers/testing_utils.py | 20 ++++++++++++++++++++ utils/notification_service.py | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/transformers/testing_utils.py b/src/transformers/testing_utils.py index 8d6c1b19377..49c2aefa092 100644 --- a/src/transformers/testing_utils.py +++ b/src/transformers/testing_utils.py @@ -2385,6 +2385,10 @@ def run_test_using_subprocess(func): env = copy.deepcopy(os.environ) env["_INSIDE_SUB_PROCESS"] = "1" + # This prevents the entries in `short test summary info` given by the subprocess being truncated. so the + # full information can be passed to the parent pytest process. + # See: https://docs.pytest.org/en/stable/explanation/ci.html + env["CI"] = "true" # If not subclass of `unitTest.TestCase` and `pytestconfig` is used: try to grab and use the arguments if "pytestconfig" in kwargs: @@ -2402,6 +2406,22 @@ def run_test_using_subprocess(func): subprocess.run(command, env=env, check=True, capture_output=True) except subprocess.CalledProcessError as e: exception_message = e.stdout.decode() + lines = exception_message.split("\n") + # Add a first line with more informative information instead of just `= test session starts =`. + # This makes the `short test summary info` section more useful. + if "= test session starts =" in lines[0]: + text = "" + for line in lines[1:]: + if line.startswith("FAILED "): + text = line[len("FAILED ") :] + text = "".join(text.split(" - ")[1:]) + elif line.startswith("=") and line.endswith("=") and " failed in " in line: + break + elif len(text) > 0: + text += f"\n{line}" + text = "(subprocess) " + text + lines = [text] + lines + exception_message = "\n".join(lines) raise pytest.fail(exception_message, pytrace=False) return wrapper diff --git a/utils/notification_service.py b/utils/notification_service.py index 039ee8b29a3..6c9eab3a853 100644 --- a/utils/notification_service.py +++ b/utils/notification_service.py @@ -1076,6 +1076,11 @@ if __name__ == "__main__": for line in artifact["summary_short"].split("\n"): if line.startswith("FAILED "): + # Avoid the extra `FAILED` entry given by `run_test_using_subprocess` causing issue when calling + # `stacktraces.pop` below. + # See `run_test_using_subprocess` in `src/transformers/testing_utils.py` + if " - Failed: (subprocess)" in line: + continue line = line[len("FAILED ") :] line = line.split()[0].replace("\n", "") @@ -1186,6 +1191,11 @@ if __name__ == "__main__": if failed: for line in artifact["summary_short"].split("\n"): if line.startswith("FAILED "): + # Avoid the extra `FAILED` entry given by `run_test_using_subprocess` causing issue when calling + # `stacktraces.pop` below. + # See `run_test_using_subprocess` in `src/transformers/testing_utils.py` + if " - Failed: (subprocess)" in line: + continue line = line[len("FAILED ") :] line = line.split()[0].replace("\n", "")