From c3b4e85b26ae14baa6c10e213d00fb00acc210e5 Mon Sep 17 00:00:00 2001 From: Lars Bilke <lars.bilke@ufz.de> Date: Tue, 11 May 2021 09:38:22 +0200 Subject: [PATCH] Use xsltproc to transform ctest error output. --- .gitlab-ci.yml | 2 ++ scripts/ci/extends/template-build-linux.yml | 12 ++++++- scripts/test/ctest-error-output.xsl | 38 +++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 scripts/test/ctest-error-output.xsl diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 524407119bc..855abedabb0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,8 @@ variables: BUILD_PROCESSES: "" # Empty string: builds all processes BUILD_TESTS: "true" BUILD_CTEST: "true" + # Test config + NUM_CTEST_ERROR_LINES: 1000 # tail this much lines from failed output workflow: rules: diff --git a/scripts/ci/extends/template-build-linux.yml b/scripts/ci/extends/template-build-linux.yml index e2ed2485e1f..40ee21c36b7 100644 --- a/scripts/ci/extends/template-build-linux.yml +++ b/scripts/ci/extends/template-build-linux.yml @@ -22,7 +22,17 @@ if [[ -z "$TARGETS" ]]; then $BUILD_CMD_PREFIX cmake --build . --target package > >(tee make.output) if [ "$BUILD_TESTS" = true ] ; then $BUILD_CMD_PREFIX cmake --build . --target tests ; fi - if [ "$BUILD_CTEST" = true ] ; then $BUILD_CMD_PREFIX cmake --build . --target ctest ; fi + + if [ "$BUILD_CTEST" = true ]; then + ctest_exit=0 + ctest -T Test --no-compress-output --exclude-regex LARGE --timeout 900 || ctest_exit=$? + if [ $ctest_exit -ne 0 ]; then + echo "ctests failed (showing the last ${NUM_CTEST_ERROR_LINES} lines):" + xsltproc ${CI_PROJECT_DIR}/scripts/test/ctest-error-output.xsl Testing/*/Test.xml | tail -n ${NUM_CTEST_ERROR_LINES} + exit $ctest_exit + fi + fi + if [ "$BUILD_CTEST_LARGE" = true ] ; then $BUILD_CMD_PREFIX cmake --build . --target ctest-large ; fi if [ "$BUILD_CTEST" = true ] ; then cp Testing/**/Test.xml Tests/ctest.xml ; fi if [ "$BUILD_CTEST_LARGE" = true ] ; then cp Testing/**/Test.xml Tests/ctest-large.xml ; fi diff --git a/scripts/test/ctest-error-output.xsl b/scripts/test/ctest-error-output.xsl new file mode 100644 index 00000000000..c7161d37427 --- /dev/null +++ b/scripts/test/ctest-error-output.xsl @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- Was created with: + xmlstarlet sel -C -t \ + -m "//*/Testing/Test[@Status='failed']" \ + -o '[ctest] ' -v './/Name' -o ':' -n -n \ + -v './/Results/Measurement/Value/text()' -n \ + -o '[ctest end]' -n -n \ + Testing/20210510-0943/Test.xml > ctest-error-output.xsl +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version="1.0" extension-element-prefixes="exslt"> + <xsl:output omit-xml-declaration="yes" indent="no"/> + <xsl:template match="/"> + <xsl:for-each select="//*/Testing/Test[@Status='failed']"> + <xsl:text>[ctest] </xsl:text> + <xsl:call-template name="value-of-template"> + <xsl:with-param name="select" select=".//Name"/> + </xsl:call-template> + <xsl:text>:</xsl:text> + <xsl:value-of select="' '"/> + <xsl:value-of select="' '"/> + <xsl:call-template name="value-of-template"> + <xsl:with-param name="select" select=".//Results/Measurement/Value/text()"/> + </xsl:call-template> + <xsl:value-of select="' '"/> + <xsl:text>[ctest end]</xsl:text> + <xsl:value-of select="' '"/> + <xsl:value-of select="' '"/> + </xsl:for-each> + </xsl:template> + <xsl:template name="value-of-template"> + <xsl:param name="select"/> + <xsl:value-of select="$select"/> + <xsl:for-each select="exslt:node-set($select)[position()>1]"> + <xsl:value-of select="' '"/> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:template> +</xsl:stylesheet> -- GitLab