-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.mkdkr
128 lines (109 loc) · 2.77 KB
/
.mkdkr
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
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env bash
declare -A colors
pretty() {
colors+=(
["black"]='\e[0;30m'
["red"]='\e[0;31m'
["green"]='\e[0;32m'
["orange"]='\e[0;33m'
["blue"]='\e[0;34m'
["purple"]='\e[0;35m'
["cyan"]='\e[0;36m'
["light_gray"]='\e[0;37m'
["dark_gray"]='\e[1;30m'
["light_red"]='\e[1;31m'
["light_green"]='\e[1;32m'
["yellow"]='\e[1;33m'
["light_blue"]='\e[1;34m'
["light_purple"]='\e[1;35m'
["light_cyan"]='\e[1;36m'
["white"]='\e[1;37m'
)
key=${1:-white}
echo -e "${colors[${key}]}${*:2}\e[0m"
}
_image() {
docker ps | grep "${1}" | awk '{print $2}'
}
_remove_running_job() {
if [ "$(docker ps | grep job_${MKDKR_JOB_NAME})" != "" ]; then
pretty "purple" "image changed, from: $(_image job_${MKDKR_JOB_NAME}) to: ${IMAGE}"
docker rm -f "job_${MKDKR_JOB_NAME}"
fi
}
_implicit_job() {
TYPE="${1}"
if [ "${TYPE}" != "job" ] &&
[ "${TYPE}" != "service" ] &&
[ "${TYPE}" != "privileged" ]; then
echo true
else
echo false
fi
}
....() {
if [ -z "${MKDKR_JOB_NAME}" ]; then
_MKDKR_JOB_NAME=$(echo "${1}_$(cat /proc/sys/kernel/random/uuid)" | sed 's/\//_/g')
export MKDKR_JOB_NAME="${_MKDKR_JOB_NAME}"
fi
echo "${MKDKR_JOB_NAME}"
}
# shellcheck disable=SC1036
...() {
OLDIFS=$IFS
IFS='⠀' # Braille Pattern Blank (U+2800)
TYPE="${1}"
IMAGE="${2}"
ARGS="${*:3}"
if [ "$(_implicit_job "${TYPE}")" == true ]; then
ARGS="${*:2}"
IMAGE="${TYPE}"
TYPE="job"
fi
_remove_running_job
pretty "cyan" "... ${TYPE} ${IMAGE} ${ARGS[*]}"
if [ "${TYPE}" == "service" ]; then
docker run --rm -d \
-v "${PWD}":"${PWD}" \
--workdir "${PWD}" \
$ARGS \
--name "service_${MKDKR_JOB_NAME}" \
"${IMAGE}"
else
if [ "${TYPE}" == "privileged" ]; then
PRIVILEGED=(--privileged -v /var/run/docker.sock:/var/run/docker.sock)
fi
SERVICE=$(_image "service_${MKDKR_JOB_NAME}" | sed 's/:.*//g;s/\//_/g')
if [ "${SERVICE}" != "" ]; then
SERVICES=(--link "service_${MKDKR_JOB_NAME}:${SERVICE}")
fi
docker run --rm -d \
-v "${PWD}":"${PWD}" \
--workdir "${PWD}" \
--entrypoint "" \
$ARGS \
${PRIVILEGED[@]} \
${SERVICES[@]} \
--name "job_${MKDKR_JOB_NAME}" \
"${IMAGE}" sleep "${MKDKR_TTL:-3600}"
fi
IFS=$OLDIFS
}
# shellcheck disable=SC1036
..() {
CONTAINER_NAME="job_${MKDKR_JOB_NAME}"
pretty "green" ".. ${*}"
docker exec -i ${CONTAINER_NAME} ${MKDKR_SHELL:-sh} -c "$*"
EXIT_CODE=$?
if [ "${EXIT_CODE}" != "0" ]; then
.
exit "${EXIT_CODE}"
fi
}
.() {
ALIVE=$(docker ps | grep "${MKDKR_JOB_NAME}" | awk '{print $1}')
if [ "${ALIVE[0]}" != "" ]; then
pretty "green" "."
docker ps | grep "${MKDKR_JOB_NAME}" | awk '{print $1}' | xargs docker rm -f
fi
}