#!/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=========================================================

#
# This script will take the single commit form the given Nordix Gerrit review
# and push it, and all its ancestor commit till $GERRIT_BRANCH, to OpenDev
# Gerrit.
# Pre-requisites for script to run successfully:
# - The Gerrit username in Nordix needs to match with the Gerrit username in
#   OpenDev
# - infra public key on build server needs to be added to your users SSH
#   Public Keys in OpenDev Gerrit
#
set -euxo pipefail

cd "$WORKSPACE"

opendev_gerrit_base='review.opendev.org:29418'
nordix_gerrit_rest='https://gerrit.nordix.org'

echo >&2 "Collecting information about what and how to push towards OpenDev"

# The git hash of the commit in the review this job runs on
commit_hash="$GERRIT_PATCHSET_REVISION"

# GERRIT_PROJECT is in the form of opendev/<opendev-project>
opendev_project=$(echo "$GERRIT_PROJECT" | cut -d/ -f2- )

# Nordix Gerrit can map the email address of the user pushed the change to
# the review to the Gerrit username of the accound in Nordix Gerrit. This
# should match with the Gerrit username in the OpenDev Gerrit.
username=$(
    curl -s -H 'Accept: application/json' \
        "$nordix_gerrit_rest/accounts/?q=email:$GERRIT_EVENT_ACCOUNT_EMAIL&o=DETAILS" \
    | tee /dev/stderr | tail -1 | jq -r '.[0].username')

opendev_remote_url="ssh://$username@$opendev_gerrit_base/$opendev_project"

# GERRIT_BRANCH is the _intended_ branch of the commit under review
# E.g. git push HEAD:refs/for/master => GERRIT_BRANCH='master'
# GERRIT_TOPIC is the rest of the refspec after GERRIT_BRANCH when the topic
# is set for the change.
if [ -z "${GERRIT_TOPIC:-}" ] ; then
    refspec="${commit_hash}:refs/for/${GERRIT_BRANCH}"
else
    refspec="${commit_hash}:refs/for/${GERRIT_BRANCH}%topic=${GERRIT_TOPIC}"
fi

echo >&2 "Pushing to OpenDev"

# do not fail if git push fails as in case of no new changes we want to succeed. See below.
set +o pipefail

git push --no-thin "$opendev_remote_url" "$refspec" 2>&1 | tee push_result.txt
push_result=${PIPESTATUS[0]}

# make the job a success if the above git push fails due to no new changes are needed
# to be created upstream. This will be useful when we switch to automatic triggering
# of the push-upstream for each patch set and jobs on different commits in a same chain
# will race with each other to push parts of the chain
if [ $push_result -ne 0 ]; then
    grep '(no new changes)' push_result.txt
fi
