]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ci/run-build-and-tests: add some structure to the GitHub workflow output
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sat, 21 May 2022 22:18:50 +0000 (22:18 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sat, 21 May 2022 23:25:56 +0000 (16:25 -0700)
The current output of Git's GitHub workflow can be quite confusing,
especially for contributors new to the project.

To make it more helpful, let's introduce some collapsible grouping.
Initially, readers will see the high-level view of what actually
happened (did the build fail, or the test suite?). To drill down, the
respective group can be expanded.

Note: sadly, workflow output currently cannot contain any nested groups
(see https://github.com/actions/runner/issues/802 for details),
therefore we take pains to ensure to end any previous group before
starting a new one.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
ci/lib.sh
ci/run-build-and-tests.sh
ci/run-test-slice.sh

index 65f5188a55034721b75b1c019ba329115863e64f..f8cb79e44f09ec2dd20bb8b58e1561ada6aa662f 100755 (executable)
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -1,5 +1,50 @@
 # Library of functions shared by all CI scripts
 
+if test true != "$GITHUB_ACTIONS"
+then
+       begin_group () { :; }
+       end_group () { :; }
+
+       group () {
+               shift
+               "$@"
+       }
+       set -x
+else
+       begin_group () {
+               need_to_end_group=t
+               echo "::group::$1" >&2
+               set -x
+       }
+
+       end_group () {
+               test -n "$need_to_end_group" || return 0
+               set +x
+               need_to_end_group=
+               echo '::endgroup::' >&2
+       }
+       trap end_group EXIT
+
+       group () {
+               set +x
+               begin_group "$1"
+               shift
+               "$@"
+               res=$?
+               end_group
+               return $res
+       }
+
+       begin_group "CI setup"
+fi
+
+# Set 'exit on error' for all CI scripts to let the caller know that
+# something went wrong.
+#
+# We already enabled tracing executed commands earlier. This helps by showing
+# how # environment variables are set and and dependencies are installed.
+set -e
+
 skip_branch_tip_with_tag () {
        # Sometimes, a branch is pushed at the same time the tag that points
        # at the same commit as the tip of the branch is pushed, and building
@@ -88,12 +133,6 @@ export TERM=${TERM:-dumb}
 # Clear MAKEFLAGS that may come from the outside world.
 export MAKEFLAGS=
 
-# Set 'exit on error' for all CI scripts to let the caller know that
-# something went wrong.
-# Set tracing executed commands, primarily setting environment variables
-# and installing dependencies.
-set -ex
-
 if test -n "$SYSTEM_COLLECTIONURI" || test -n "$SYSTEM_TASKDEFINITIONSURI"
 then
        CI_TYPE=azure-pipelines
@@ -138,7 +177,7 @@ then
                        test_name="${test_exit%.exit}"
                        test_name="${test_name##*/}"
                        printf "\\e[33m\\e[1m=== Failed test: ${test_name} ===\\e[m\\n"
-                       cat "t/test-results/$test_name.out"
+                       group "Failed test: $test_name" cat "t/test-results/$test_name.out"
 
                        trash_dir="t/trash directory.$test_name"
                        cp "t/test-results/$test_name.out" t/failed-test-artifacts/
@@ -233,3 +272,6 @@ linux-leaks)
 esac
 
 MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
+
+end_group
+set -x
index 1ede75e5556a797936e669371207ffc5b40f3485..7abfa00adc06b8c00a225adaeae9e1e1162e5ff5 100755 (executable)
@@ -45,10 +45,10 @@ pedantic)
        ;;
 esac
 
-make
+group Build make
 if test -n "$run_tests"
 then
-       make test ||
+       group "Run tests" make test ||
        handle_failed_tests
 fi
 check_unignored_build_artifacts
index 63358c23e118e9381aeeb188f101f04c8489da84..a3c67956a8df8f803bc81eee1b86a8f5559db57b 100755 (executable)
@@ -10,7 +10,7 @@ windows*) cmd //c mklink //j t\\.prove "$(cygpath -aw "$cache_dir/.prove")";;
 *) ln -s "$cache_dir/.prove" t/.prove;;
 esac
 
-make --quiet -C t T="$(cd t &&
+group "Run tests" make --quiet -C t T="$(cd t &&
        ./helper/test-tool path-utils slice-tests "$1" "$2" t[0-9]*.sh |
        tr '\n' ' ')" ||
 handle_failed_tests