forked from ClickHouse/ClickHouse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelease_lib.sh
171 lines (149 loc) · 4.75 KB
/
release_lib.sh
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
function get_revision {
BASEDIR=$(dirname "${BASH_SOURCE[0]}")
grep "set(VERSION_REVISION" ${BASEDIR}/dbms/cmake/version.cmake | sed 's/^.*VERSION_REVISION \(.*\))$/\1/'
}
function add_daemon_impl {
local daemon=$1
local control=$CONTROL
local dependencies=$2
local description_short="${daemon%/ daemon}"
local description_full=$3
echo -e "\n\n" >> $control;
echo "Package: $daemon" >> $control;
echo "Section: libdevel" >> $control;
echo "Architecture: any" >> $control;
echo -n "Depends: \${shlibs:Depends}, \${misc:Depends}" >> $control;
for dependency in $dependencies
do
echo -n ", $dependency" >> $control
done
echo >> $control
echo "Description: $description_short" >> $control;
echo " $description_full" >> $control;
}
# Создаём файл control из control.in.
# добавляет в файл CONTROL секции для демонов из DAEMONS
function make_control {
local CONTROL="$1"
local DAEMONS="$2"
rm -f $CONTROL
cp -f $CONTROL.in $CONTROL
for DAEMON_PKG in $DAEMONS
do
case "$DAEMON_PKG" in
'clickhouse-server' )
add_daemon_impl clickhouse-server-base 'adduser' 'clickhouse-server binary'
[ -n "$BUILD_PACKAGE_FOR_METRIKA" ] && add_daemon_impl clickhouse-server-metrika "clickhouse-server-base(=1.1.$REVISION)" 'Configuration files specific for Metrika project for clickhouse-server-base package'
add_daemon_impl clickhouse-server-common "clickhouse-server-base(=1.1.$REVISION)" 'Common configuration files for clickhouse-server-base package'
;;
'clickhouse-client' )
add_daemon_impl clickhouse-client "clickhouse-server-base(=1.1.$REVISION)" "ClickHouse client and additional tools such as clickhouse-local and clickhouse-benchmark."
;;
'clickhouse-benchmark' )
#skip it explicitly
;;
'clickhouse-local' )
#skip it explicitly
;;
* )
add_daemon_impl "${DAEMON_PKG}"
;;
esac
done
}
# Генерируем номер ревизии.
# выставляются переменные окружения REVISION, AUTHOR
function gen_revision_author {
REVISION=$(get_revision)
if [[ $STANDALONE != 'yes' ]]
then
git fetch --tags
# Создадим номер ревизии и попытаемся залить на сервер.
succeeded=0
attempts=0
max_attempts=5
while [ $succeeded -eq 0 ] && [ $attempts -le $max_attempts ]
do
REVISION=$(($REVISION + 1))
attempts=$(($attempts + 1))
tag="v1.1.$REVISION-testing"
echo -e "\nTrying to create tag: $tag"
if git tag -a "$tag" -m "$tag"
then
echo -e "\nTrying to push tag to origin: $tag"
git push origin "$tag"
if [ $? -ne 0 ]
then
git tag -d "$tag"
else
succeeded=1
fi
fi
done
if [ $succeeded -eq 0 ]
then
echo "Fail to create tag"
exit 1
fi
auto_message="Auto version update to"
git_log_grep=`git log --oneline --max-count=1 | grep "$auto_message"`
if [ "$git_log_grep" == "" ]; then
git_describe=`git describe`
sed -i -- "s/VERSION_REVISION .*)/VERSION_REVISION $REVISION)/g" dbms/cmake/version.cmake
sed -i -- "s/VERSION_DESCRIBE .*)/VERSION_DESCRIBE $git_describe)/g" dbms/cmake/version.cmake
git commit -m "$auto_message [$REVISION]" dbms/cmake/version.cmake
# git push
else
REVISION=$(get_revision)
echo reusing old version $REVISION
fi
fi
AUTHOR=$(git config --get user.name)
export REVISION
export AUTHOR
}
function get_revision_author {
REVISION=$(get_revision)
AUTHOR=$(git config --get user.name)
export REVISION
export AUTHOR
}
# Генерируем changelog из changelog.in.
# изменяет
# programs/CMakeLists.txt
# dbms/src/CMakeLists.txt
function gen_changelog {
REVISION="$1"
CHDATE="$2"
AUTHOR="$3"
CHLOG="$4"
DAEMONS="$5"
sed \
-e "s/[@]REVISION[@]/$REVISION/g" \
-e "s/[@]DATE[@]/$CHDATE/g" \
-e "s/[@]AUTHOR[@]/$AUTHOR/g" \
-e "s/[@]EMAIL[@]/$(whoami)@yandex-team.ru/g" \
< $CHLOG.in > $CHLOG
}
# Загрузка в репозитории Метрики
# рабочая директория - где лежит сам скрипт
function upload_debs {
REVISION="$1"
DAEMONS="$2"
# Определим репозиторий, в который надо загружать пакеты. Он соответствует версии Ubuntu.
source /etc/lsb-release
if [ "$DISTRIB_CODENAME" == "precise" ]; then
REPO="metrika"
elif [ "$DISTRIB_CODENAME" == "trusty" ]; then
REPO="metrika-trusty"
elif [ "$DISTRIB_CODENAME" == "xenial" ]; then
REPO="metrika-xenial"
else
echo -e "\n\e[0;31mUnknown Ubuntu version $DISTRIB_CODENAME \e[0;0m\n"
fi
# Загрузка в репозиторий Метрики.
cd ../
DUPLOAD_CONF=dupload.conf
cat src/debian/dupload.conf.in | sed -e "s/[@]AUTHOR[@]/$(whoami)/g" > $DUPLOAD_CONF
dupload metrika-yandex_1.1."$REVISION"_amd64.changes -t $REPO -c --nomail
}