mirror of
https://github.com/super-linter/super-linter.git
synced 2024-11-22 14:10:56 -05:00
c99ec7784a
Don't skip processing the current item (FILE) before we give BuildFileArrays the chance to process it as an item to eventually add to the list of directories to lint with ansible-lint. Fix #5789 Other related changes - Add a new make target to open a shell in a Super-linter container. - Use a fixed path for FILE_ARRAYS_DIRECTORY_PATH so we can verify its contents in tests - Remove redundant ValidateBooleanVariable in buildFileList because we already check those variables in valudation. - Move Ansible directory detection to a function so we can reuse it. - Add missing exports for global configuration variables. - Remove unused LOG_XXXX variables from tests. These should have been deleted when we moved log variables to log.sh
172 lines
5.2 KiB
Bash
Executable file
172 lines
5.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
# shellcheck disable=SC2034
|
|
CREATE_LOG_FILE=false
|
|
# Default log level
|
|
# shellcheck disable=SC2034
|
|
LOG_LEVEL="DEBUG"
|
|
|
|
# shellcheck source=/dev/null
|
|
source "lib/functions/log.sh"
|
|
|
|
DEFAULT_BRANCH=main
|
|
|
|
git config --global init.defaultBranch "${DEFAULT_BRANCH}"
|
|
git config --global user.email "super-linter@example.com"
|
|
git config --global user.name "Super-linter"
|
|
|
|
function InitGitRepositoryAndCommitFiles() {
|
|
local REPOSITORY_PATH="${1}" && shift
|
|
local FILES_TO_COMMIT="${1}" && shift
|
|
local COMMIT_FILE_INITIAL_COMMIT="${1}"
|
|
|
|
git -C "${REPOSITORY_PATH}" init
|
|
if [[ "${COMMIT_FILE_INITIAL_COMMIT}" == "true" ]]; then
|
|
touch "${REPOSITORY_PATH}/test-initial-commit.txt"
|
|
git -C "${REPOSITORY_PATH}" add .
|
|
fi
|
|
git -C "${REPOSITORY_PATH}" commit --allow-empty -m "Initial commit"
|
|
GITHUB_BEFORE_SHA=$(git -C "${REPOSITORY_PATH}" rev-parse HEAD)
|
|
debug "GITHUB_BEFORE_SHA: ${GITHUB_BEFORE_SHA}"
|
|
GIT_ROOT_COMMIT_SHA="${GITHUB_BEFORE_SHA}"
|
|
debug "GIT_ROOT_COMMIT_SHA: ${GIT_ROOT_COMMIT_SHA}"
|
|
|
|
git -C "${REPOSITORY_PATH}" checkout -b test-branch
|
|
|
|
for ((i = 1; i <= FILES_TO_COMMIT; i++)); do
|
|
local TEST_FILE_PATH="${REPOSITORY_PATH}/test${i}.txt"
|
|
touch "${TEST_FILE_PATH}"
|
|
git -C "${REPOSITORY_PATH}" add .
|
|
git -C "${REPOSITORY_PATH}" commit -m "Add ${TEST_FILE_PATH}"
|
|
done
|
|
|
|
GITHUB_SHA=$(git -C "${REPOSITORY_PATH}" rev-parse HEAD)
|
|
debug "GITHUB_SHA: ${GITHUB_SHA}"
|
|
git -C "${REPOSITORY_PATH}" log --oneline "${DEFAULT_BRANCH}...${GITHUB_SHA}"
|
|
}
|
|
|
|
function GenerateFileDiffOneFileTest() {
|
|
local GITHUB_WORKSPACE
|
|
GITHUB_WORKSPACE="$(mktemp -d)"
|
|
# shellcheck disable=SC2064 # Once the path is set, we don't expect it to change
|
|
trap "rm -fr '${GITHUB_WORKSPACE}'" EXIT
|
|
echo "GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}"
|
|
|
|
local FILES_TO_COMMIT="${FILES_TO_COMMIT:-1}"
|
|
local COMMIT_FILE_INITIAL_COMMIT="${COMMIT_FILE_INITIAL_COMMIT:-"false"}"
|
|
InitGitRepositoryAndCommitFiles "${GITHUB_WORKSPACE}" "${FILES_TO_COMMIT}" "${COMMIT_FILE_INITIAL_COMMIT}"
|
|
|
|
# shellcheck source=/dev/null
|
|
source "lib/functions/buildFileList.sh"
|
|
|
|
GenerateFileDiff
|
|
|
|
RAW_FILE_ARRAY_SIZE=${#RAW_FILE_ARRAY[@]}
|
|
if [ "${RAW_FILE_ARRAY_SIZE}" -ne 1 ]; then
|
|
fatal "RAW_FILE_ARRAY does not have exactly one element: ${RAW_FILE_ARRAY_SIZE}"
|
|
fi
|
|
|
|
local FUNCTION_NAME
|
|
FUNCTION_NAME="${1:-${FUNCNAME[0]}}"
|
|
notice "${FUNCTION_NAME} PASS"
|
|
}
|
|
|
|
function GenerateFileDiffOneFilePushEventTest() {
|
|
# shellcheck disable=SC2034
|
|
local GITHUB_EVENT_NAME="push"
|
|
local FILES_TO_COMMIT=1
|
|
local COMMIT_FILE_INITIAL_COMMIT="false"
|
|
GenerateFileDiffOneFileTest "${FUNCNAME[0]}"
|
|
}
|
|
|
|
function GenerateFileDiffInitialCommitPushEventTest() {
|
|
# shellcheck disable=SC2034
|
|
local GITHUB_EVENT_NAME="push"
|
|
local FILES_TO_COMMIT=0
|
|
local COMMIT_FILE_INITIAL_COMMIT="true"
|
|
GenerateFileDiffOneFileTest "${FUNCNAME[0]}"
|
|
}
|
|
|
|
function GenerateFileDiffTwoFilesTest() {
|
|
local GITHUB_WORKSPACE
|
|
GITHUB_WORKSPACE="$(mktemp -d)"
|
|
# shellcheck disable=SC2064 # Once the path is set, we don't expect it to change
|
|
trap "rm -fr '${GITHUB_WORKSPACE}'" EXIT
|
|
debug "GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}"
|
|
local FILES_TO_COMMIT=2
|
|
|
|
InitGitRepositoryAndCommitFiles "${GITHUB_WORKSPACE}" ${FILES_TO_COMMIT} "false"
|
|
|
|
# shellcheck source=/dev/null
|
|
source "lib/functions/buildFileList.sh"
|
|
|
|
GenerateFileDiff
|
|
|
|
RAW_FILE_ARRAY_SIZE=${#RAW_FILE_ARRAY[@]}
|
|
if [ "${RAW_FILE_ARRAY_SIZE}" -ne 2 ]; then
|
|
fatal "RAW_FILE_ARRAY does not have exactly ${FILES_TO_COMMIT} elements: ${RAW_FILE_ARRAY_SIZE}"
|
|
fi
|
|
|
|
local FUNCTION_NAME
|
|
FUNCTION_NAME="${1:-${FUNCNAME[0]}}"
|
|
notice "${FUNCTION_NAME} PASS"
|
|
}
|
|
|
|
function GenerateFileDiffTwoFilesPushEventTest() {
|
|
# shellcheck disable=SC2034
|
|
local GITHUB_EVENT_NAME="push"
|
|
GenerateFileDiffTwoFilesTest "${FUNCNAME[0]}"
|
|
}
|
|
|
|
function BuildFileArraysAnsibleGitHubWorkspaceTest() {
|
|
|
|
# shellcheck source=/dev/null
|
|
source /action/lib/functions/detectFiles.sh
|
|
# shellcheck source=/dev/null
|
|
source /action/lib/functions/validation.sh
|
|
|
|
# shellcheck disable=SC2034
|
|
local FILTER_REGEX_INCLUDE=""
|
|
# shellcheck disable=SC2034
|
|
local FILTER_REGEX_EXCLUDE=""
|
|
# shellcheck disable=SC2034
|
|
local TEST_CASE_RUN=false
|
|
# shellcheck disable=SC2034
|
|
local IGNORE_GENERATED_FILES=false
|
|
local FILE_ARRAYS_DIRECTORY_PATH="/tmp/super-linter-file-arrays"
|
|
mkdir -p "${FILE_ARRAYS_DIRECTORY_PATH}"
|
|
|
|
# shellcheck disable=SC2034
|
|
CHECKOV_LINTER_RULES="$(mktemp)"
|
|
|
|
GITHUB_WORKSPACE="/tmp/lint"
|
|
# shellcheck disable=SC2034
|
|
ANSIBLE_DIRECTORY="${GITHUB_WORKSPACE}"
|
|
|
|
BuildFileArrays "${GITHUB_WORKSPACE}"
|
|
|
|
local FILE_ARRAY_ANSIBLE_PATH="${FILE_ARRAYS_DIRECTORY_PATH}/file-array-ANSIBLE"
|
|
if [[ ! -e "${FILE_ARRAY_ANSIBLE_PATH}" ]]; then
|
|
fatal "${FILE_ARRAY_ANSIBLE_PATH} doesn't exist"
|
|
fi
|
|
|
|
if ! grep -qxF "${ANSIBLE_DIRECTORY}" "${FILE_ARRAY_ANSIBLE_PATH}"; then
|
|
fatal "${FILE_ARRAY_ANSIBLE_PATH} doesn't contain ${ANSIBLE_DIRECTORY}"
|
|
fi
|
|
|
|
local FUNCTION_NAME
|
|
FUNCTION_NAME="${FUNCNAME[0]}"
|
|
notice "${FUNCTION_NAME} PASS"
|
|
}
|
|
|
|
GenerateFileDiffOneFileTest
|
|
GenerateFileDiffOneFilePushEventTest
|
|
GenerateFileDiffTwoFilesTest
|
|
GenerateFileDiffTwoFilesPushEventTest
|
|
GenerateFileDiffInitialCommitPushEventTest
|
|
|
|
BuildFileArraysAnsibleGitHubWorkspaceTest
|