#!/usr/bin/env sh # # # SPDX-License-Identifier: GPL-2.0-only #set -x # uncomment for debug JUNIT=0 INVERT=0 usage () { printf "Usage: %s [Options]\n" "$0" printf " Sub-commands:\n" printf " lint-stable : Run standard lint tests - should pass\n" printf " lint-extended : Run extended lint tests - should pass\n" printf " lint : Run full lint tests - Not expected to pass\n\n" printf " Options:\n" printf " -h | --help : Show this help message\n" printf " -I | --invert : Invert results - used for testing linters\n" printf " -J | --junit : Send test output to a JUnit file\n" printf "\n" } #write to the junit xml file if --junit was specified junit_write () { if [ "$JUNIT" -eq 1 ]; then echo "$1" >> "$XMLFILE" fi } if ! cmd_args="$(getopt -l help,junit,invert -o hIJ -- "$@")"; then usage exit 0 fi eval set -- "${cmd_args}" while true; do case "$1" in -h | --help) usage exit 0 ;; -I | --invert) INVERT=1 ;; -J | --junit) echo "selected junit" JUNIT=1 ;; --) shift; break ;; *) break ;; esac shift done #verify the first command line parameter if [ -z "$1" ]; then echo "Error: A sub-command is needed." usage exit 1 elif [ "$1" != "lint" ] && [ "$1" != "lint-stable" ] && [ "$1" != "lint-extended" ]; then echo "Error: $1 is not a valid sub-command." usage exit 1 fi LINTLOG=$(mktemp .tmpconfig.lintXXXXXX); XMLFILE="$(dirname "$0")/junit.xml" if [ "$1" = "lint-extended" ]; then XMLFILE="$(dirname "$0")/extended-junit.xml" fi FAILED=0; if [ "${JUNIT}" -eq 1 ]; then echo '' > "$XMLFILE" junit_write '' fi #run all scripts of the requested type for script in "$(dirname "$0")/${1}-"*; do printf "%s " "$(grep '^# DESCR:' "$script" | sed 's,.*DESCR: *,,')" printf "(%s): " "$(basename "$script")" junit_write " " $script | tee "$LINTLOG" #if the lint script gives any output, that's a failure if [ "${INVERT}" -eq 1 ] && [ "$(wc -l < "$LINTLOG")" -ne 0 ]; then echo "success" junit_write " " elif [ "${INVERT}" -eq 0 ] && [ "$(wc -l < "$LINTLOG")" -eq 0 ]; then echo "success" junit_write " " else echo "test failed" junit_write " " rm -f "$LINTLOG" FAILED=$(( FAILED + 1 )) fi junit_write ' ' done rm -f "$LINTLOG" junit_write '' test $FAILED -eq 0 || { echo "ERROR: $FAILED test(s) failed."; exit 1; };