ci: optionally mark up output in the GitHub workflow

A couple of commands exist to spruce up the output in GitHub workflows: https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions In addition to the `::group::<label>`/`::endgroup::` commands (which we already use to structure the output of the build step better), we also use `::error::`/`::notice::` to draw the attention to test failures and to test cases that were expected to fail but didn't. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed May 21, 2022 at 22:18 UTC 0f5ae593bea7314184608a32122da73ed559f219
3 files changed +56 -3
t/test-lib-functions.sh
+2 -2
@@ -795,7 +795,7 @@ test_verify_prereq () {
795 }
796
797 test_expect_failure () {
798 - test_start_
798 + test_start_ "$@"
799 test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
800 test "$#" = 2 ||
801 BUG "not 2 or 3 parameters to test-expect-failure"
@@ -815,7 +815,7 @@ test_expect_failure () {
815 }
816
817 test_expect_success () {
818 - test_start_
818 + test_start_ "$@"
819 test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
820 test "$#" = 2 ||
821 BUG "not 2 or 3 parameters to test-expect-success"
t/test-lib-github-workflow-markup.sh new
+50
@@ -0,0 +1,50 @@
1 +# Library of functions to mark up test scripts' output suitable for
2 +# pretty-printing it in GitHub workflows.
3 +#
4 +# Copyright (c) 2022 Johannes Schindelin
5 +#
6 +# This program is free software: you can redistribute it and/or modify
7 +# it under the terms of the GNU General Public License as published by
8 +# the Free Software Foundation, either version 2 of the License, or
9 +# (at your option) any later version.
10 +#
11 +# This program is distributed in the hope that it will be useful,
12 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
13 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 +# GNU General Public License for more details.
15 +#
16 +# You should have received a copy of the GNU General Public License
17 +# along with this program. If not, see http://www.gnu.org/licenses/ .
18 +#
19 +# The idea is for `test-lib.sh` to source this file when run in GitHub
20 +# workflows; these functions will then override (empty) functions
21 +# that are are called at the appropriate times during the test runs.
22 +
23 +start_test_output () {
24 + test -n "$GIT_TEST_TEE_OUTPUT_FILE" ||
25 + die "--github-workflow-markup requires --verbose-log"
26 + github_markup_output="${GIT_TEST_TEE_OUTPUT_FILE%.out}.markup"
27 + >$github_markup_output
28 + GIT_TEST_TEE_OFFSET=0
29 +}
30 +
31 +# No need to override start_test_case_output
32 +
33 +finalize_test_case_output () {
34 + test_case_result=$1
35 + shift
36 + case "$test_case_result" in
37 + failure)
38 + echo >>$github_markup_output "::error::failed: $this_test.$test_count $1"
39 + ;;
40 + fixed)
41 + echo >>$github_markup_output "::notice::fixed: $this_test.$test_count $1"
42 + ;;
43 + esac
44 + echo >>$github_markup_output "::group::$test_case_result: $this_test.$test_count $*"
45 + test-tool >>$github_markup_output path-utils skip-n-bytes \
46 + "$GIT_TEST_TEE_OUTPUT_FILE" $GIT_TEST_TEE_OFFSET
47 + echo >>$github_markup_output "::endgroup::"
48 +}
49 +
50 +# No need to override finalize_test_output
t/test-lib.sh
+4 -1
@@ -204,6 +204,9 @@ parse_option () {
204 --write-junit-xml)
205 . "$TEST_DIRECTORY/test-lib-junit.sh"
206 ;;
207 + --github-workflow-markup)
208 + . "$TEST_DIRECTORY/test-lib-github-workflow-markup.sh"
209 + ;;
210 --stress)
211 stress=t ;;
212 --stress=*)
@@ -1082,7 +1085,7 @@ test_start_ () {
1085 test_count=$(($test_count+1))
1086 maybe_setup_verbose
1087 maybe_setup_valgrind
1085 - start_test_case_output
1088 + start_test_case_output "$@"
1089 }
1090
1091 test_finish_ () {