forked from qzeleza/kvas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
image.build
executable file
·136 lines (115 loc) · 4.61 KB
/
image.build
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
129
130
131
132
133
134
135
136
#! /usr/bin/env bash
. ./build/library.run
arg=${1:-}
DEBUG=YES # флаг отладки процесса сборки образа
env_file=.env
GIT_FORCE=0 # флаг для запуска перезаписи данных в git
#------------------------------------------------------------
user=$(get_remove_value "USER_NAME")
group=$(get_remove_value "USER_GROUP")
image_name=$(get_remove_value "IMAGE_NAME")
# ------------------------------------------------------------
# Записываем данные в файл .env для docker-compose
# ------------------------------------------------------------
cat <<EOF > "${env_file}"
APP_NAME=${APP_NAME}
APPS_ROOT=$(get_remove_value "APPS_ROOT")
APP_PATH_NAME_TO_MAKE=$(get_remove_value "APP_PATH_NAME_TO_MAKE")
IMAGE_NAME=${image_name}
CONTAINER_NAME=$(get_remove_value "CONTAINER_NAME")
USER=${user}
GROUP=${group}
UID=$(get_remove_value "U_ID")
GID=$(get_remove_value "G_ID")
DEBUG=${DEBUG}
EOF
is_mac_os(){
uname | grep -q Darwin
}
sedi(){
if is_mac_os ; then
sed -i '' "$@"
else
sed -i "$@"
fi
}
run_if_docker_on_macos(){
# Запускаем Docker на MacOS
[ -f "${HOME}.docker/run/docker.sock" ] || {
is_mac_os && {
open -a Docker --background | grep -q 'Unable to find application' && {
echo "Для дальнейшей работы установите Docker на Вашей Mac OS."
echo "https://docs.docker.com/desktop/install/mac-install/"
}
sleep 5
}
}
}
stop_docker_on_macos(){
# Запускаем Docker на MacOS
[ -f "${HOME}.docker/run/docker.sock" ] && {
is_mac_os && pkill Docker
}
}
new_release(){
# Меняем версию сборки в зависимости от значения в файле ./build/version
release=$(cat < ./build/version | sed -n 's/RELEASE=\(.*\)/\1/p')
# Если релиз пустой, то так его пустым и оставляем, если есть цифра, но увеличиваем на 1
[ -n "${release}" ] && next_release=$((release+1))
sedi 's/\(RELEASE=\).*/\1'"${next_release}"'/' ./build/version
find ./ipk/ -maxdepth 1 -type f -iregex '.*kvas.*' -exec mv {} ./ipk/old \;
}
set -xeu
# если версия сборки задана через аргумент запуска в виде цифры до двух знаков
echo "${arg}" | grep -qE '[0-9]{1,2}' && {
sedi 's/\(RELEASE=\).*/\1'"${arg}"'/' ./build/version
# если не задан второй параметр то обновляем git, если задан то не обновляем
if [ -z "${2:-}" ] ; then
GIT_FORCE=1
fi
} || new_release
# Проверяем Docker и при необходимости запускаем его
# run_if_docker_on_macos
# удаляем старые контейнеры
# docker container prune -f
# id_app_conts=$(docker ps -aq -f ancestor=${image_name})
# [ -n "${id_app_conts}" ] && docker rm ${id_app_conts} &> /dev/null
# docker run "${image_name}"
id_dc=$(docker ps -aq -f ancestor="${image_name}")
# docker run \
# --env-file "${env_file}" \
# --interactive --tty \
# --entrypoint "${APPS_ROOT}/${APP_NAME}/build/package.build" \
# --name ${APP_NAME} \
# --volume ${PWD}:${APPS_ROOT}/${APP_NAME} \
# "${image_name}"
docker exec --user "master:staff" -it "${id_dc}" "${APPS_ROOT}/${APP_NAME}/build/package.build" /bin/bash
exit
if [ "${arg}" = build ] || [ -z "$(docker ps -a -f 'status=running' | grep "${APP_NAME}")" ]; then
# то заходим внутрь контейнера и сразу запускаем сборку пакета
# если не создан образ, то запускаем сборку образа
show_line; echo "Запускаем сборку образа ${image_name}"
show_line
docker image ls | grep -q "${image_name}" && build='' || build='--build'
docker compose up "${build}" -d && {
show_line; echo "Docker-образ собран без ошибок."
echo "Запускаем сборку пакета в самом контейнере..."
id_dc=$(docker ps -aq -f ancestor="${image_name}")
docker exec --user "${user}:${group}" -it "${id_dc}" \
"${APPS_ROOT}/${APP_NAME}/build/package.build" \
/bin/bash && {
[ "${GIT_FORCE}" = 1 ] && {
# Так как номер релиза в ручную задается только когда нужно что-то срокчно исправить
# то форсируем передачу данных в git
git add .
git commit --amend --no-edit
git push origin main --force
}
}
}
else
show_line; echo "Docker-образ собран с ошибками!"
exit 1
fi
show_line
stop_docker_on_macos