#!/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 changes that are pushed to Nordix Gerrit and push upstream to ONAP
# 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 -o errexit
set -o nounset
set -o pipefail

cd $WORKSPACE
echo "Retrieving information from commit to push towards ONAP"
project=$(git config --local remote.origin.url | awk -F "29418/" '{print $2}')
message=$(git show -s --pretty=%B | grep -vi 'Signed-off-by')
username=$(git show -s --pretty=%an)

pattern=" "
if [[ "$username" =~ $pattern ]]
then
    echo "Incorrect username, use Linux Foundation ID as git user.name when pushing to Nordix"
    exit 1
fi

echo "Setting user name and email"
git config user.email $(git show -s --pretty=%ae)
git config user.name $username

echo "Checking out branch on master with new changes"
git reset HEAD~1
git checkout -b delivery_branch origin/master

echo '[remote "upstream"]' >> $WORKSPACE/.git/config
echo "  url = ssh://$username@gerrit.onap.org:29418/$project.git" >> $WORKSPACE/.git/config
echo "  fetch = +refs/heads/*:refs/remotes/upstream/*" >> $WORKSPACE/.git/config

echo "Committing changes and pushing upstream"
git commit -as -m "$message"
git push upstream HEAD:refs/for/master

retVal=$?
if [[ $retVal -eq 0 ]]
then
  echo "Push upstream to ONAP succeeded"
else
  echo "Push upstream to ONAP failed"
  exit 2
fi
