#!/bin/bash
# -----------------------------------------------------------------------------
# Tool to perform a cell-based remote bazel build using a borrowed test cell.
# -----------------------------------------------------------------------------

# Check environment
[ -z "$OCN" ] && echo "Cell environment not established" && exit 1

runTests=false
useCache=false
noBuild=false

while getopts b:cnt?h o; do
    case "$o" in
        b) branch=$OPTARG;;
        c) useCache=true;;
        n) noBuild=true;;
        t) runTests=true;;
        *) echo "usage: cell-build [-b branch] [-cnt] [commitHash]" >&2; exit 1;;
    esac
done

let OPC=$OPTIND-1
shift $OPC

! git status &>/dev/null && echo "Not in a git workspace. Exiting..." && exit $?

# Check arguments and environment
branch=${branch:-origin/master}
baseCommit=${1:-$(git log | grep $branch | head -n1 | cut -d\  -f2)}

# Create a patch file
git diff $baseCommit > /tmp/$baseCommit.patch

# Copy patch file to the remote build machine
scp /tmp/$baseCommit.patch $ONOS_USER@$OCN:/tmp

ssh -t -t $ONOS_USER@$OCN "
    source ~/.bash_aliases
    cd \$ONOS_ROOT

    # Clean-up the workspace and stash away any changes.
    git clean -f
    git stash

    # Make sure the remote build machine is on the same commit hash as the local one
    remoteCommit=\$(git log -n 1 | head -n1 | cut -d\  -f2)
    if [ \"\$remoteCommit\" != \"$baseCommit\" ]; then
        git checkout master
        git pull --no-stat
        git checkout $baseCommit
    fi

    # Apply the patch if necessary
    [ -s /tmp/$baseCommit.patch ] && git apply /tmp/$baseCommit.patch

    # Promote the common bazelrc file to enable running against the cells cache
    [ $useCache = true ] && cp ~/.bazelrc .bazelrc

    # Run the build (neutralizing known environment mutations in SSH sessions)
    set -e
    [ $noBuild = false ] && SHLVL=1 SSH_CLIENT=0 SSH_CONNECTION=0 bazel build onos
    [ $runTests = true ] && bazel query 'tests(//...)' | SHLVL=1 SSH_CLIENT=0 SSH_CONNECTION=0 xargs bazel test
"
