#!/bin/bash

set -e
set -x

if [[ ${KOKORO_JOB_NAME} =~ release$ ]]; then
  readonly BUILD_TYPE=release
elif [[ ${KOKORO_JOB_NAME} =~ continuous$ ]]; then
  readonly BUILD_TYPE=continuous
elif [[ ${KOKORO_JOB_NAME} =~ headless$ ]]; then
  readonly BUILD_TYPE=headless
else
  echo "Invalid job name: ${KOKORO_JOB_NAME}" && exit 1
fi

# Sourcing this only works in the directory above build...
pushd git
source build/setup.sh
popd

export PREBUILT_DOCKER_ROOT=${KOKORO_GFILE_DIR}
export FETCH_PBUILDER_DIRECTORY=${KOKORO_GFILE_DIR}
export ROOTFS_RAW_CACHE_DIRECTORY=${KOKORO_GFILE_DIR}
export FETCH_PACKAGES=false

# Install haveged on the host to provide extra entropy.
sudo apt-get install -y haveged
sudo /etc/init.d/haveged start

case "${BUILD_TYPE}" in
  headless)
    export HEADLESS_BUILD=true
    ;;
esac

ARCHES="arm64"

for arch in ${ARCHES}
do
  export USERSPACE_ARCH=${arch}
  m docker-all
  m docker-sdcard
  unset USERSPACE_ARCH
done

m docker-recovery

pushd ${ROOTDIR}
python3 ${ROOTDIR}/build/create_release_manifest.py \
  -i ${ROOTDIR}/manifest/enterprise.xml \
  -o ${PRODUCT_OUT}/manifest.xml
popd

ARTIFACTS+="${ROOTDIR}/board/flash.sh "
ARTIFACTS+="${PRODUCT_OUT}/u-boot.imx "
ARTIFACTS+="${PRODUCT_OUT}/manifest.xml "
ARTIFACTS+="${PRODUCT_OUT}/recovery.img "
ARTIFACTS+="${PRODUCT_OUT}/partition-table-8gb.img "
ARTIFACTS+="${PRODUCT_OUT}/partition-table-16gb.img "
ARTIFACTS+="${PRODUCT_OUT}/partition-table-64gb.img "

for arch in ${ARCHES}
do
  ARTIFACTS+="${PRODUCT_OUT}/boot_${arch}.img "
  ARTIFACTS+="${PRODUCT_OUT}/rootfs_${arch}.img "
  ARTIFACTS+="${PRODUCT_OUT}/sdcard_${arch}.img "
done

# Check existence of artifacts, exit if one is missing
for artifact in ${ARTIFACTS}
do
  if [[ ! -f ${artifact} ]]; then
    echo "${artifact} not found!"
    exit 1
  fi
done

# Copy all artifacts to KOKORO_ARTIFACTS_DIR
for artifact in ${ARTIFACTS}
do
  cp ${artifact} ${KOKORO_ARTIFACTS_DIR}
  chmod -x ${KOKORO_ARTIFACTS_DIR}/$(basename ${artifact})
done
