#!/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 ONAP Gerrit.
# Pre-requisites for script to run successfully:
# - Author name in Nordix Gerrit equals LFID
#   i.e. need to run "git config --global user.name <LFID>"
# - infra public key on build server needs to be added to your users SSH
#   Public Keys in ONAP Gerrit
#
set -euxo pipefail

cd "$WORKSPACE"

onap_gerrit_base='gerrit.onap.org:29418'
nordix_gerrit_rest='https://gerrit.nordix.org'
echo >&2 "Collecting information about what and how to push towards ONAP"

# 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 onap/<onap-project>
onap_project=$(echo "$GERRIT_PROJECT" | cut -d/ -f2- )

# Unfortunately for the some ONAP users, the Nordix Gerrit username don't match
# the ONAP Gerrit username as the old script use the git author name as
# the user which will push the change to ONAP Gerrit.
username=$(git show -s --pretty=%an)

onap_remote_url="ssh://$username@$onap_gerrit_base/$onap_project"

# GERRIT_BRANCH is the _intended_ branch of the commit under review
# E.g. git push HEAD:refs/for/master => GERRIT_BRANCH='master'
refspec="${commit_hash}:refs/for/${GERRIT_BRANCH}"

# When 'push-upstream wip' is specified the Work-In-Progress flag is set to change on push to upstream
if [[ "${GERRIT_EVENT_TYPE:-}" == "comment-added" &&  "${GERRIT_EVENT_COMMENT_TEXT:-}" =~ "push-upstream wip"  ]] ; then
    wip_option="--push-option wip"
# When 'push-upstream ready' is specified the Work-In-Progress flag from a change is removed on push to upstream
elif [[ "${GERRIT_EVENT_TYPE:-}" == "comment-added" &&  "${GERRIT_EVENT_COMMENT_TEXT:-}" =~ "push-upstream ready"  ]] ; then
    wip_option="--push-option ready"
fi

# When the topic is set for a change the GERRIT_TOPIC is push upstream using git option
if [ -n "${GERRIT_TOPIC:-}" ] ; then
    topic_option="--push-option topic=${GERRIT_TOPIC}"
fi

echo >&2 "Pushing to ONAP"

# 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 ${topic_option:-} ${wip_option:-} "$onap_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

# When a push-upstream job completes successfully.
# The link to the corresponding upstream gerrit review is posted
# on the Nordix gerrit using Gerrit API and infra user HTTP API Key.
if grep -q http push_result.txt; then
    URL=$(sed -ne 's/.*\(http\S*\).*/\1/p' < push_result.txt)
    echo "URL: $URL"
    curl --request 'POST' -H 'Content-Type:application/json' \
     "${nordix_gerrit_rest}/a/changes/${GERRIT_CHANGE_NUMBER}/revisions/${GERRIT_PATCHSET_NUMBER}/review" \
     --user "${GERRIT_USER}:${GERRIT_API_KEY}" \
     --data "{\"message\": \"UPSTREAM URL: ${URL}\"}"
fi
