blob: 26f8ec224381603ebf01f9cffe23588d596099fe [file] [log] [blame]
#!/bin/bash
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
# This is the test setup script for generating an Android image based off the
# current working build tree. make is called to relink the object files and
# generate the new Android image to be flashed. The device is then rebooted into
# bootloader mode and fastboot is used to flash the new image. The device is
# then rebooted so the user's test script can run.
#
# This script is intended to be used by binary_search_state.py, as
# part of the binary search triage on the Android source tree. It should
# return '0' if the setup succeeds; and '1' if the setup fails (the image
# could not build or be flashed).
#
source android/common.sh
manual_flash()
{
echo
echo "Please manually flash the built image to your device."
echo "To do so follow these steps:"
echo " 1. Boot your device into fastboot mode."
echo " 2. cd to '${BISECT_ANDROID_SRC}'"
echo " 2. Run 'source build/envsetup.sh'"
echo " 3. Run 'lunch'"
echo " 4. Run '${ADB_DEVICE}fastboot flashall -w'"
echo "Or see the following link for more in depth steps:"
echo "https://source.android.com/source/running.html"
echo
while true; do
sleep 1
read -p "Was the flashing of the image successful? " choice
case $choice in
[Yy]*) return 0;;
[Nn]*) return 1;;
*) echo "Please answer y or n.";;
esac
done
}
auto_flash()
{
echo
echo "Please ensure your Android device is on and in fastboot mode so"
echo "fastboot flash may run."
echo
sleep 1
read -p $'Press enter to continue and retry the flashing' notused
echo " ${ADB_DEVICE}fastboot flashall -w"
fastboot flashall -w
}
flash()
{
echo
echo "FLASHING"
echo "Rebooting device into fastboot mode."
echo " ${ADB_DEVICE}adb reboot bootloader"
adb reboot bootloader
echo
echo "Waiting for device to reach fastboot mode."
echo "(will timeout after 60 seconds)"
# fastboot will block indefinitely until device comes online.
# Grab random variable to test if device is online.
# If takes >60s then we error out and ask the user for help.
timeout 60 fastboot getvar 0 2>/dev/null
fastboot_flash_status=$?
if [[ ${fastboot_flash_status} -eq 0 ]]; then
echo
echo "Flashing image."
echo " ${ADB_DEVICE}fastboot flashall -w"
fastboot flashall -w
fastboot_flash_status=$?
fi
while [[ ${fastboot_flash_status} -ne 0 ]] ; do
echo
echo "fastboot flash has failed! From here you can:"
echo "1. Debug and/or flash manually"
echo "2. Retry flashing automatically"
echo "3. Abort this installation and skip this image"
echo "4. Abort this installation and mark test as failed"
sleep 1
read -p "Which method would you like to do? " choice
case $choice in
1) manual_flash && break;;
2) auto_flash && break;;
3) return 125;;
4) return 1;;
*) echo "Please answer 1, 2, 3, or 4.";;
esac
done
}
# Number of jobs make will use. Can be customized and played with.
MAKE_JOBS=${BISECT_NUM_JOBS}
# Set ADB_DEVICE to "ANDROID_SERIAL=${ANDROID_SERIAL}" or "" if device id not
# set. This is used for debugging info so users can confirm which device
# commands are being sent to.
ADB_DEVICE=${ANDROID_SERIAL:+"ANDROID_SERIAL=${ANDROID_SERIAL} "}
echo
echo "INSTALLATION BEGIN"
echo
cd ${BISECT_ANDROID_SRC}
echo "BUILDING IMAGE"
make -j ${MAKE_JOBS}
make_status=$?
exit_val=0
if [[ ${make_status} -eq 0 ]]; then
flash
exit_val=$?
else
echo "ERROR:"
echo "make returned a non-zero status: ${make_status}. Skipping image..."
exit_val=1
fi
exit ${exit_val}