#!/bin/bash
set -e

echo "Starting $0 at $(date)"

cd "$(dirname $0)"

CHECKOUT_DIR="$(cd ../../.. && pwd)"
OUT_DIR="$CHECKOUT_DIR/out"
if [ "$DIST_DIR" == "" ]; then
  DIST_DIR="$OUT_DIR/dist"
fi
if [ "$MANIFEST" == "" -a "$CHANGE_INFO" != "" ]; then
  export MANIFEST="$DIST_DIR/manifest_${BUILD_NUMBER}.xml"
fi
# move OUT_DIR and DIST_DIR into subdirectories so that if anything deletes them, it doesn't interfere with any files generated by buildbot code
export OUT_DIR="$OUT_DIR/incremental"

# Given a file containing a date as text, echos which week number it is
# Examples: input "2024-01-01" should give output "0", input "2024-01-07" should give output "1", input "2024-01-14" should give output "2"
function getWeekNumber() {
  text="$1"
  dayOfYearWithPrecedingZeros="$(date --date="$text" +"%j")"
  dayOfYear="$(echo $dayOfYearWithPrecedingZeros | sed 's/^0*//')"
  if [ "$dayOfYear" == "" ]; then
    # There is an error that we will catch later
    echo
  else
    echo "$(($dayOfYear / 7))"
  fi
}

function deleteOldOutDir() {
  # file telling when the out dir was created
  createdAtFile=$OUT_DIR/created_at.txt
  # file telling when the out dir was last updated
  updatedAtFile=$OUT_DIR/updated_at.txt
  now="$(date)"

  # if this directory was created a long time ago, delete it
  if [ -e "$createdAtFile" ]; then
    createdAt="$(cat "$createdAtFile")"
    # out dir knows when it was created
    createdWeekNumber="$(getWeekNumber "$createdAt" || true)"
    if [ "$createdWeekNumber" == "" ]; then
      echo "Failed to parse $createdAtFile with text $createdAt" >&2
      rm -f "$createdAtFile"
      exit 1
    fi
    updatedWeekNumber="$(getWeekNumber "$now")"

    if [ "$createdWeekNumber" != "$updatedWeekNumber" ]; then
      echo "Deleting $OUT_DIR because it was created at $createdAt week $createdWeekNumber whereas now is $now week $updatedWeekNumber"
      rm -rf "$OUT_DIR"
    fi
  fi
  mkdir -p "$OUT_DIR"

  # record that this directory was updated
  echo "$now" > "$updatedAtFile"

  # if we haven't recorded when this directory was created, do that too
  if [ ! -e "$createdAtFile" ]; then
    cp "$updatedAtFile" "$createdAtFile"
  fi
}
deleteOldOutDir

mkdir -p "$OUT_DIR"
export DIST_DIR="$DIST_DIR/incremental"
mkdir -p "$DIST_DIR"

# Before we start the build, remove temporary directory contents, needs to match gradlew TMPDIR
rm -fr "$OUT_DIR/tmp"

if echo "$BUILD_NUMBER" | grep "P" >/dev/null; then
  PRESUBMIT=true
else
  PRESUBMIT=false
fi

export USE_ANDROIDX_REMOTE_BUILD_CACHE=gcp

# If we encounter a failure in postsubmit, we try a few things to determine if the failure is
# reproducible
DIAGNOSE_ARG=""
if [ "$PRESUBMIT" == "false" ]; then
  if [ "$BUILD_NUMBER" == "" ]; then
    # This is a local build so we can diagnose without a timeout. The user can cancel it when they're satisfied.
    DIAGNOSE_ARG="--diagnose"
  else
    # This is running on the build server so we should not spend long trying to diagnose it
    DIAGNOSE_ARG="--diagnose --diagnose-timeout 600"
  fi
fi

EXIT_VALUE=0

# Validate translation exports, if present
if ! impl/check_translations.sh; then
  echo check_translations failed
  EXIT_VALUE=1
else
    # Run Gradle
    if impl/build.sh $DIAGNOSE_ARG buildOnServer createAllArchives checkExternalLicenses listTaskOutputs exportSboms \
        "$@"; then
    echo build succeeded
    EXIT_VALUE=0
    else
    echo build failed
    EXIT_VALUE=1
    fi

    # Parse performance profile reports (generated with the --profile option) and re-export the metrics in an easily machine-readable format for tracking
    impl/parse_profile_data.sh
fi

echo "Completing $0 at $(date) with exit value $EXIT_VALUE"

exit "$EXIT_VALUE"
