#! /usr/bin/env bash

#   COPYRIGHT NOTICE STARTS HERE

#   Copyright 2019-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 is a main wrapper script to run Molecule tests.
# Main usage is for the CI to keep interface stable and the way to call
# Molecule can be adjusted in this script independently.
#

set -e

SCRIPT_DIR=$(dirname "${0}")
LOCAL_PATH=$(readlink -f "$SCRIPT_DIR")

ROLE_PATH=$1
MOLECULE_CONTAINER=${MOLECULE_CONTAINER:-false}

echo "Build all pre-build images"
${LOCAL_PATH}/../images/docker/build-all.sh > image_build.log

# Use Molecule container
if [ "${MOLECULE_CONTAINER}" == "true" ]; then
    echo "Build Molecule-dev docker container"
    ${LOCAL_PATH}/../molecule-docker/build.sh
    MOLECULE_BINARY=${LOCAL_PATH}/../bin/molecule.sh
else # Install Molecule natively in the target platform
    echo "Install Molecule with virtualenv"
    source ${LOCAL_PATH}/../bin/install-molecule.sh
    MOLECULE_BINARY="molecule --version"
fi

cd ${ROLE_PATH}
${MOLECULE_BINARY} --version
${MOLECULE_BINARY} test --all
docker volume prune --force
cd -
