#!/bin/bash

# ============LICENSE_START=======================================================
#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
# ================================================================================
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

set -o nounset
set -o errexit
set -o pipefail

#-------------------------------------------------------------------------------
# Various tests are run using tox such as docs, yamllint, ansible-lint, and
# shellcheck. Some repos do not have certain types of files and those repos
# are ignored using REPOS_TO_IGNORE variable which is controlled within the
# jjb per lint type.
#-------------------------------------------------------------------------------
run_tox() {

  echo "Info  : Preparing to run tox for the repo $GERRIT_PROJECT"

  # set and export defaults
  LINT_TYPE="${LINT_TYPE:-ansible-lint}"
  REPOS_TO_IGNORE="${REPOS_TO_IGNORE:-none}"
  VERBOSITY=${VERBOSITY:-false}
  export LINT_TYPE REPOS_TO_IGNORE VERBOSITY

  # check if the change is for a repo we should ignore
  if [[ "$REPOS_TO_IGNORE" =~ "$GERRIT_PROJECT" ]]; then
    echo "Info  : Ignoring change as $GERRIT_PROJECT is in ignore list!"
    echo "Info  : Done!"
    exit 0
  fi

  # ensure we are in job build WORKSPACE
  cd "$WORKSPACE"

  # set DEBIAN_FRONTEND to run apt non-interactively
  DEBIAN_FRONTEND=noninteractive
  export DEBIAN_FRONTEND

  # install dependencies
  echo "Info  : Install python3.7-minimal python3-distutils virtualenv using apt"
  redirect_cmd sudo apt update
  redirect_cmd sudo apt install -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y python3.7-minimal python3-distutils virtualenv

  # create and activate virtualenv
  echo "Info  : Create and activate python virtualenv"
  redirect_cmd virtualenv -p python3 .venv
  set +u
  redirect_cmd source .venv/bin/activate
  set -u

  # install only tox since the rest of the requirements are installed by tox itself
  TOX_PACKAGE=$(grep "^tox==" test-requirements.txt)
  echo "Info  : Install $TOX_PACKAGE"
  redirect_cmd pip install --force-reinstall "$TOX_PACKAGE"

  # run tox
  echo "Info  : Run $LINT_TYPE using tox"
  echo "----------------------------------------------------"
  tox -e "$LINT_TYPE"
  echo "----------------------------------------------------"
  echo "Info  : Done!"

}
#-------------------------------------------------------------------------------
# In some cases, it is useful to see all the output generated by commands so
# this function makes it possible for users to achieve that by not redirecting
# output to /dev/null when verbosity is enabled
#-------------------------------------------------------------------------------
redirect_cmd() {

  if [[ "$VERBOSITY" == "false" ]]; then
    "$@" > /dev/null 2>&1
  else
    "$@"
  fi

}
#-------------------------------------------------------------------------------
# run tox
#-------------------------------------------------------------------------------

run_tox "$@"

# vim: set ts=2 sw=2 expandtab:
