#!/bin/bash
# Copyright 2020 Google LLC
#
# 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
#
#     https://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.

# The default test runner for samples.
#
# For periodic builds, we rewinds the repo to the latest release, and
# run test-samples-impl.sh.

# `-e` enables the script to automatically fail when a command fails
# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero
set -eo pipefail
# Enables `**` to include files nested inside sub-folders
shopt -s globstar

cd github/google-api-python-client

# Run periodic samples tests at latest release
if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then
    # preserving the test runner implementation.
    cp .kokoro/test-samples-impl.sh "${TMPDIR}/test-samples-impl.sh"
    echo "--- IMPORTANT IMPORTANT IMPORTANT ---"
    echo "Now we rewind the repo back to the latest release..."
    LATEST_RELEASE=$(git describe --abbrev=0 --tags)
    git checkout $LATEST_RELEASE
    echo "The current head is: "
    echo $(git rev-parse --verify HEAD)
    echo "--- IMPORTANT IMPORTANT IMPORTANT ---"
    # move back the test runner implementation if there's no file.
    if [ ! -f .kokoro/test-samples-impl.sh ]; then
	cp "${TMPDIR}/test-samples-impl.sh" .kokoro/test-samples-impl.sh
    fi
fi

exec .kokoro/test-samples-impl.sh
