github.com/git-lfs/git-lfs@v2.5.2+incompatible/docker/run_dockers.bsh (about)

     1  #!/usr/bin/env bash
     2  
     3  # Usage:
     4  #  ./run_dockers.bsh - Run all the docker images
     5  #  ./run_dockers.bsh centos_6 centos_7 - Run only CentOS 6 & 7 image
     6  #  ./run_dockers.bsh centos_6 -- bash #Runs bash in the CentOS 6 docker
     7  #
     8  # Special Environmet Variables
     9  #  REPO_HOSTNAME - Override the hostname for all the repos generated/tested
    10  #  DOCKER_AUTOPULL - Default 1. If set to 0, it will not build docker images
    11  #                before running
    12  #  AUTO_REMOVE - Default 1. If set to 0, it will not automatically delete the
    13  #                docker instance when done. This can be useful for a post mortem
    14  #                analysis. Just make sure you clean up the docker instances
    15  #                manually
    16  
    17  set -eu
    18  
    19  #Mingw32 auto converts /drive/dir/blah to drive:\dir\blah ... Can't have that.
    20  if [[ `uname` == MINGW* ]]; then
    21    MINGW_PATCH='/'
    22  else
    23    MINGW_PATCH=''
    24  fi
    25  
    26  CUR_DIR=$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)
    27  REPO_DIR=$(cd ${CUR_DIR}/..; pwd)
    28  PACKAGE_DIR=${REPO_DIR}/repos
    29  mkdir -p ${PACKAGE_DIR}/centos || :
    30  mkdir -p ${PACKAGE_DIR}/debian || :
    31  
    32  #If you are not in docker group and you have sudo, default value is sudo
    33  : ${SUDO=`if ( [ ! -w /var/run/docker.sock ] && id -nG | grep -qwv docker && [ "${DOCKER_HOST:+dh}" != "dh" ] ) && which sudo > /dev/null 2>&1; then echo sudo; fi`}
    34  
    35  function split_image_name()
    36  { #$1 - image dockerfile
    37    #sets IMAGE_NAME to the basename of the dir containing the docker file
    38    #sets IMAGE_INFO to be the array name following my pattern
    39    local IFS=_
    40    IMAGE_INFO=($1)
    41  }
    42  
    43  # Parse Arguments
    44  IMAGES=()
    45  while [[ $# > 0 ]]; do
    46    if [ "$1" == "--" ]; then
    47      shift
    48      DOCKER_CMD="${@}"
    49      break
    50    else
    51      IMAGES+=("$1")
    52    fi
    53    shift
    54  done
    55  
    56  if [[ ${#IMAGES[@]} == 0 ]]; then
    57    IMAGES=(centos_6 centos_7 debian_7 debian_8 debian_9)
    58  fi
    59  
    60  mkdir -p "${PACKAGE_DIR}"
    61  #Run docker to build pacakges
    62  for IMAGE_NAME in "${IMAGES[@]}"; do
    63    split_image_name "${IMAGE_NAME}" #set IMAGE_NAME and IMAGE_INFO
    64  
    65    #Auto pull docker unless DOCKER_AUTOPULL=0
    66    if [[ ${DOCKER_AUTOPULL-1} != 0 ]]; then
    67      $SUDO docker pull gitlfs/build-dockers:${IMAGE_NAME}
    68    fi
    69  
    70    #It CAN'T be empty () with set -u... So I put some defaults in here
    71    OTHER_OPTIONS=("-it")
    72  
    73    if [ "${AUTO_REMOVE-1}" == "1" ]; then
    74      OTHER_OPTIONS+=("--rm")
    75    fi
    76  
    77    if [ -s ${CUR_DIR}/${IMAGE_NAME}.key ]; then
    78      CONTAINER_NAME=git-lfs-gpg ${CUR_DIR}/gpg-agent_preload.bsh
    79      OTHER_OPTIONS+=("--volumes-from" "git-lfs-gpg")
    80      OTHER_OPTIONS+=("-v" "${CUR_DIR}/${IMAGE_NAME}.key:${MINGW_PATCH}/tmp/${IMAGE_NAME}.key")
    81      OTHER_OPTIONS+=("-e" "$(docker exec git-lfs-gpg cat ${MINGW_PATCH}/tmp/gpg-agent/gpg_agent_info)")
    82      #Do I need this? Or can I get away with hardcoding???
    83      #GPG_AGENT_INFO=/tmp/gpg-agent/S.gpg-agent:1:1
    84    fi
    85  
    86    FINAL_UID=$(id -u)
    87    FINAL_GID=$(id -g)
    88    if [[ $FINAL_UID == 0 ]]; then
    89      FINAL_UID=${SUDO_UID-}
    90    fi
    91    if [[ $FINAL_GID == 0 ]]; then
    92      FINAL_GID=${SUDO_GID-}
    93    fi
    94  
    95    echo Compiling LFS in docker image ${IMAGE_NAME}
    96    IMAGE_REPO_DIR="${PACKAGE_DIR}"/"${IMAGE_INFO[0]}"/"${IMAGE_INFO[1]}"
    97    $SUDO docker run "${OTHER_OPTIONS[@]}" ${DOCKER_OTHER_OPTIONS-} \
    98                     -e REPO_HOSTNAME=${REPO_HOSTNAME:-git-lfs.github.com} \
    99                     -e FINAL_UID=${FINAL_UID} \
   100                     -e FINAL_GID=${FINAL_GID} \
   101                     -v "${MINGW_PATCH}${REPO_DIR}:/src" \
   102                     -v "${MINGW_PATCH}${IMAGE_REPO_DIR}:/repo" \
   103                     gitlfs/build-dockers:${IMAGE_NAME} ${DOCKER_CMD-}
   104  
   105  done
   106  
   107  echo "Docker run completed successfully!"