#!/bin/bash

set -ex

export GERRIT_NAME=${GERRIT_NAME:-mcp-jenkins}
# Would delete all .git folders.
# Keep in mine, you would not able to get any other version or history!
# Will ignore 'tempest' itself bz of:
# ```
#   Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository.
#   It's also possible that there is a mismatch between the package name in setup.cfg and the argument given to pbr.version.VersionInfo.
#   Project name tempest was given, but was not able to be found.
# ```
export RELEASE_BUILD=${RELEASE_BUILD:-true}
#
export TEMPEST_TAG="${TEMPEST_TAG:-mcp/queens}"
export HORIZON_TAG="${HORIZON_TAG:-mcp/queens}"
export BARBICAN_TAG="${BARBICAN_TAG:-mcp/queens}"
export DESIGNATE_TAG="${DESIGNATE_TAG:-mcp/queens}"
export HEAT_TAG="${HEAT_TAG:-mcp/queens}"
export IRONIC_TAG="${IRONIC_TAG:-mcp/queens}"
export MANILA_TAG="${MANILA_TAG:-mcp/queens}"
export TELEMETRY_TAG="${TELEMETRY_TAG:-mcp/queens}"
export OCTAVIA_TAG="${OCTAVIA_TAG:-mcp/queens}"
export PATROLE_TAG="${PATROLE_TAG:-0.4.x}"
export TUNGSTEN_TAG="${TUNGSTEN_TAG:-0.1.x}"
# global openstack requirements repo
# This is the commit where tempest version is 18.0.0 in u-c
export UPPER_CONSTRAINTS_TAG="${UPPER_CONSTRAINTS_TAG:-6e64e622e8608ab817dbc809d99e02e4cfdd9f59}"

function prepare(){
  # TODO migrate to downstrem mirror?
  mkdir -p data; pushd data
    if [ ! -d openstack_requirements ] ; then
      git clone https://github.com/openstack/requirements.git openstack_requirements
      pushd openstack_requirements; git checkout $UPPER_CONSTRAINTS_TAG; popd
    fi
    sed -i -e "s|tempest=.*|git+file:///var/lib/tempest@${TEMPEST_TAG}#egg=tempest|g" \
    openstack_requirements/upper-constraints.txt;
  #
    if [ ! -d tempest ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/tempest tempest
      pushd tempest ; git checkout $TEMPEST_TAG; popd
    fi
  #
    if [ ! -d tempest-horizon-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/tempest-horizon tempest-horizon-plugin
      pushd tempest-horizon-plugin ; git checkout $HORIZON_TAG; popd
    fi
  #
    if [ ! -d barbican-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/barbican-tempest-plugin
      pushd barbican-tempest-plugin; git checkout $BARBICAN_TAG; popd
    fi
  #
    if [ ! -d designate-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/designate-tempest-plugin
      pushd designate-tempest-plugin; git checkout $DESIGNATE_TAG; popd;
    fi
  #
    if [ ! -d heat-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/heat-tempest-plugin
      pushd heat-tempest-plugin; git checkout $HEAT_TAG; popd
    fi
  #
    if [ ! -d ironic-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/ironic-tempest-plugin
      pushd ironic-tempest-plugin; git checkout $IRONIC_TAG;  popd;
    fi
  #
    if [ ! -d manila-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/manila-tempest-plugin
      pushd manila-tempest-plugin; git checkout $MANILA_TAG; popd;
    fi
  #
    if [ ! -d telemetry-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/telemetry-tempest-plugin
      pushd telemetry-tempest-plugin; git checkout $TELEMETRY_TAG; popd;
    fi
  #
    if [ ! -d octavia-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/octavia-tempest-plugin
      pushd octavia-tempest-plugin; git checkout $OCTAVIA_TAG; popd;
    fi
  #
    if [ ! -d patrole-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/patrole patrole-tempest-plugin
      pushd patrole-tempest-plugin; git checkout $PATROLE_TAG; popd;
    fi
  #
    if [ ! -d tungsten-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/contrail/tungsten-tempest tungsten-tempest-plugin
      pushd tungsten-tempest-plugin; git checkout $TUNGSTEN_TAG; popd;
    fi
  #
    if [ ! -d tungsten-tempest-plugin ] ; then
      git clone ssh://${GERRIT_NAME}@gerrit.mcp.mirantis.com:29418/packaging/sources/tempest
      pushd tempest; git checkout $TEMPEST_TAG; popd
    fi
  #
    if [[ "$(echo ${RELEASE_BUILD} | tr [:upper:] [:lower:] )" == "true" ]]; then
      find . -maxdepth 2 -type d -iname .git -not -path '*tempest/.git*' | xargs --no-run-if-empty rm -rf
      find . -maxdepth 2 -type f -iname .gitignore -or -iname .gitreview | xargs --no-run-if-empty rm -v
    fi
  popd
  }

function buildme(){
  echo "=== Installing plugi-reqs"
  plugins="tempest-horizon-plugin barbican-tempest-plugin designate-tempest-plugin heat-tempest-plugin ironic-tempest-plugin"
  plugins="${plugins} manila-tempest-plugin telemetry-tempest-plugin octavia-tempest-plugin patrole-tempest-plugin tungsten-tempest-plugin"
  for plugin in ${plugins}; do
    pushd /var/lib/${plugin}
      pip install --constraint /var/lib/openstack_requirements/upper-constraints.txt -r requirements.txt
    popd
  done
  echo "=== Installing tempest itself"
  pushd /var/lib/tempest/
    pip install .
  popd
  pip install junitxml
  echo "BUILD_TIMESTAMP=$(date '+%Y-%m-%d-%H-%M-%S' -u)" > /etc/build_timestamp
}

############# body ############################################################

case "$1" in

buildme)  echo "Attempt to buildme"
   buildme
   ;;
*) echo "Attempt to prepare.."
   prepare
   ;;
esac
