blob: 1947ee7899e05decdcfdc358017dba577943b4b7 [file] [log] [blame]
#!/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)"