#!/bin/bash set -eu set -o pipefail hideok=chronic if ! command -v chronic > /dev/null then hideok= fi if [ "$#" -gt 0 ] && [ "$1" = -v ] then hideok= shift fi $hideok echo Running unit tests ============================================ $hideok python3 -m CoverageTestRunner --ignore-missing-from=without-tests yarns vmdb $hideok echo $hideok echo Checking every plugin looks OK ============================================ for file in vmdb/plugins/*.py do case "$file" in *_plugin.py) ;; *) echo "File $file should end in _plugin.py" 1>&2 ; exit 1 ;; esac if ! grep -q 'class .*Plugin' "$file" then echo "File $file does not seem to have a Plugin class" 1>&2 exit 1 fi done $hideok echo if command -v sp-codegen > /dev/null then $hideok echo Running Subplot ============================================ $hideok sp-codegen vmdb2.md -o test.py --run $hideok echo fi $hideok echo Running yarn tests ======================================== if python3 -c 'import yarnutils' 2>/dev/null then $hideok yarn \ --shell=python3 \ --shell-arg '' \ --shell-library yarns/lib.py \ --env "PYTHONPATH=$(pwd)/yarns" \ --cd-datadir \ yarns/*.yarn "$@" $hideok echo fi $hideok echo Formatting docs ======================================== ./format.sh plugindocs() { ls -1 vmdb/plugins/*.mdwn } steps() { sed -n '/

&2 exit 1 } for doc in $(plugindocs) do n="$(grep -c '^Step:' "$doc")" if [ "$n" != 1 ] then panic "Plugin doc $doc must have exactly 1 step title" fi done n="$(code | wc -l)" if [ "$n" != 0 ] then code panic "Documentation has steps that use code in title" fi if ! diff -u <(steps) <(steps | sort) then panic "Steps are not in sorted order" fi