diff --git a/test/lint/lint-all.sh b/test/lint/lint-all.sh new file mode 100755 index 0000000..fa37fa5 --- /dev/null +++ b/test/lint/lint-all.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2017-2019 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# This script runs all contrib/devtools/lint-* files, and fails if any exit +# with a non-zero status code. + +# This script is intentionally locale dependent by not setting "export LC_ALL=C" +# in order to allow for the executed lint scripts to opt in or opt out of locale +# dependence themselves. + +set -u + +SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") +LINTALL=$(basename "${BASH_SOURCE[0]}") + +EXIT_CODE=0 + +for f in "${SCRIPTDIR}"/lint-*; do + if [ "$(basename "$f")" != "$LINTALL" ]; then + if ! "$f"; then + echo "^---- failure generated from $f" + EXIT_CODE=1 + fi + fi +done + +exit ${EXIT_CODE} diff --git a/test/lint/lint-python.sh b/test/lint/lint-python.sh index a72d12f..8d203dd 100755 --- a/test/lint/lint-python.sh +++ b/test/lint/lint-python.sh @@ -13,7 +13,8 @@ elif flake8 --version | grep -q "Python 2"; then fi if [[ $# == 0 ]]; then - flake8 "$(git ls-files "*.py")" --extend-exclude "${EXCLUDE_PATTERNS}" + # shellcheck disable=SC2046 + flake8 $(git ls-files "*.py") --extend-exclude "${EXCLUDE_PATTERNS}" else flake8 "$@" fi diff --git a/test/lint/lint-shell.sh b/test/lint/lint-shell.sh new file mode 100755 index 0000000..8bbf833 --- /dev/null +++ b/test/lint/lint-shell.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2018-2021 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Check for shellcheck warnings in shell scripts. + +export LC_ALL=C + +# Disabled warnings: +disabled=( +) + +EXIT_CODE=0 + +if ! command -v shellcheck > /dev/null; then + echo "Skipping shell linting since shellcheck is not installed." + exit $EXIT_CODE +fi + +SHELLCHECK_CMD=(shellcheck --external-sources --check-sourced --source-path=SCRIPTDIR) +EXCLUDE="--exclude=$(IFS=','; echo "${disabled[*]}")" +# Check shellcheck directive used for sourced files +mapfile -t SOURCED_FILES < <(git ls-files | xargs gawk '/^# shellcheck shell=/ {print FILENAME} {nextfile}') +mapfile -t GUIX_FILES < <(git ls-files contrib/guix contrib/shell | xargs gawk '/^#!\/usr\/bin\/env bash/ {print FILENAME} {nextfile}') +mapfile -t FILES < <(git ls-files -- '*.sh' | grep -vE 'src/(leveldb|secp256k1|minisketch|univalue)/') +if ! "${SHELLCHECK_CMD[@]}" "$EXCLUDE" "${SOURCED_FILES[@]}" "${GUIX_FILES[@]}" "${FILES[@]}"; then + EXIT_CODE=1 +fi + +exit $EXIT_CODE