Add simple {shell,yaml}-check script

* shellcheck utility allow to determinate common mistakes of bash scripting[1]

* yamllint utility allow to determinate common mistakes of yaml files[3]

* Add List system dependencies for running common tests

Add an other-requirements.txt file containing a cross-platform list of
dependencies needed for running included tox-based tests.
Also include a tox environment for convenience calling the bindep[2]
utility to list any missing system requirements.

For other-requirements.txt see also:
http://docs.openstack.org/infra/manual/drivers.html#package-requirements
[1] http://hackage.haskell.org/package/ShellCheck
[2] http://docs.openstack.org/infra/bindep/
[3] https://pypi.python.org/pypi/yamllint/

Change-Id: Ia2498bdb0f7c310ec3d2c2f11f5d3fc08c8b352c
This commit is contained in:
alexz 2016-07-26 19:04:55 +03:00
parent 95f75bcbce
commit aae8d31568
4 changed files with 149 additions and 0 deletions

2
other-requirements.txt Normal file
View File

@ -0,0 +1,2 @@
shellcheck [platform:ubuntu]
zip [platform:ubuntu]

55
tools/jenkins/shellcheck.sh Executable file
View File

@ -0,0 +1,55 @@
#!/bin/bash
WORKSPACE="${WORKSPACE:-${1}}"
function help_m() {
cat <<-EOF
***********************************************************************
Shellcheck script help message:
Please use env variable:
- Set directory for scan:
export WORKSPACE='/dir/with/sh/files/to/scan'
- or directly:
./shellcheck.sh "/dir/with/sh/files/to/scan"
***********************************************************************
EOF
}
function run_check() {
local e_count=0
cat <<-EOF
***********************************************************************
*
* Starting shellcheck against dir:"${WORKSPACE}"
*
***********************************************************************
EOF
while read -d '' -r script; do
unset RESULT
shellcheck "${script}"
RESULT=$?
if [ ${RESULT} != 0 ]; then
((e_count++))
fi
done < <(find "${WORKSPACE}" -name '*.sh' -print0)
cat <<-EOF
***********************************************************************
*
* shellcheck finished with ${e_count} errors.
*
***********************************************************************
EOF
if [ "${e_count}" -gt 0 ] ; then
exit 1
fi
}
### Body:
if [[ -z "${WORKSPACE}" ]]; then
echo "ERROR: \${WORKSPACE} variable is not set!"
help_m
exit 1
fi
run_check

55
tools/jenkins/yamllint.sh Executable file
View File

@ -0,0 +1,55 @@
#!/bin/bash
WORKSPACE="${WORKSPACE:-${1}}"
function help_m() {
cat <<-EOF
***********************************************************************
Yamllint script help message:
Please use env variable:
- Set directory for scan:
export WORKSPACE='/dir/with/sh/files/to/scan'
- or directly:
./yamllint.sh "/dir/with/sh/files/to/scan"
***********************************************************************
EOF
}
function run_check() {
local e_count=0
cat <<-EOF
***********************************************************************
*
* Starting yamllint against dir:"${WORKSPACE}"
*
***********************************************************************
EOF
while read -d '' -r y_file; do
unset RESULT
yamllint -d relaxed "${y_file}"
RESULT=$?
if [ ${RESULT} != 0 ]; then
((e_count++))
fi
done < <(find "${WORKSPACE}" -name '*.yaml' -print0)
cat <<-EOF
***********************************************************************
*
* yamllint finished with ${e_count} errors.
*
***********************************************************************
EOF
if [ "${e_count}" -gt 0 ] ; then
exit 1
fi
}
### Body:
if [[ -z "${WORKSPACE}" ]]; then
echo "ERROR: \${WORKSPACE} variable is not set!"
help_m
exit 1
fi
run_check

37
tox.ini
View File

@ -35,3 +35,40 @@ commands = python -m unittest tests.test_cicd_apps.MuranoCiCdTest.test_deploy_ci
[testenv:units]
# FIXME!
commands = python -m unittest unittests.test_namespaces.TestNamespaces.test_namespaces
[testenv:bindep]
# Do not install any requirements. We want this to be fast and work even if
# system dependencies are missing, since it's used to tell you what system
# dependencies are missing! This also means that bindep must be installed
# separately, outside of the requirements files.
deps = bindep
commands = bindep test
[testenv:shellcheck]
# 'shellcheck' is not an Python package, so it can be run w\o
# virtual env. But tox is a usable wrapper to run any kind of tests -
# let's use it for common test-run as well - for unification purposes.
whitelist_externals = shellcheck
commands = {toxinidir}/tools/jenkins/shellcheck.sh {toxinidir}
[testenv:yaml-syntaxcheck]
deps = yamllint
commands = {toxinidir}/tools/jenkins/yamllint.sh {toxinidir}
[testenv:linters]
# linters env - it's a combination of check's (usually syntax)
# for aggregate non-destructive run's. Used only in openstack-infra ci for
# decrease resource usage.
# Current duplicate list:
# shellcheck
# yaml-syntaxcheck
#
# We need to suppress exit code from 'command1', to be able run 'command2';
# Otherwise, if some command failed - exit code from tox itself will be 1
ignore_errors=True
deps = yamllint
whitelist_externals = shellcheck
commands =
{toxinidir}/tools/jenkins/shellcheck.sh {toxinidir}
{toxinidir}/tools/jenkins/yamllint.sh {toxinidir}