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!"