#!/bin/bash

# This build script is for running the Jenkins builds using docker.
#

# Debug
if grep -q debug <<< "$@"; then
	set -x
fi
set -o errexit
set -o pipefail
set -o nounset

# Default variables
WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}}
http_proxy=${http_proxy:-}
ENDIANESS=${ENDIANESS:-le}
PROXY=""

usage(){
	cat << EOF_USAGE
Usage: $0 [options]

Options:
--endianess <le|be>	build an LE or BE initramfs

Short Options:
-e			same as --endianess

EOF_USAGE
	exit 1
}

# Arguments
CMD_LINE=$(getopt -o d,e: --longoptions debug,endianess: -n "$0" -- "$@")
eval set -- "${CMD_LINE}"

while true ; do
	case "${1}" in
		-e|--endianess)
			if [[ "${2,,}" == "be" ]]; then
				ENDIANESS=""
			fi
			shift 2
			;;
		-d|--debug)
			set -x
			shift
			;;
		--)
			shift
			break
			;;
		*)
			usage
			;;
	esac
done

# Timestamp for job
echo "Build started, $(date)"

# Configure docker build
if [[ -n "${http_proxy}" ]]; then
	PROXY="RUN echo \"Acquire::http::Proxy \\"\"${http_proxy}/\\"\";\" > /etc/apt/apt.conf.d/000apt-cacher-ng-proxy"
fi

Dockerfile=$(cat << EOF
FROM ubuntu:18.04

${PROXY}

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -yy \
	bc \
	build-essential \
	ccache \
	cpio \
	git \
	python \
	unzip \
	wget \
	rsync \
	iputils-ping \
	locales

RUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER}
RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS[0]} ${USER}

RUN locale-gen en_AU.utf8

USER ${USER}
ENV HOME ${HOME}
RUN /bin/bash
EOF
)

# Build the docker container
if ! docker build -t initramfs-build/ubuntu - <<< "${Dockerfile}" ; then
	echo "Failed to build docker container."
	exit 1
fi

# Create the docker run script
export PROXY_HOST=${http_proxy/#http*:\/\/}
export PROXY_HOST=${PROXY_HOST/%:[0-9]*}
export PROXY_PORT=${http_proxy/#http*:\/\/*:}

mkdir -p "${WORKSPACE}"

cat > "${WORKSPACE}/build.sh" << EOF_SCRIPT
#!/bin/bash

set -x

export http_proxy=${http_proxy}
export https_proxy=${http_proxy}
export ftp_proxy=${http_proxy}

cd "${WORKSPACE}"

# Go into the linux directory (the script will put us in a build subdir)
cd buildroot && make clean

# Build PPC64 defconfig
cat >> configs/powerpc64${ENDIANESS}_openpower_defconfig << EOF_BUILDROOT
BR2_powerpc64${ENDIANESS}=y
BR2_CCACHE=y
BR2_SYSTEM_BIN_SH_BASH=y
BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_XZ=y
BR2_PACKAGE_IPMITOOL=y
# BR2_TARGET_ROOTFS_TAR is not set
EOF_BUILDROOT

# Build buildroot
export BR2_DL_DIR="${HOME}/buildroot_downloads"
make powerpc64${ENDIANESS}_openpower_defconfig
make

EOF_SCRIPT

chmod a+x "${WORKSPACE}/build.sh"

# Run the docker container, execute the build script we just built
docker run \
	--cap-add=sys_admin \
	--net=host \
	--rm=true \
	-e WORKSPACE="${WORKSPACE}" \
	--user="${USER}" \
	-w "${HOME}" \
	-v "${HOME}":"${HOME}" \
	-t initramfs-build/ubuntu \
	"${WORKSPACE}/build.sh"

# Timestamp for build
echo "Build completed, $(date)"

