#!/bin/bash -e

default_target="${TRAVIS+"coverage-codecov"}"
target="${default_target:-"coverage-codecovbash"}"

usage() {
    cat << EOF
Usage: docker_run_ci [<options...>] ...

Options:
 -v, --verbose          execute with verbose output
 -h, -?, --help         display this help
 -t --target=<target>   The final target to be called in the build environment,
                        default based on local or CI environment: '$target'
                        Default alternatives are 'coverage-codecov' if
                        'travis CI' is detected and 'coverage-codecovbash'
                        otherwise.

Examples:
 docker_run_ci
 docker_run_ci --target=coverage-codecovbash
EOF
    exit "$1"
}

set -o pipefail

opts=$(getopt -o vht: --long verbose,help,target: -n 'parse-options' -- "$@") || usage 1
eval set -- "$opts"
while true; do
  case "$1" in
    -v | --verbose ) set -x; shift ;;
    -h | --help ) usage 0; shift ;;
    -t | --target ) target="$2"; shift 2 ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

CI_ENV=$(bash <(curl -s https://codecov.io/env))

IMAGE=registry.opensuse.org/devel/openqa/containers15.3/os-autoinst_dev
docker pull $IMAGE
docker images | grep opensuse

# shellcheck disable=SC2086
docker run --env "QEMU_QMP_CONNECT_ATTEMPTS=10" \
  $CI_ENV --rm --entrypoint '' -v "$PWD":/opt $IMAGE sh -ec "
. /etc/os-release
if [[ \"$ID\" == \"opensuse-leap\" ]]; then
    echo 'Newer docker versions need a patched qemu with disabled membarrier'
    zypper -n addrepo http://download.opensuse.org/repositories/devel:/openQA:/ci/openSUSE_Leap_\${VERSION} qemu
    zypper -n --gpg-auto-import-keys --no-gpg-checks refresh
    zypper -n in --from qemu qemu qemu-x86 qemu-tools qemu-ipxe qemu-sgabios qemu-seabios
fi
[[ \"$target\" == \"coverage-codecovbash\" ]] && zypper -n in perl-App-cpanminus && cpanm -nq 'Devel::Cover::Report::Codecovbash'
cd /opt
./tools/install-new-deps.sh
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .
export CI=1 WITH_COVER_OPTIONS=1
ninja -v check
ninja -v $target"
