#!/bin/bash
#
# Copyright OpenEmbedded Contributors
#
# 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
