Add DOCKER_REPO/REF to image directives file

Sriov-cni and sriov-network-device-plugin are the first two in what
might be a long list of third party packages that provide their own
Dockerfile.

This update extend the images directives file syntax by introducing
'DOCKER_REPO=<url>' and 'DOCKER_REF=<git_ref>'. The DOCKER_REPO will
be cloned into a working directory, the DOCKER_REF checked out,
the Dockerfile found and passed to docker build.

Change-Id: Iea5eae32bd245557a4b02c9825297343a001e778
Story: 2005208
Task: 33485
Signed-off-by: Scott Little <scott.little@windriver.com>
This commit is contained in:
Scott Little 2019-05-28 12:36:25 -04:00
parent 471afe69b5
commit b8c3be9f3b

View File

@ -86,49 +86,77 @@ function is_empty {
test $# -eq 0
}
function get_loci {
# Use a specific HEAD of loci, to provide a stable builder
local LOCI_REF="432503259f5e624afdabd9dacc9d9b367dd95e96"
#
# get_git: Clones a git into a subdirectory of ${WORKDIR}, and
# leaves you in that directory. On error the directory
# is undefined.
#
function get_git {
local git_repo=${1}
local git_ref=${2:-master}
ORIGWD=${PWD}
local git_name
git_name=$(basename ${git_repo} | sed 's/[.]git$//')
if [ ! -d ${WORKDIR}/loci ]; then
if [ -z ${git_name} ] || \
[ "${git_name}" == "." ] || \
[ "${git_name}" == ".." ] || \
[ "${git_name}" == "*" ]; then
echo "git repo appears to be invalid: ${git_repo}. Aborting..." >&2
return 1
fi
if [ ! -d ${WORKDIR}/${git_name} ]; then
cd ${WORKDIR}
git clone --recursive https://github.com/openstack/loci.git
git clone --recursive ${git_repo}
if [ $? -ne 0 ]; then
echo "Failed to clone loci. Aborting..." >&2
echo "Failed to clone ${git_repo}. Aborting..." >&2
return 1
fi
cd loci
git checkout ${LOCI_REF}
cd $git_name
git checkout ${git_ref}
if [ $? -ne 0 ]; then
echo "Failed to checkout loci base ref: ${LOCI_REF}" >&2
echo "Failed to checkout '${git_name}' base ref: ${git_ref}" >&2
echo "Aborting..." >&2
return 1
fi
else
cd ${WORKDIR}/loci
local cur_head
cur_head=$(git rev-parse HEAD)
cd ${WORKDIR}/${git_name}
if [ "${cur_head}" != "${LOCI_REF}" ]; then
git fetch
if [ $? -ne 0 ]; then
echo "Failed to fetch loci. Aborting..." >&2
return 1
fi
git fetch
if [ $? -ne 0 ]; then
echo "Failed to fetch '${git_name}'. Aborting..." >&2
return 1
fi
git checkout ${LOCI_REF}
if [ $? -ne 0 ]; then
echo "Failed to checkout loci base ref: ${LOCI_REF}" >&2
echo "Aborting..." >&2
return 1
fi
git checkout ${git_ref}
if [ $? -ne 0 ]; then
echo "Failed to checkout '${git_name}' base ref: ${git_ref}" >&2
echo "Aborting..." >&2
return 1
fi
fi
cd ${ORIGPWD}
return 0
}
function get_loci {
# Use a specific HEAD of loci, to provide a stable builder
local LOCI_REF="432503259f5e624afdabd9dacc9d9b367dd95e96"
local LOCI_REPO="https://github.com/openstack/loci.git"
local ORIGWD=${PWD}
get_git ${LOCI_REPO} ${LOCI_REF}
if [ $? -ne 0 ]; then
echo "Failed to clone or update loci. Aborting..." >&2
cd ${ORIGWD}
return 1
fi
cd ${ORIGWD}
return 0
}
@ -353,6 +381,10 @@ function build_image_docker {
#
local LABEL
LABEL=$(source ${image_build_file} && echo ${LABEL})
local DOCKER_REPO
DOCKER_REPO=$(source ${image_build_file} && echo ${DOCKER_REPO})
local DOCKER_REF
DOCKER_REF=$(source ${image_build_file} && echo ${DOCKER_REF})
if is_in ${PROJECT} ${SKIP[@]} || is_in ${LABEL} ${SKIP[@]}; then
echo "Skipping ${LABEL}"
@ -367,7 +399,26 @@ function build_image_docker {
echo "Building ${LABEL}"
local docker_src
docker_src=$(dirname ${image_build_file})/docker
if [ -z "DOCKER_REPO" ]; then
docker_src=$(dirname ${image_build_file})/docker
else
local ORIGWD=${PWD}
echo "get_git '${DOCKER_REPO}' '${DOCKER_REF}'"
get_git "${DOCKER_REPO}" "${DOCKER_REF}"
if [ $? -ne 0 ]; then
echo "Failed to clone or update ${DOCKER_REPO}. Aborting..." >&2
cd ${ORIGWD}
return 1
fi
local DOCKER_FILE="${PWD}/Dockerfile"
if [ ! -f ${DOCKER_FILE} ]; then
DOCKER_FILE=$(find ${PWD} -type f -name Dockerfile | head -n 1)
fi
docker_src=$(dirname ${DOCKER_FILE})
cd ${ORIGWD}
fi
# Check for a Dockerfile
if [ ! -f ${docker_src}/Dockerfile ]; then