#!/usr/bin/env bash ###### script header ###### lib=$(realpath @@BASE_LIB@@) || exit 1 stat "${lib}" >> /dev/null || exit 1 # shellcheck source=../sh/lib.bash if ! source "${lib}"; then echo "Error: could not find import" exit 1 fi shfmt=$(realpath @@SHFMT@@) stat "${shfmt}" >> /dev/null shellcheck=$(realpath @@SHELLCHECK@@) stat "${shellcheck}" >> /dev/null cd "${BUILD_WORKSPACE_DIRECTORY}" ###### script body ###### scriptsStr=$(${shfmt} -f "${BUILD_WORKSPACE_DIRECTORY}") readarray -t <<< "${scriptsStr}" scripts=("${MAPFILE[@]}") excludeDirs=( "internal/helm/charts/cilium" "build" "docs/node_modules" ) excludeFiles=( "bazel/bazel-complete.bash" ) echo "The following scripts are excluded by their directory and won't be linted with shellcheck:" for exclude in "${excludeDirs[@]}"; do for i in "${!scripts[@]}"; do if [[ ${scripts[i]} == "${BUILD_WORKSPACE_DIRECTORY}/${exclude}"* ]]; then echo " ${scripts[i]}" unset 'scripts[i]' fi done done echo "The following scripts are excluded and won't be linted with shellcheck:" for exclude in "${excludeFiles[@]}"; do for i in "${!scripts[@]}"; do if [[ ${scripts[i]} == "${BUILD_WORKSPACE_DIRECTORY}/${exclude}" ]]; then echo " ${scripts[i]}" unset 'scripts[i]' fi done done echo "Linting the following scripts with shellcheck:" for script in "${scripts[@]}"; do echo " ${script}" done statuscode=0 for file in "${scripts[@]}"; do ${shellcheck} --severity=info "${file}" || statuscode=$? done exit "${statuscode}"