From de1153b361cac47f7bf9f92a0c6a9933d67ed647 Mon Sep 17 00:00:00 2001 From: Masayuki Igawa Date: Tue, 30 Jul 2019 18:02:07 +0900 Subject: [PATCH] Introduce bashate This commit introduces bashate[0] which is a code style checker for bash scripts. We already have some bash scripts in Tempest repo. So, it might be good to check the style automatically. Some scripts under the tools directory are also fixed due to the bashate violation. Change-Id: I07820f10387552f93a9d8891b58a8c7fcdb83046 --- .zuul.yaml | 1 + tools/format.sh | 3 ++- tools/generate-tempest-plugins-list.sh | 2 +- tools/tempest-plugin-sanity.sh | 10 +++++----- tox.ini | 16 +++++++++++++++- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.zuul.yaml b/.zuul.yaml index cdc63a7c3c..fad4ed0698 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -778,6 +778,7 @@ - tempest-full-test-account-no-admin-py3: voting: false irrelevant-files: *tempest-irrelevant-files + - openstack-tox-bashate gate: jobs: - tempest-slow-py3: diff --git a/tools/format.sh b/tools/format.sh index dec8f1cdbe..ef5cc92e4c 100755 --- a/tools/format.sh +++ b/tools/format.sh @@ -15,7 +15,8 @@ fi # isort is not compatible with the default flake8 (H306), maybe flake8-isort # isort -rc -sl -fss ../tempest ../setup.py -$AUTOPEP8 --exit-code --max-line-length=79 --experimental --in-place -r ../tempest ../setup.py +$AUTOPEP8 --exit-code --max-line-length=79 --experimental --in-place \ + -r ../tempest ../setup.py ERROR=$? if [[ $ERROR -eq 0 ]]; then diff --git a/tools/generate-tempest-plugins-list.sh b/tools/generate-tempest-plugins-list.sh index 6e473b7b79..b6a7c77f3f 100755 --- a/tools/generate-tempest-plugins-list.sh +++ b/tools/generate-tempest-plugins-list.sh @@ -61,7 +61,7 @@ function title_underline { printf " ===\n" } -function print_plugin_table() { +function print_plugin_table { title_underline ${name_col_len} printf "%-3s %-${name_col_len}s %s\n" "SR" "Plugin Name" "URL" title_underline ${name_col_len} diff --git a/tools/tempest-plugin-sanity.sh b/tools/tempest-plugin-sanity.sh index b6523692d2..a087a4ce75 100644 --- a/tools/tempest-plugin-sanity.sh +++ b/tools/tempest-plugin-sanity.sh @@ -47,7 +47,7 @@ PROJECT_LIST="$(python tools/generate-tempest-plugins-list.py)" BLACKLIST="$(python tools/generate-tempest-plugins-list.py blacklist)" # Function to clone project using zuul-cloner or from git -function clone_project() { +function clone_project { if [ -e /usr/zuul-env/bin/zuul-cloner ]; then /usr/zuul-env/bin/zuul-cloner --cache-dir /opt/git \ https://opendev.org \ @@ -61,7 +61,7 @@ function clone_project() { } # function to create virtualenv to perform sanity operation -function prepare_workspace() { +function prepare_workspace { SANITY_DIR=$(pwd) virtualenv -p python3 --clear "$SANITY_DIR"/.venv export TVENV="$SANITY_DIR/tools/with_venv.sh" @@ -72,7 +72,7 @@ function prepare_workspace() { } # Function to install project -function install_project() { +function install_project { "$TVENV" pip install "$SANITY_DIR"/"$1" # Check for test-requirements.txt file in a project then install it. if [ -e "$SANITY_DIR"/"$1"/test-requirements.txt ]; then @@ -81,7 +81,7 @@ function install_project() { } # Function to perform sanity checking on Tempest plugin -function tempest_sanity() { +function tempest_sanity { "$TVENV" tempest init "$SANITY_DIR"/tempest_sanity && \ cd "$SANITY_DIR"/tempest_sanity && \ "$TVENV" tempest list-plugins && \ @@ -100,7 +100,7 @@ function tempest_sanity() { } # Function to run sanity check on each project -function plugin_sanity_check() { +function plugin_sanity_check { prepare_workspace && \ clone_project "$1" && \ install_project "$1" && \ diff --git a/tox.ini b/tox.ini index 8a7a5090dd..21182d8089 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = pep8,py36,py37,py27,pip-check-reqs +envlist = pep8,py36,py37,py27,bashate,pip-check-reqs minversion = 2.3.1 skipsdist = True @@ -303,6 +303,20 @@ commands = -b html releasenotes/source releasenotes/build/html whitelist_externals = rm +[testenv:bashate] +basepython = python3 +# if you want to test out some changes you have made to bashate +# against tempest, just set BASHATE_INSTALL_PATH=/path/... to your +# modified bashate tree +deps = + {env:BASHATE_INSTALL_PATH:bashate} +whitelist_externals = bash +commands = bash -c "find {toxinidir}/tools \ + -not \( -type d -name .?\* -prune \) \ + -type f \ + -name \*.sh \ + -print0 | xargs -0 bashate -v" + [testenv:pip-check-reqs] # Do not install test-requirements as that will pollute the virtualenv for # determining missing packages.