| #!/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="" |
| |
| while getopts b:t?h o; do |
| case "$o" in |
| b) branch=$OPTARG;; |
| t) runTests=true;; |
| *) echo "usage: cell-build [-b branch] [-t] [commitHash]" >&2; exit 1;; |
| esac |
| done |
| |
| let OPC=$OPTIND-1 |
| shift $OPC |
| |
| # 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 |
| git checkout $baseCommit |
| fi |
| |
| # Apply the patch if necessary |
| [ -s /tmp/$baseCommit.patch ] && git apply /tmp/$baseCommit.patch |
| |
| # Run the build (neutralizing known environment mutations in SSH sessions) |
| set -e |
| SHLVL=1 SSH_CLIENT=0 SSH_CONNECTION=0 bazel build onos |
| if [ $runTests = true ]; then |
| bazel query 'tests(//...)' | SHLVL=1 SSH_CLIENT=0 SSH_CONNECTION=0 xargs bazel test |
| fi |
| " |