File: run_dockers.bsh

package info (click to toggle)
git-lfs 3.3.0-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,676 kB
  • sloc: sh: 19,133; makefile: 487; ruby: 228
file content (117 lines) | stat: -rwxr-xr-x 3,659 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env bash

# Usage:
#  ./run_dockers.bsh - Run all the docker images
#  ./run_dockers.bsh centos_6 centos_7 - Run only CentOS 6 & 7 image
#  ./run_dockers.bsh centos_6 -- bash #Runs bash in the CentOS 6 docker
#
# Special Environments Variables
#  REPO_HOSTNAME - Override the hostname for all the repos generated/tested
#  AUTO_REMOVE - Default 1. If set to 0, it will not automatically delete the
#                docker instance when done. This can be useful for a post mortem
#                analysis. Just make sure you clean up the docker instances
#                manually

set -eu

#Mingw32 auto converts /drive/dir/blah to drive:\dir\blah ... Can't have that.
if [[ `uname` == MINGW* ]]; then
  MINGW_PATCH='/'
else
  MINGW_PATCH=''
fi

CUR_DIR=$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)
REPO_DIR=$(cd ${CUR_DIR}/..; pwd)
PACKAGE_DIR=${REPO_DIR}/repos
mkdir -p ${PACKAGE_DIR}/centos || :
mkdir -p ${PACKAGE_DIR}/debian || :

#If you are not in docker group and you have sudo, default value is sudo
: ${SUDO=`if ( [ ! -w /var/run/docker.sock ] && id -nG | grep -qwv docker && [ "${DOCKER_HOST:+dh}" != "dh" ] ) && command -v sudo > /dev/null 2>&1; then echo sudo; fi`}

function split_image_name()
{ #$1 - image dockerfile
  #sets IMAGE_NAME to the basename of the dir containing the docker file
  #sets IMAGE_INFO to be the array name following my pattern
  local IFS=_
  IMAGE_INFO=($1)
}

# Parse Arguments
IMAGES=()
PRUNE=
ARCH=amd64
while [[ $# -gt 0 ]]; do
  if [ "$1" = "--prune" ]; then
    PRUNE=t
  elif [[ "$1" == --arch=* ]]; then
    ARCH="${1#--arch=}"
  elif [ "$1" == "--" ]; then
    shift
    DOCKER_CMD="${@}"
    break
  else
    IMAGES+=("$1")
  fi
  shift
done

if [[ ${#IMAGES[@]} == 0 ]]; then
  # If you change this list, change script/upload as well.
  IMAGES=(centos_7 centos_8 rocky_9 debian_10 debian_11)
fi

mkdir -p "${PACKAGE_DIR}"
#Run docker to build packages
for IMAGE_NAME in "${IMAGES[@]}"; do
  split_image_name "${IMAGE_NAME}" #set IMAGE_NAME and IMAGE_INFO

  #It CAN'T be empty () with set -u... So I put some defaults in here
  OTHER_OPTIONS=("-t")

  if tty >/dev/null; then
    OTHER_OPTIONS+=("-i")
  fi

  if [ "${AUTO_REMOVE-1}" == "1" ]; then
    OTHER_OPTIONS+=("--rm")
  fi

  if [ -s ${CUR_DIR}/${IMAGE_NAME}.key ]; then
    CONTAINER_NAME=git-lfs-gpg ${CUR_DIR}/gpg-agent_preload.bsh
    OTHER_OPTIONS+=("--volumes-from" "git-lfs-gpg")
    OTHER_OPTIONS+=("-v" "${CUR_DIR}/${IMAGE_NAME}.key:${MINGW_PATCH}/tmp/${IMAGE_NAME}.key")
    OTHER_OPTIONS+=("-e" "$(docker exec git-lfs-gpg cat ${MINGW_PATCH}/tmp/gpg-agent/gpg_agent_info)")
    #Do I need this? Or can I get away with hardcoding???
    #GPG_AGENT_INFO=/tmp/gpg-agent/S.gpg-agent:1:1
  fi

  FINAL_UID=$(id -u)
  FINAL_GID=$(id -g)
  if [[ $FINAL_UID == 0 ]]; then
    FINAL_UID=${SUDO_UID-}
  fi
  if [[ $FINAL_GID == 0 ]]; then
    FINAL_GID=${SUDO_GID-}
  fi

  echo Compiling LFS in docker image ${IMAGE_NAME}
  IMAGE_REPO_DIR="${PACKAGE_DIR}"/"${IMAGE_INFO[0]}"/"${IMAGE_INFO[1]}"
  $SUDO docker run "${OTHER_OPTIONS[@]}" ${DOCKER_OTHER_OPTIONS-} \
                   -e USER=root \
                   -e REPO_HOSTNAME=${REPO_HOSTNAME:-git-lfs.github.com} \
                   -e FINAL_UID=${FINAL_UID} \
                   -e FINAL_GID=${FINAL_GID} \
                   -v "${MINGW_PATCH}${REPO_DIR}:/src" \
                   -v "${MINGW_PATCH}${IMAGE_REPO_DIR}:/repo" \
                   --platform "$ARCH" \
                   gitlfs/build-dockers:${IMAGE_NAME} ${DOCKER_CMD-}

  if [ -n "$PRUNE" ]
  then
    $SUDO docker rmi -f "gitlfs/build-dockers:${IMAGE_NAME}"
  fi
done

echo "Docker run completed successfully!"