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_ () {