mirror of
https://github.com/super-linter/super-linter.git
synced 2024-12-23 07:42:13 -05:00
05009f2816
Instead of loading the error code and checking it, shorten checks by running the command directly.
91 lines
3.7 KiB
Bash
Executable file
91 lines
3.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
GetLinterVersions() {
|
|
debug "WRITE_LINTER_VERSIONS_FILE: ${WRITE_LINTER_VERSIONS_FILE}"
|
|
|
|
if [ "${WRITE_LINTER_VERSIONS_FILE}" = "true" ]; then
|
|
debug "Building linter version file: ${VERSION_FILE}"
|
|
if BuildLinterVersions "${VERSION_FILE}" "${LINTER_NAMES_ARRAY[@]}"; then
|
|
info "Linter version file built correctly."
|
|
exit
|
|
else
|
|
fatal "Error while building the versions file."
|
|
fi
|
|
else
|
|
debug "Skipping versions file build..."
|
|
fi
|
|
|
|
if ! cat "${VERSION_FILE}"; then
|
|
fatal "Failed to view version file: ${VERSION_FILE}"
|
|
fi
|
|
}
|
|
################################################################################
|
|
#### Function BuildLinterVersions ##############################################
|
|
BuildLinterVersions() {
|
|
VERSION_FILE="${1}" && shift
|
|
LINTER_ARRAY=("$@")
|
|
|
|
# Start with an empty file. We might have built this file in a previous build
|
|
# stage, so we start fresh here.
|
|
rm -rfv "${VERSION_FILE}"
|
|
|
|
debug "Building linter version file ${VERSION_FILE} for the following linters: ${LINTER_ARRAY[*]}..."
|
|
|
|
##########################################################
|
|
# Go through the array of linters and print version info #
|
|
##########################################################
|
|
for LINTER in "${LINTER_ARRAY[@]}"; do
|
|
if [ -n "${LINTER}" ]; then
|
|
|
|
# Some linters need to account for special commands to get their version
|
|
|
|
if [[ ${LINTER} == "arm-ttk" ]]; then
|
|
GET_VERSION_CMD="$(grep -iE 'version' "/usr/bin/arm-ttk" | xargs 2>&1)"
|
|
# Some linters don't support a "get version" command
|
|
elif [[ ${LINTER} == "bash-exec" ]] || [[ ${LINTER} == "gherkin-lint" ]]; then
|
|
GET_VERSION_CMD="Version command not supported"
|
|
elif [[ ${LINTER} == "checkstyle" ]] || [[ ${LINTER} == "google-java-format" ]]; then
|
|
GET_VERSION_CMD="$(java -jar "/usr/bin/${LINTER}" --version 2>&1)"
|
|
elif [[ ${LINTER} == "clippy" ]]; then
|
|
GET_VERSION_CMD="$(cargo-clippy --version 2>&1)"
|
|
elif [[ ${LINTER} == "editorconfig-checker" ]]; then
|
|
GET_VERSION_CMD="$(${LINTER} -version)"
|
|
elif [[ ${LINTER} == "kubeconform" ]]; then
|
|
GET_VERSION_CMD="$(${LINTER} -v)"
|
|
elif [[ ${LINTER} == "lintr" ]]; then
|
|
# Need specific command for lintr (--slave is deprecated in R 4.0 and replaced by --no-echo)
|
|
GET_VERSION_CMD="$(R --slave -e "r_ver <- R.Version()\$version.string; \
|
|
lintr_ver <- packageVersion('lintr'); \
|
|
glue::glue('lintr { lintr_ver } on { r_ver }')")"
|
|
elif [[ ${LINTER} == "protolint" ]] || [[ ${LINTER} == "gitleaks" ]]; then
|
|
GET_VERSION_CMD="$(${LINTER} version)"
|
|
elif [[ ${LINTER} == "lua" ]]; then
|
|
GET_VERSION_CMD="$("${LINTER}" -v 2>&1)"
|
|
elif [[ ${LINTER} == "renovate-config-validator" ]]; then
|
|
GET_VERSION_CMD="$(renovate --version 2>&1)"
|
|
elif [[ ${LINTER} == "terrascan" ]]; then
|
|
GET_VERSION_CMD="$("${LINTER}" version 2>&1)"
|
|
else
|
|
# Unset TF_LOG_LEVEL so that the version file doesn't contain debug log when running
|
|
# commands that read TF_LOG_LEVEL or TFLINT_LOG, which are likely set to DEBUG when
|
|
# building the versions file
|
|
GET_VERSION_CMD="$(
|
|
unset TF_LOG_LEVEL
|
|
unset TFLINT_LOG
|
|
"${LINTER}" --version 2>&1
|
|
)"
|
|
fi
|
|
|
|
ERROR_CODE=$?
|
|
|
|
if [ ${ERROR_CODE} -ne 0 ]; then
|
|
fatal "[${LINTER}]: Failed to get version info. Exit code: ${ERROR_CODE}. Output: ${GET_VERSION_CMD}"
|
|
else
|
|
info "Successfully found version for ${LINTER}: ${GET_VERSION_CMD}"
|
|
if ! echo "${LINTER}: ${GET_VERSION_CMD}" >>"${VERSION_FILE}" 2>&1; then
|
|
fatal "Failed to write data to file!"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
}
|