#!/usr/bin/env bash
#
# Copyright (c) 2019, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

# This script is meant to be run from Jenkins to make an initial clone of the
# CI repository.
#
#  - If CI_ROOT is set, we assume that a parent job has already cloned required
#    repositories; so we skip further cloning. However, in order to prevent this
#    job from potentially cleaning up the filer workspace (which is the
#    responsibility of the parent job which did the original clone), we unset
#    the FILER_WS variable in the env file.
#
#  - Otherwise, we call clone_repos.sh to have all required repositories to be
#    cloned.
#
# Note that, since this file resides in the repository itself, a copy of this
# file must be 'wget'. I.e., any changes to to this file must be committed first
# to the CI repository master for it to take effect!

strip_var() {
        local var="$1"
        local val="$(echo "${!var}" | sed 's#^\s*\|\s*$##g')"
        eval "$var=$val"
}

strip_var CI_REFSPEC

if [ "$CI_ENVIRONMENT" ]; then
	tmpfile="$(mktemp --tmpdir="$WORKSPACE")"
	echo "$CI_ENVIRONMENT" > "$tmpfile"
	set -a
	source "$tmpfile"
	set +a
fi

if [ "$CI_ROOT" ]; then
	# We're not going to clone repos; so prevent this job from cleaning up
	# filer workspace.
	echo "FILER_WS=" > env

	# Resetting a variable doesn't seem to work on new Jenkins instance. So
	# us a different variable altogether instead.
	echo "DONT_CLEAN_WS=1" >> env

	exit 0
fi

# If no CI ref specs were explicitly specified, but was triggered from a CI
# Gerrit trigger, move to the Gerrit refspec instead so that we use the expected
# version of clone_repos.sh.
if [ -z "$CI_REFSPEC" ] && [ "$REPO_UNDER_TEST" = "trusted-firmware-ci" ] && \
		[ "$GERRIT_REFSPEC" ]; then
	CI_REFSPEC="$GERRIT_REFSPEC"
fi

# Clone CI repository and move to the refspec
git clone -q --depth 1 \
	https://gerrit.oss.arm.com/pdswinf/ci/pdcs-platforms/platform-ci

if [ "$CI_REFSPEC" ]; then
	# Only recent Git versions support fetching refs via. commit IDs.
	# However, platform slaves have been updated to a version that can do
	# this (https://jira.arm.com/browse/SSGSWINF-1426). The module load
	# commands have been commented out since.
	#
	# source /arm/tools/setup/init/bash
	# module load swdev
	# module load git/git/2.14.3

	pushd platform-ci &>/dev/null
	git fetch -q --depth 1 origin "$CI_REFSPEC"
	git checkout -q FETCH_HEAD
	echo "CI repo checked out to $CI_REFSPEC"
	popd &>/dev/null
fi

if ! platform-ci/trusted-fw/new-ci/script/clone_repos.sh; then
	echo "clone_repos.sh failed!"
	cat clone_repos.log
	exit 1
fi

# vim:set tw=80 sw=8 sts=8 noet:
