#!/bin/bash
#
# Script which can be run on new autobuilder workers to check all needed configuration is present.
# Designed to be run in a repo where bitbake/oe-core are already present.
#
# SPDX-License-Identifier: GPL-2.0-only
#
# Todo
# Add testtools/subunit import test
# Add python3-git test
# Add pigz test
# vnc tests/checkvnc?
# test sendmail works (for QA email notification)
# test error report submission works
# test buildistory git repo works?
#

if [ ! -x $HOME/yocto-autobuilder-helper/scripts/checkvnc ]; then
    echo "$HOME/yocto-autobuilder-helper should be created."
    exit 1
fi
$HOME/yocto-autobuilder-helper/scripts/checkvnc

. ./oe-init-build-env > /dev/null
if [ "$?" != "0" ]; then
    exit 1
fi
git config --global user.name > /dev/null
if [ "$?" != "0" ]; then
    echo "Please set git config --global user.name"
    exit 1
fi
git config --global user.email > /dev/null
if [ "$?" != "0" ]; then
    echo "Please set git config --global user.email"
    exit 1
fi
python3 -c "import jinja2"
if [ "$?" != "0" ]; then
    echo "Please ensure jinja2 is available"
    exit 1
fi
bitbake -p
if [ "$?" != "0" ]; then
    echo "Bitbake parsing failed"
    exit 1
fi

WATCHES=$(PATH="/sbin:/usr/sbin:$PATH" sysctl fs.inotify.max_user_watches -n)
if (( $WATCHES < 65000 )); then
    echo 'Need to increase watches (echo fs.inotify.max_user_watches=65536 | sudo tee -a /etc/sysctl.conf'
    exit 1
fi
OPEN_FILES=$(ulimit -n)
if (( $OPEN_FILES < 65535 )); then
    echo 'Increase maximum open files in /etc/security/limits.conf'
    echo '*            soft    nofile           131072'
    echo '*            hard    nofile           131072'
    exit 1
fi
MAX_PROCESSES=$(ulimit -u)
if (( $MAX_PROCESSES < 514542 )); then
    echo 'Increase maximum user processes in /etc/security/limits.conf'
    echo '*            hard    nproc           515294'
    echo '*            soft    nproc           514543'
    exit 1
fi

mkdir -p tmp/deploy/images/qemux86-64
pushd tmp/deploy/images/qemux86-64
if [ ! -e core-image-minimal-qemux86-64.ext4 ]; then
    wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.ext4
fi
if [ ! -e core-image-minimal-qemux86-64.qemuboot.conf ]; then
    wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/core-image-minimal-qemux86-64.qemuboot.conf
fi
if [ ! -e bzImage-qemux86-64.bin ]; then
    wget http://downloads.yoctoproject.org/releases/yocto/yocto-4.0/machines/qemu/qemux86-64/bzImage-qemux86-64.bin
fi
popd
bitbake qemu-helper-native
DISPLAY=:1 runqemu serialstdio qemux86-64
if [ "$?" != "0" ]; then
    echo "Unable to use runqemu"
    exit 1
fi
DISPLAY=:1 runqemu serialstdio qemux86-64 kvm
if [ "$?" != "0" ]; then
    echo "Unable to use runqemu with kvm"
    exit 1
fi
