#!/bin/bash

# This build script is for running the Jenkins builds using docker.
#
# It expects a few variables which are part of Jenkins build job matrix:
#   target = palmetto|qemu|habanero|firestone|garrison
#   distro = ubuntu|fedora
#   WORKSPACE = Random Number by Default

# Trace bash processing
set -x

# Default variables
target=${target:-palmetto}
distro=${distro:-ubuntu}
WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}}

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

# if there is no open-power directory clone in master into workspace
if [ ! -e "${WORKSPACE}"/op-build ]; then
        echo "Clone in openpower master to ${WORKSPACE}/op-build"
        git clone --recursive https://github.com/open-power/op-build "${WORKSPACE}"/op-build
fi

# Determine the architecture
ARCH=$(uname -m)

# Determine the prefix of the Dockerfile's base image
case ${ARCH} in
    "ppc64le")
        DOCKER_BASE="ppc64le/"
        ;;
    "x86_64")
        DOCKER_BASE=""
        ;;
    "aarch64")
        DOCKER_BASE="arm64v8/"
        ;;
    *)
        echo "Unsupported system architecture(${ARCH}) found for docker image"
        exit 1
esac


# Configure docker build
if [[ "${distro}" == fedora ]];then

  Dockerfile=$(cat << EOF
FROM ${DOCKER_BASE}fedora:latest

RUN dnf --refresh repolist && dnf install -y \
	bc \
	bison \
	bzip2 \
	cpio \
	cscope \
	ctags \
	expat-devel \
	findutils \
	flex \
	gcc-c++ \
	git \
	libxml2-devel \
	ncurses-devel \
	openssl-devel \
	patch \
	perl \
	perl-bignum \
	"perl(Digest::SHA1)" \
	"perl(Env)" \
	"perl(Fatal)" \
	"perl(Thread::Queue)" \
	"perl(XML::SAX)" \
	"perl(XML::Simple)" \
	"perl(YAML)" \
	"perl(XML::LibXML)" \
	python \
	python3 \
	tar \
	unzip \
	vim \
	wget \
	which \
	zlib-devel \
	zlib-static \
	iputils-ping

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}

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

elif [[ "${distro}" == ubuntu ]]; then

  Dockerfile=$(cat << EOF
FROM ${DOCKER_BASE}ubuntu:latest

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -yy \
	bc \
	bison \
	build-essential \
	cscope \
	cpio \
	ctags \
	flex \
	g++ \
	git \
	libssl-dev \
	libexpat-dev \
	libz-dev \
	libxml-sax-perl \
	libxml-simple-perl \
	libxml2-dev \
	libxml2-utils \
	language-pack-en \
	python \
	python3 \
	texinfo \
	unzip \
	vim-common \
	wget\
	xsltproc \
        libssl-dev \
	iputils-ping

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}

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

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

mkdir -p "${WORKSPACE}"

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

set -x

# This ensures that the alias set in op-build-env is
# avalaible in this script
shopt -s expand_aliases

cd "${WORKSPACE}"/op-build

# Source our build env
. op-build-env

# Configure
op-build "${target}_defconfig"

# Kick off a build
op-build

EOF_SCRIPT

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

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

# Create link to images for archiving
ln -sf "${WORKSPACE}"/op-build/output/images "${WORKSPACE}"/images

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