From d0392b34ca15fb56061a4edc594ae2dd67b0cff9 Mon Sep 17 00:00:00 2001 From: Trevor Royer Date: Wed, 1 Dec 2021 01:52:59 -0600 Subject: [PATCH] github format: Update output to utilize groups Resolves #421 Update the github formatting to utilize groups in the output and provide the line/column number for the error in the output log. --- tests/test_cli.py | 16 ++++++++++------ yamllint/cli.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 79c4320..95e3fc7 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -553,11 +553,13 @@ class CommandLineTestCase(unittest.TestCase): with RunContext(self) as ctx: cli.run((path, '--format', 'github')) expected_out = ( - '::error file=%s,line=2,col=4::[trailing-spaces] trailing' + '::group::%s\n' + '::error file=%s,line=2,col=4::2:4 [trailing-spaces] trailing' ' spaces\n' - '::error file=%s,line=3,col=4::[new-line-at-end-of-file] no' + '::error file=%s,line=3,col=4::3:4 [new-line-at-end-of-file] no' ' new line character at the end of file\n' - % (path, path)) + '::endgroup::\n\n' + % (path, path, path)) self.assertEqual( (ctx.returncode, ctx.stdout, ctx.stderr), (1, expected_out, '')) @@ -571,11 +573,13 @@ class CommandLineTestCase(unittest.TestCase): os.environ['GITHUB_WORKFLOW'] = 'something' cli.run((path, )) expected_out = ( - '::error file=%s,line=2,col=4::[trailing-spaces] trailing' + '::group::%s\n' + '::error file=%s,line=2,col=4::2:4 [trailing-spaces] trailing' ' spaces\n' - '::error file=%s,line=3,col=4::[new-line-at-end-of-file] no' + '::error file=%s,line=3,col=4::3:4 [new-line-at-end-of-file] no' ' new line character at the end of file\n' - % (path, path)) + '::endgroup::\n\n' + % (path, path, path)) self.assertEqual( (ctx.returncode, ctx.stdout, ctx.stderr), (1, expected_out, '')) diff --git a/yamllint/cli.py b/yamllint/cli.py index 3fbb8b8..4d94342 100644 --- a/yamllint/cli.py +++ b/yamllint/cli.py @@ -93,6 +93,10 @@ class Format(object): line += 'line=' + format(problem.line) + ',' line += 'col=' + format(problem.column) line += '::' + line += format(problem.line) + line += ':' + line += format(problem.column) + line += ' ' if problem.rule: line += '[' + problem.rule + '] ' line += problem.desc @@ -117,6 +121,9 @@ def show_problems(problems, file, args_format, no_warn): if args_format == 'parsable': print(Format.parsable(problem, file)) elif args_format == 'github': + if first: + print('::group::%s' % file) + first = False print(Format.github(problem, file)) elif args_format == 'colored': if first: @@ -129,6 +136,9 @@ def show_problems(problems, file, args_format, no_warn): first = False print(Format.standard(problem, file)) + if not first and args_format == 'github': + print('::endgroup::') + if not first and args_format != 'parsable': print('')