blob: 4a8934e78282efd611904fdd5a61e2f02e04dcf8 [file] [log] [blame]
#!/usr/bin/env bash
# COPYRIGHT NOTICE STARTS HERE
#
# Copyright 2018-2021 © Samsung Electronics Co., Ltd.
#
# Licensed 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.
#
# COPYRIGHT NOTICE ENDS HERE
###############################################################################
# This script performs Jenkins Change Verification for ONAP Offline Installer #
# No parameters are expected #
###############################################################################
function prep_ubuntu_16_04_for_molecule() {
sudo killall apt apt-get
sudo apt-get --assume-yes install software-properties-common
sudo add-apt-repository --yes ppa:deadsnakes/ppa
sudo apt update
sudo apt install --assume-yes python3.8
sudo apt install --assume-yes python3.8-venv
}
function run_molecule() {
local roles=("$@")
local MOLECULE_RC
for role in ${roles[@]}
do
if [ -f ${role}/molecule/default/molecule.yml ]; then
./ansible/test/bin/ci-molecule.sh ${role}
MOLECULE_RC=$?
if [ ${MOLECULE_RC} -ne "0" ]; then FAILED_ROLES+=(${role}); fi
else
echo "[WARNING] ---------- THERE ARE NO TESTS DEFINED FOR ${role} ----------"
fi
done
}
#######################################################################$
# MAIN #$
#######################################################################$
echo "---------- ONAP OFFLINE INSTALLER - CHANGE VERIFICATION START ----------"
FAILED_ROLES=()
ALL_PLAYBOOKS=(`ls -d ansible/test/play-*`) # enumerate all playbook tests for later usage
# Setup environment
prep_ubuntu_16_04_for_molecule > ubuntu_preparation.log
# Check for changes in Ansible roles
ROLE_CHANGES=(`git diff HEAD^ HEAD --name-only ansible/roles | cut -f 1-3 -d "/" | sort -u`)
if [ -z "${ROLE_CHANGES}" ]; then
echo "NO ANSIBLE ROLE TESTS REQUIRED"
else
run_molecule "${ROLE_CHANGES[@]}"
fi
# Check for changes in Molecule tests
if ! $(git diff HEAD^ HEAD --exit-code --quiet ansible/test); then
# If there are any changes in ansible/test area
MOLECULE_CHANGES=(`git diff HEAD^ HEAD --name-only ansible/test | grep -v "ansible/test/play-.*/"`)
if [ ${#MOLECULE_CHANGES[@]} -gt 0 ]; then
# If detected changes that affect all playbook tests - run all
run_molecule "${ALL_PLAYBOOKS[@]}"
# memorize already tested playbooks
TESTED_PLAYBOOKS=${ALL_PLAYBOOKS[@]}
else
# Changes only in ansible/test/play-* area - run tests only for changed playbook tests
PLAYBOOKS=(`git diff HEAD^ HEAD --name-only ansible/test | cut -f 1-3 -d "/" | sort -u`)
run_molecule "${PLAYBOOKS[@]}"
# memorize already tested playbooks
TESTED_PLAYBOOKS=${PLAYBOOKS[@]}
fi
fi
# Check for changes in Ansible playbooks
PLAYBOOK_CHANGES=(`git diff HEAD^ HEAD --name-only --relative=ansible ansible/*yml | cut -f 1 -d "."`)
if [ ${#PLAYBOOK_CHANGES[@]} -gt 0 ]; then
for playbook in ${PLAYBOOK_CHANGES[@]};
do
if [ -d ansible/test/play-${playbook} ]; then
# If tests for this playbook are defined
if [[ ! ${TESTED_PLAYBOOKS[*]} =~ ${playbook} ]]; then
# AND weren't already run
run_molecule "ansible/test/play-${playbook}"
fi
else
# Warn that no tests are defined for this playbook
echo "[WARNING] ---------- THERE ARE NO TESTS DEFINED FOR ${playbook}.yml PLAYBOOK ----------"
fi
done
fi
# Check for changes in Ansible group_vars or libraries
if ! $(git diff HEAD^ HEAD --exit-code --quiet --relative=ansible/group_vars) || \
! $(git diff HEAD^ HEAD --exit-code --quiet --relative=ansible/library); then
# If there are any changes in ansible/{group_vars,libraries}
# then run all playbook tests except those that've been
# already run
for playbook in ${ALL_PLAYBOOKS[@]};
do
if [[ ! ${TESTED_PLAYBOOKS[*]} =~ ${playbook} ]]; then
run_molecule "${playbook}"
fi
done
fi
# if build was changed
if `git diff HEAD^ HEAD --name-only | grep -q "build"`; then
echo "TO DO: BUILD TEST" ;
else
echo "NO BUILD TEST REQUIRED"
fi
# if documentation was changed
if `git diff HEAD^ HEAD --name-only | grep -q "docs"`; then
echo "TO DO: DOC TEST";
else
echo "NO DOC TEST REQUIRED"
fi
# SUMMARY RESULTS
if [ -z ${FAILED_ROLES} ]; then
echo "All verification steps passed"
else
echo "Verification failed for ${FAILED_ROLES[*]}"
exit 1
fi
echo "---------- ONAP OFFLINE INSTALLER - CHANGE VERIFICATION END ----------"