add better validation checks (part 1)
This patch adds a script for validating YAML files, and replaces the existing JSON checks with one largely identical to the YAML check. This also provides a script that can be installed as a pre-commit hook that will perform this checks when you commit changes. You can install the hook by running tools/pre-commit-hook --install. Change-Id: Ib4742a9db062362cfa61d669c691151bc1ca376c
This commit is contained in:
parent
20e88776bc
commit
bfbf1b8c9b
45
tools/pre-commit-hook
Executable file
45
tools/pre-commit-hook
Executable file
@ -0,0 +1,45 @@
|
||||
#!/bin/sh
|
||||
|
||||
TOPLEVEL=$(git rev-parse --show-toplevel)
|
||||
RES=0
|
||||
|
||||
cd $TOPLEVEL
|
||||
|
||||
if [ "$1" == "--install" ]; then
|
||||
ln -sf ../../tools/pre-commit-hook .git/hooks/pre-commit
|
||||
exit
|
||||
fi
|
||||
|
||||
tmpdir=$(mktemp -d precommit.XXXXXX) || exit 1
|
||||
trap "rm -rf $TOPLEVEL/$tmpdir" 0
|
||||
|
||||
git diff --cached --name-only --diff-filter=ACMR |
|
||||
xargs git checkout-index --prefix=$tmpdir/ --
|
||||
|
||||
cd $tmpdir
|
||||
|
||||
echo "=== starting pre-commit checks ==="
|
||||
|
||||
echo "Checking the following files:"
|
||||
|
||||
find . -type f
|
||||
|
||||
echo "=== bashate checks ==="
|
||||
|
||||
find . -type f -print0 |
|
||||
xargs -0 --no-run-if-empty egrep -lZ '^#!/bin/(ba)?sh' |
|
||||
xargs -0 bashate || RES=1
|
||||
|
||||
echo "=== yaml checks ==="
|
||||
|
||||
find . -name '*.yaml' -print0 |
|
||||
xargs -0 --no-run-if-empty python ${TOPLEVEL}/tools/try-parse-yaml.py
|
||||
|
||||
echo "=== json checks ==="
|
||||
|
||||
find . -name '*.json' -print0 |
|
||||
xargs -0 -n1 --no-run-if-empty python -mjson.tool \
|
||||
|| RES=1
|
||||
|
||||
exit $RES
|
||||
|
9
tools/validate-all-json.sh
Executable file
9
tools/validate-all-json.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
TOPLEVEL=$(git rev-parse --show-toplevel)
|
||||
|
||||
cd $TOPLEVEL
|
||||
|
||||
git ls-files -z '*.json' |
|
||||
xargs -0 python tools/validate-json.py || exit 1
|
||||
|
9
tools/validate-all-yaml.sh
Executable file
9
tools/validate-all-yaml.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
TOPLEVEL=$(git rev-parse --show-toplevel)
|
||||
|
||||
cd $TOPLEVEL
|
||||
|
||||
git ls-files -z '*.yaml' |
|
||||
xargs -0 python tools/validate-yaml.py || exit 1
|
||||
|
33
tools/validate-json.py
Executable file
33
tools/validate-json.py
Executable file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
import logging
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument('input', nargs='*')
|
||||
return p.parse_args()
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
logging.basicConfig()
|
||||
res = 0
|
||||
|
||||
for filename in args.input:
|
||||
with open(filename) as fd:
|
||||
try:
|
||||
data = json.load(fd)
|
||||
except ValueError as error:
|
||||
res = 1
|
||||
logging.error('%s failed validation: %s',
|
||||
filename, error)
|
||||
|
||||
sys.exit(res)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
|
@ -1,34 +1,3 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
ret=0
|
||||
#!/bin/sh
|
||||
|
||||
# For MacOSX users the freebsd's mktemp by default behave diferently,
|
||||
# installing the coreutils from brew would give you this but that would be
|
||||
# renamed to gmktemp to don't conflict with the stand mktemp, so let just use
|
||||
# that if available.
|
||||
if type -p gmktemp &>/dev/null; then
|
||||
TMPFILE=$(gmktemp)
|
||||
else
|
||||
TMPFILE=$(mktemp)
|
||||
fi
|
||||
|
||||
function clean {
|
||||
rm -f ${TMPFILE}
|
||||
}
|
||||
trap clean EXIT
|
||||
|
||||
linter=jsonlint
|
||||
type -p jsonlint &>/dev/null || linter=python
|
||||
|
||||
for f in $(find docker -type f -name '*.json');do
|
||||
if [[ ${linter} == jsonlint ]];then
|
||||
jsonlint -s ${f} >${TMPFILE}
|
||||
egrep -q 'has errors$' ${TMPFILE} && { cat ${TMPFILE}; ret=1 ;}
|
||||
else
|
||||
python -m json.tool ${f} &>/dev/null || { echo "$f: has json errors"; ret=1; }
|
||||
fi
|
||||
done
|
||||
|
||||
cat ${TMPFILE}
|
||||
|
||||
exit ${ret}
|
||||
true
|
||||
|
33
tools/validate-yaml.py
Executable file
33
tools/validate-yaml.py
Executable file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import yaml
|
||||
import logging
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument('input', nargs='*')
|
||||
return p.parse_args()
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
logging.basicConfig()
|
||||
res = 0
|
||||
|
||||
for filename in args.input:
|
||||
with open(filename) as fd:
|
||||
try:
|
||||
data = yaml.load(fd)
|
||||
except yaml.error.YAMLError as error:
|
||||
res = 1
|
||||
logging.error('%s failed validation: %s',
|
||||
filename, error)
|
||||
|
||||
sys.exit(res)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user