From b8c3be9f3be7f14a2c7ab87a08f2137916661f90 Mon Sep 17 00:00:00 2001 From: Scott Little Date: Tue, 28 May 2019 12:36:25 -0400 Subject: [PATCH] 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=' and 'DOCKER_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 --- .../build-docker-images/build-stx-images.sh | 105 +++++++++++++----- 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/build-tools/build-docker-images/build-stx-images.sh b/build-tools/build-docker-images/build-stx-images.sh index b4974635..c0e692ae 100755 --- a/build-tools/build-docker-images/build-stx-images.sh +++ b/build-tools/build-docker-images/build-stx-images.sh @@ -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