-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathdocker-dev
executable file
·98 lines (80 loc) · 2.55 KB
/
docker-dev
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
#!/usr/bin/env bash
# shellcheck disable=SC2155,SC2086
set -euo pipefail
function abspath() {
readlink -m "$1"
}
export THIS_DIR="$(
cd "$(dirname "${BASH_SOURCE[0]}")"
pwd
)"
SUCCESS="({ set +x; } 2> /dev/null && echo '🟩 Success' && exit 0)"
FAILURE="({ set +x; } 2> /dev/null && echo '🟥 Failure' && exit 1)"
CANCELLED="({ set +x; } 2> /dev/null && echo '🟦 Cancelled' && exit 0)"
SUCCESS_OR_FAILURE="&& ${SUCCESS} || ${FAILURE}"
HANDLE_SIGINT="trap \"${CANCELLED}; exit 0\" INT"
export PACKAGE_NAME="ffpopsim"
export PACKAGE_DIR_REL=""
export PROJECT_ROOT_DIR="$(abspath "${THIS_DIR}")"
export DOCKER_REPO="neherlab/ffpopsim_builder"
export DOCKER_IMAGE_NAME_SAFE="${DOCKER_REPO//\//-}"
export DOCKER_CONTAINER_NAME="${DOCKER_IMAGE_NAME_SAFE}-$(date +%s)"
export USER=user
export GROUP=user
export NICE="nice -14 ionice -c2 -n3"
export TIME="/usr/bin/time --quiet -f \"\nCmd : %C\nTime: %E\nMem : %M KB\n\""
JUPYTER=0
case "${1:-}" in
"jupyter" | "j")
shift
JUPYTER=1
;;
esac
DOCKER_TARGET="base"
DOCKER_IMAGE_VERSION="$(./scripts/docker_build_checksum.sh)"
if ! docker inspect --format '{{.Id}}' "${DOCKER_REPO}:${DOCKER_TARGET}-${DOCKER_IMAGE_VERSION}" &>/dev/null; then
export DOCKER_BUILDKIT=1
export PROGRESS_NO_TRUNC=1
${NICE} docker build \
--target="${DOCKER_TARGET}" \
--tag="${DOCKER_REPO}:${DOCKER_TARGET}" \
--tag="${DOCKER_REPO}:${DOCKER_TARGET}-${DOCKER_IMAGE_VERSION}" \
--network=host \
--build-arg="UID=$(id -u)" \
--build-arg="GID=$(id -g)" \
--build-arg="USER=user" \
--build-arg="GROUP=user" \
. \
>/dev/null
fi
PORTS=""
if [ "${JUPYTER}" == "1" ]; then
PORTS="-p 15000:15000"
COMMAND="jupyter ${COMMAND:-lab --ip='0.0.0.0' --port=15000 --LabApp.token='' --JupyterApp.answer_yes=True --ExtensionApp.open_browser=False --no-browser}"
else
if [ -z "${*:-}" ]; then
COMMAND="bash"
else
COMMAND="$(printf " %q" "${@}")"
fi
fi
${NICE} docker run -it --rm \
--network=host \
--init \
--name="${DOCKER_CONTAINER_NAME}" \
--hostname="${DOCKER_IMAGE_NAME_SAFE}" \
--user="$(id -u):$(id -g)" \
--volume="${PROJECT_ROOT_DIR}:/workdir" \
--workdir="/workdir/${PACKAGE_DIR_REL}" \
--env="CC=ccache gcc" \
--env="CXX=ccache g++" \
--env="CCACHE_DIR=.cache/ccache" \
--env="UID=$(id -u)" \
--env="GID=$(id -g)" \
--env="USER=${USER}" \
--env="GROUP=${GROUP}" \
--env="PS1=\${USER}@\${HOST}" \
--ulimit core=0 \
${PORTS} \
"${DOCKER_REPO}:${DOCKER_TARGET}-${DOCKER_IMAGE_VERSION}" \
bash -c "set -euo pipefail; ${HANDLE_SIGINT}; ${COMMAND} ${SUCCESS_OR_FAILURE}"