#!/bin/bash
set -ex
set -o pipefail
# This ugly hack is a cross-platform (Linux/Mac/Windows+MSYS) way to get the
# absolute path to the root of the update-verify source tree
pushd `dirname $0` &>/dev/null
UV_SRC=$(dirname $(pwd))
popd &>/dev/null
export UV_SRC
PYTHON='python3'
VERIFY_CONFIG="$MOZ_FETCHES_DIR/update-verify.cfg"
WORKSPACE_DIR="${WORKSPACE_DIR:-$PWD/workspace}"
mkdir -p "$WORKSPACE_DIR"

while [ "$#" -gt 0 ]; do
  case $1 in
      # Parse total-chunks
      --total-chunks=*) chunks="${1#*=}"; shift 1;;
      --total-chunks) chunks="${2}"; shift 2;;

      # Parse this-chunk
      --this-chunk=*) thisChunk="${1#*=}"; shift 1;;
      --this-chunk) thisChunk="${2}"; shift 2;;

      # Stop if other parameters are sent
      *) echo "Unknown parameter: ${1}"; exit 1;;
  esac
done

# Validate parameters
if [ -z "${chunks}" ]; then echo "Required parameter: --total-chunks"; exit 1; fi
if [ -z "${thisChunk}" ]; then echo "Required parameter: --this-chunk"; exit 1; fi

# release promotion
if [ -n "$CHANNEL" ]; then
  EXTRA_PARAMS="--verify-channel $CHANNEL"
else
  EXTRA_PARAMS=""
fi
$PYTHON $UV_SRC/scripts/chunked-verify.py --chunks $chunks --this-chunk $thisChunk \
--verify-config $VERIFY_CONFIG --diff-summary $WORKSPACE_DIR/diff-summary.log $EXTRA_PARAMS \
2>&1 | tee $WORKSPACE_DIR/verify_log.txt

print_failed_msg()
{
  echo "-------------------------"
  echo "This run has failed, see the above log"
  echo
  return 1
}

print_warning_msg()
{
  echo "-------------------------"
  echo "This run has warnings, see the above log"
  echo
  return 2
}

set +x

echo "Scanning log for failures and warnings"
echo "--------------------------------------"

# Test for a failure, note we are set -e.
# Grep returns 0 on a match and 1 on no match
# Testing for failures first is important because it's OK to to mark as failed
# when there's failures+warnings, but not OK to mark as warnings in the same
# situation.
( ! grep 'TEST-UNEXPECTED-FAIL:' $WORKSPACE_DIR/verify_log.txt ) || print_failed_msg
( ! grep 'WARN:' $WORKSPACE_DIR/verify_log.txt ) || print_warning_msg

echo "-------------------------"
echo "All is well"
