diff options
author | Niels De Graef <nielsdegraef@gmail.com> | 2020-12-04 11:17:13 +0100 |
---|---|---|
committer | Niels De Graef <nielsdegraef@gmail.com> | 2020-12-04 11:24:09 +0100 |
commit | 1e45863422010984fe541bfd1f6d5216d960f7af (patch) | |
tree | 33eeed866604902d6614c424033eee3695e8d926 /.gitlab | |
parent | b9ab63f7cb1a61a29e545738d346a7cf41922fb2 (diff) | |
download | gnome-contacts-1e45863422010984fe541bfd1f6d5216d960f7af.tar.gz |
ci: Improve script for style checks a bit
Put the JUnit helper functions in a separate script and make them more
generic.
Diffstat (limited to '.gitlab')
-rwxr-xr-x | .gitlab/ci/junit-report.sh | 70 | ||||
-rwxr-xr-x | .gitlab/ci/style-check.sh | 60 |
2 files changed, 77 insertions, 53 deletions
diff --git a/.gitlab/ci/junit-report.sh b/.gitlab/ci/junit-report.sh new file mode 100755 index 0000000..47792e4 --- /dev/null +++ b/.gitlab/ci/junit-report.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# +# junit-report.sh: JUnit report helpers +# +# Source this file into your CI scripts to get a nice JUnit report file which +# can be shown in the GitLab UI. + +JUNIT_REPORT_TESTS_FILE=$(mktemp) + +# We need this to make sure we don't send funky stuff into the XML report, +# making it invalid XML (and thus unparsable by CI) +function escape_xml() { + echo "$1" | sed -e 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' +} + +# Append a failed test case with the given name and message +function append_failed_test_case() { + test_name="$1" + test_message="$2" + + # Escape both fields before putting them into the xml + test_name_esc="$(escape_xml "$test_name")" + test_message_esc="$(escape_xml "$test_message")" + + echo "<testcase name=\"$test_name_esc\">" >> $JUNIT_REPORT_TESTS_FILE + echo " <failure message=\"$test_message_esc\"/>" >> $JUNIT_REPORT_TESTS_FILE + echo "</testcase>" >> $JUNIT_REPORT_TESTS_FILE + + # Also output to stderr, so it shows up in the job output + echo >&2 "Test '$test_name' failed: $test_message" +} + +# Append a successful test case with the given name +function append_passed_test_case() { + test_name="$1" + test_name_esc="$(escape_xml "$test_name")" + + echo "<testcase name=\"$test_name_esc\"></testcase>" >> $JUNIT_REPORT_TESTS_FILE + + # Also output to stderr, so it shows up in the job output + echo >&2 "Test '$test_name' succeeded" +} + +# Aggregates the test cases into a proper JUnit report XML file +function generate_junit_report() { + junit_report_file="$1" + testsuite_name="$2" + + num_tests=$(fgrep '<testcase' -- "$JUNIT_REPORT_TESTS_FILE" | wc -l) + num_failures=$(fgrep '<failure' -- "$JUNIT_REPORT_TESTS_FILE" | wc -l ) + + echo Generating JUnit report \"$(pwd)/$junit_report_file\" with $num_tests tests and $num_failures failures. + + cat > $junit_report_file << __EOF__ +<?xml version="1.0" encoding="utf-8"?> +<testsuites tests="$num_tests" errors="0" failures="$num_failures"> +<testsuite name="$testsuite_name" tests="$num_tests" errors="0" failures="$num_failures" skipped="0"> +$(< $JUNIT_REPORT_TESTS_FILE) +</testsuite> +</testsuites> +__EOF__ +} + +# Returns a non-zero exit status if any of the tests in the given JUnit report failed +# You probably want to call this at the very end of your script. +function check_junit_report() { + junit_report_file="$1" + + ! fgrep -q '<failure' -- "$junit_report_file" +} diff --git a/.gitlab/ci/style-check.sh b/.gitlab/ci/style-check.sh index f0997ad..7c3d868 100755 --- a/.gitlab/ci/style-check.sh +++ b/.gitlab/ci/style-check.sh @@ -1,53 +1,11 @@ #!/usr/bin/env bash +# +# style-check.sh: Performs some basic style checks -############################################################################### -# JUNIT HELPERS -############################################################################### +# Source the JUnit helpers +scriptdir="$(dirname "$BASH_SOURCE")" +source "$scriptdir/junit-report.sh" -JUNIT_REPORT_TESTS_FILE=$(mktemp) - -# We need this to make sure we don't send funky stuff into the XML report -function escape_xml() { - echo "$1" | sed -e 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' -} - -function append_failed_test_case() { - test_name="$1" - test_message="$2" - - test_message_esc="$(escape_xml "$test_message")" - echo "<testcase name=\"$test_name\"><failure message=\"$test_message_esc\"/></testcase>" >> $JUNIT_REPORT_TESTS_FILE - echo >&2 "Test '$test_name' failed: $test_message" -} - -function append_passed_test_case() { - test_name="$1" - commit="$2" - - echo "<testcase name=\"$test_name\"></testcase>" >> $JUNIT_REPORT_TESTS_FILE -} - -function generate_junit_report() { - junit_report_file="$1" - num_tests=$(cat "$JUNIT_REPORT_TESTS_FILE" | wc -l) - num_failures=$(grep '<failure' "$JUNIT_REPORT_TESTS_FILE" | wc -l ) - - echo Generating JUnit report \"$(pwd)/$junit_report_file\" with $num_tests tests and $num_failures failures. - - cat > $junit_report_file << __EOF__ -<?xml version="1.0" encoding="utf-8"?> -<testsuites tests="$num_tests" errors="0" failures="$num_failures"> -<testsuite name="style-review" tests="$num_tests" errors="0" failures="$num_failures" skipped="0"> -$(< $JUNIT_REPORT_TESTS_FILE) -</testsuite> -</testsuites> -__EOF__ -} - - -############################################################################### -# STYLE CHECKS -############################################################################### TESTNAME="No tabs" tabs_occurrences="$(fgrep -nR $'\t' src data)" @@ -69,9 +27,5 @@ else fi -# Generate the report -# and fail this step if any failure occurred -generate_junit_report style-check-junit-report.xml - -! grep -q '<failure' style-check-junit-report.xml -exit $? +generate_junit_report "$CI_JOB_NAME-junit-report.xml" "$CI_JOB_NAME" +check_junit_report "$CI_JOB_NAME-junit-report.xml" |