forked from qzeleza/kvas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
image.build
executable file
·108 lines (91 loc) · 3.96 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
#! /usr/bin/env bash
. ./build/library.run
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
run_docker_on_macos(){
# Запускаем Docker на MacOS
[ -f "${HOME}.docker/run/docker.sock" ] || {
uname | grep -q Darwin && {
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" ] && {
uname | grep -q Darwin && pkill Docker
}
}
new_release(){
# Меняем версию сборки в зависимости от значения в файле ./build/version
release=$(cat < ./build/version | sed -n 's/RELEASE=\(.*\)/\1/p')
# Если релиз пустой, то так его пустым и оставляем, если есть цифра, но увеличиваем на 1
[ -n "${release}" ] && next_release=$((release+1))
sed -i '' 's/\(RELEASE=\).*/\1'"${next_release}"'/' ./build/version
find ./ipk/ -maxdepth 1 -type f -iregex '.*kvas.*' -exec mv {} ./ipk/old \;
}
# если версия сборки задана через аргумент запуска в виде цифры до двух знаков
echo "${1}" | grep -qE '[0-9]{1,2}' && {
sed -i '' 's/\(RELEASE=\).*/\1'"${1}"'/' ./build/version
# если не задан второй параметр то обновляем git, если задан то не обновляем
if [ -z "${2}" ] ; then
GIT_FORCE=1
fi
} || new_release
# Проверяем Docker и при необходимости запускаем его
run_docker_on_macos
# удаляем старые контейнеры
docker container prune -f
if [ "${1}" = 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
fi
if [ "${?}" = 0 ]; then
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