#!/usr/bin/env bash

export DEBIAN_FRONTEND=noninteractive

apt-get update
apt-get install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev  \
    libc6-dev-i386 libncurses5 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev  \
    libxml2-utils xsltproc unzip fontconfig python3 npm pip e2fsprogs python3-protobuf \
    fonts-dejavu diffutils rsync ccache

npm install --global yarn

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
ln -s /usr/bin/python3 /usr/bin/python
export PATH=~/bin:$PATH

set -e

retry() {
  set +e
  local max_attempts=${ATTEMPTS-5}
  local timeout=${TIMEOUT-1}
  local attempt=0
  local exitCode=0

  while [[ $attempt < $max_attempts ]]
  do
    "$@"
    exitCode=$?

    if [[ $exitCode == 0 ]]
    then
      break
    fi

    echo "Failure! Retrying ($*) in $timeout.."
    sleep "${timeout}"
    attempt=$(( attempt + 1 ))
    timeout=$(( timeout * 2 ))
  done

  if [[ $exitCode != 0 ]]
  then
    echo "Failed too many times! ($*)"
  fi

  set -e

  return $exitCode
}

DEVICE=$1
RELEASE=$2
TARGET=$3
BRANCH=$4

git config --global user.email "seedvault@example.com"
git config --global user.name "Seedvault CI"

retry curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

mkdir -p /aosp
cd /aosp
retry yes | repo init -u https://android.googlesource.com/platform/manifest -b "$BRANCH" --depth=1

mkdir -p .repo/local_manifests
cat << EOF > .repo/local_manifests/seedvault.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote name="seedvault"
          fetch="https://github.com/$CIRRUS_REPO_OWNER" />

  <project name="seedvault" path="external/seedvault"
          revision="$CIRRUS_CHANGE_IN_REPO" remote="$CIRRUS_REPO_NAME" />

</manifest>
EOF

retry repo sync -c -j8 --fail-fast --force-sync

# Cirrus CI seems to (possibly) reschedule tasks that aren't sending out logs for a while?
while true; do echo "Still building..."; sleep 30; done &

source build/envsetup.sh
lunch $DEVICE-$RELEASE-$TARGET
m -j1 nothing
m -j2 Seedvault

mv /aosp/out/target/product/generic_arm64/system/system_ext/priv-app/Seedvault/Seedvault.apk "$CIRRUS_WORKING_DIR"
