blob: 03215b6fa0089bcba8b2d3c5360e72a17987e671 [file]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# SHELLDOC-IGNORE
add_test_type ansiblelint
ANSIBLELINT_TIMER=0
ANSIBLELINT=${ANSIBLELINT:-$(command -v ansible-lint 2>/dev/null)}
function ansiblelint_usage
{
yetus_add_option "--ansiblelint=<path>" "path to ansible-lint executable"
}
function ansiblelint_parse_args
{
declare i
for i in "$@"; do
case ${i} in
--ansiblelint=*)
ANSIBLELINT=${i#*=}
delete_parameter "${i}"
;;
esac
done
}
function ansiblelint_filefilter
{
declare filename=$1
if [[ ${filename} =~ playbooks/.*\.yml$ ]] || [[ ${filename} =~ playbooks/.*\.yaml$ ]]; then
add_test ansiblelint
fi
}
function ansiblelint_precheck
{
if ! verify_command ansiblelint "${ANSIBLELINT}"; then
add_vote_table 0 ansiblelint "ansiblelint was not available."
delete_test ansiblelint
return 0
fi
}
function ansiblelint_logic
{
declare repostatus=$1
declare i
declare -a ansiblelint_params
pushd "${BASEDIR}" >/dev/null || return 1
ansiblelint_params=(--nocolor)
ansiblelint_params+=(-f plain)
ansiblelint_params+=(--parseable-severity)
ansiblelint_params+=(--show-relpath)
if [[ "${OFFLINE}" == "true" ]]; then
ansiblelint_params+=(--offline)
fi
for i in "${CHANGED_FILES[@]}"; do
if [[ ${i} =~ playbooks/.*\.yaml$ && -f ${i} ]] ||
[[ ${i} =~ playbooks/.*\.yml$ && -f ${i} ]]; then
# unfortunately, ansible-lint pollutes stderr with a pointless message
# about how to skip tests so there is no point in trying to process it. :(
"${ANSIBLELINT}" \
"${ansiblelint_params[@]}" \
"${i}" \
>> "${PATCH_DIR}/${repostatus}-ansiblelint-result.tmp" \
2> "${PATCH_DIR}/${repostatus}-ansiblelint-stderr.txt"
fi
done
if [[ -f "${PATCH_DIR}/${repostatus}-ansiblelint-result.tmp" ]]; then
sort \
"${PATCH_DIR}/${repostatus}-ansiblelint-result.tmp" \
> "${PATCH_DIR}/${repostatus}-ansiblelint-result.txt"
rm "${PATCH_DIR}/${repostatus}-ansiblelint-result.tmp"
else
touch "${PATCH_DIR}/${repostatus}-ansiblelint-result.txt"
fi
popd > /dev/null || return 1
}
function ansiblelint_preapply
{
if ! verify_needed_test ansiblelint; then
return 0
fi
big_console_header "ansiblelint plugin: ${PATCH_BRANCH}"
start_clock
ansiblelint_logic branch
# keep track of how much as elapsed for us already
ANSIBLELINT_TIMER=$(stop_clock)
return 0
}
function ansiblelint_postapply
{
declare version
if ! verify_needed_test ansiblelint; then
return 0
fi
big_console_header "ansiblelint plugin: ${BUILDMODE}"
start_clock
# add our previous elapsed to our new timer
# by setting the clock back
offset_clock "${ANSIBLELINT_TIMER}"
ansiblelint_logic patch
# shellcheck disable=SC2016
version=$("${ANSIBLELINT}" --version | "${AWK}" '{print $NF}')
add_version_data ansiblelint "v${version}"
root_postlog_compare \
ansiblelint \
"${PATCH_DIR}/branch-ansiblelint-result.txt" \
"${PATCH_DIR}/patch-ansiblelint-result.txt"
}
function ansiblelint_postcompile
{
declare repostatus=$1
if [[ "${repostatus}" = branch ]]; then
ansiblelint_preapply
else
ansiblelint_postapply
fi
}