mirror-cockpit-project-cockpit/tools/test-static-code
Martin Pitt 4aa565f59d test: Add FMF test metadata and scripts
Copy and adjust the browser.sh and run-test.sh scripts from
Fedora's downstream dist-git gating tests [1], and translate the STI
yaml to an FMF metadata file test/verify.fmf. This replaces the previous
test/main.fmf, which was not functional and just a stub.

With this we can share the same test scripts upstream (for testing in
Packit) and downstream.

[1] 71ee0da592/f/tests
2021-03-12 20:21:29 +01:00

133 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
# run static code checks like pyflakes and pep8
set -eu
echo "1..7"
builddir=$(pwd)
cd "${srcdir:-.}"
fail=0
#
# pyflakes
#
PYFLAKES="python3 -m pyflakes"
if ! $PYFLAKES /dev/null >/dev/null 2>&1; then
echo "ok 1 pyflakes pkg tools # SKIP pyflakes3 not installed"
elif $PYFLAKES tools/build-debian-copyright tools/npm-release-time >&2; then
echo "ok 1 pyflakes pkg tools"
else
echo "not ok 1 pyflakes pkg tools"
fail=1
fi
# TODO: there are currently a lot of pyflakes errors like
# 'parent' imported but unused
# 'from testlib import *' used; unable to detect undefined names
# Filter these out until these get fixed properly.
if ! $PYFLAKES /dev/null >/dev/null 2>&1; then
echo "ok 2 pyflakes test # SKIP pyflakes3 not installed"
else
out=$($PYFLAKES test/ 2>&1 | grep -Ev "(unable to detect undefined names|defined from star imports|'parent' imported but unused)") || true
if [ -n "$out" ]; then
echo "$out" >&2
echo "not ok 2 pyflakes test"
fail=1
else
echo "ok 2 pyflakes test"
fi
fi
#
# wrongly marked translatable strings
#
if out=$(find src/ pkg/ -name '*.js' -o -name '*.jsx' | xargs grep -n -E "(gettext|_)\(['\`]"); then
echo 'ERROR: translatable strings must be marked with _("")' >&2
echo "$out" >&2
echo "not ok 3 js-translatable-strings"
fail=1
elif out=$(grep -r 'translatable=["'\'']yes' pkg/ doc/); then
echo "ERROR: 'translatable' HTML attribute is invalid, use 'translate' instead"
echo "$out" >&2
echo "not ok 3 js-translatable-strings"
fail=1
else
echo "ok 3 js-translatable-strings"
fi
#
# Unsafe content-security-policy
#
# It's dangerous to have 'unsafe-inline' or 'unsafe-eval' in our
# content-security-policy entries. This is the browser equivalent
# of setenforce 0
shopt -s nullglob
safe=yes
for d in pkg/*; do
if ! test -f "$d"/content-security-policy.override; then
if grep -HE 'content-security-policy.*(\*|unsafe)' "$d"/*.json* /dev/null; then
safe="no"
fi
fi
done
if [ $safe == "no" ]; then
echo "not ok 4 unsafe-security-policy"
fail=1
else
echo "ok 4 unsafe-security-policy"
fi
#
# Bad paths or modifications in patternfly for fonts
#
if grep "\.\./fonts/OpenSans\|fonts/.*eot\|truetype" `ls dist/*/*.css $builddir/dist/*/*.css` >&2; then
echo "ERROR: invalid patternfly fonts paths found" >&2
echo "not ok 5 patternfly-font-paths"
fail=1
else
echo "ok 5 patternfly-font-paths"
fi
# Valid JSON files
if [ -e .git ]; then
for f in $(git ls-tree --name-only -r --full-name HEAD | grep '\.json$'); do
if ! python3 -m json.tool $f /dev/null; then
echo "ERROR: $f is invalid JSON" >&2
echo "not ok 6 json-verify"
fail=1
fi
done
echo "ok 6 json-verify"
else
echo "ok 6 json-verify # SKIP not a git tree"
fi
# pycodestyle/pep8 python syntax check
if python3 -m pycodestyle /dev/null >/dev/null 2>&1; then
PYTHON_STYLE_CHECKER="pycodestyle"
elif python3 -m pep8 /dev/null >/dev/null 2>&1; then
PYTHON_STYLE_CHECKER="pep8"
fi
if [ -z "${PYTHON_STYLE_CHECKER-}" ]; then
echo "ok 7 pycodestyle test # SKIP pycodestyle not installed"
else
# FIXME: Fix code for the warnings and re-enable them
out=$(python3 -m "$PYTHON_STYLE_CHECKER" --ignore E501,E265,E261,W504,W605 test/* --exclude=test/verify/nested-kvm,test/README.md,test/run,test/verify.fmf,test/run-verify-host.sh,test/run-verify-host-user.sh) || true
if [ -n "$out" ]; then
echo "$out" >&2
echo "not ok 7 $PYTHON_STYLE_CHECKER test"
fail=1
else
echo "ok 7 $PYTHON_STYLE_CHECKER test"
fi
fi
exit $fail