-
Notifications
You must be signed in to change notification settings - Fork 3
/
build.sh
121 lines (105 loc) · 3.89 KB
/
build.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
#!/bin/bash
set -eux
# NOTE(xiexianbin): update COPR_PROJECT_NAME、RPM_NAME and COPR_PROJECT_DESCRIPTION.
COPR_PROJECT_NAME="tengine-rpm"
RPM_NAME="tengine"
ARCH="x86_64"
CHROOTS="epel-7"
SPEC_FILE=${RPM_NAME}.spec
MOCK_CHROOTS="${CHROOTS}-${ARCH}"
GITHUB_REPO_URL="https://github.com/xiexianbin/tengine-rpm"
CONTACT="me@xiexianbin.cn"
COPR_PROJECT_DESCRIPTION="Tengine is a web server originated by Taobao, the largest e-commerce website in Asia. It is based on the Nginx HTTP server and has many advanced features. Tengine has proven to be very stable and efficient on some of the top 100 websites in the world, including taobao.com and tmall.com."
COPR_PROJECT_INSTRUCTIONS="\`\`\`
sudo curl -sL -o /etc/yum.repos.d/${COPR_USERNAME}-${COPR_PROJECT_NAME}-${CHROOTS}.repo ${COPR_URL}/coprs/${COPR_USERNAME}/${COPR_PROJECT_NAME}/repo/${CHROOTS}/${COPR_USERNAME}-${COPR_PROJECT_NAME}-${CHROOTS}.repo
\`\`\`
\`\`\`
sudo yum -y install ${RPM_NAME}
\`\`\`"
usage() {
cat <<'EOF' 1>&2
Usage:
build.sh [command]
Available Commands:
srpm build srpm package
mock build rpm locally with mock
copr upload the srpm and build rpm on copr
EOF
}
topdir=`rpm --eval '%{_topdir}'`
download_source_files() {
source_urls=`rpmspec -P ${topdir}/SPECS/${SPEC_FILE} | awk '/^Source[0-9]*:\s*http/ {print $2}'`
for source_url in $source_urls; do
source_file=${source_url##*/}
(cd ${topdir}/SOURCES && if [ ! -f ${source_file} ]; then curl -sLO ${source_url}; fi)
done
}
build_srpm() {
download_source_files
rpmbuild -bs "${topdir}/SPECS/${SPEC_FILE}"
version=`rpmspec -P ${topdir}/SPECS/${SPEC_FILE} | awk '$1=="Version:" { print $2 }'`
release=`rpmspec -P ${topdir}/SPECS/${SPEC_FILE} | awk '$1=="Release:" { print $2 }'`
srpm_file=${RPM_NAME}-${version}-${release}.src.rpm
}
build_rpm_with_mock() {
build_srpm
for mock_chroot in $MOCK_CHROOTS; do
/usr/bin/mock -r ${mock_chroot} --rebuild ${topdir}/SRPMS/${srpm_file}
mock_result_dir=/var/lib/mock/${mock_chroot}/result
if [ -n "`find ${mock_result_dir} -maxdepth 1 -name \"${RPM_NAME}-*${version}-*.${ARCH}.rpm\" -print -quit`" ]; then
mkdir -p ${topdir}/RPMS/${ARCH}
cp ${mock_result_dir}/${RPM_NAME}-*${version}-*.${ARCH}.rpm ${topdir}/RPMS/${ARCH}/
fi
if [ -n "`find ${mock_result_dir} -maxdepth 1 -name \"${RPM_NAME}-*${version}-*.noarch.rpm\" -print -quit`" ]; then
mkdir -p ${topdir}/RPMS/noarch
cp ${mock_result_dir}/${RPM_NAME}-*${version}-*.noarch.rpm ${topdir}/RPMS/noarch/
fi
done
}
build_rpm_on_copr() {
build_srpm
# Check the project is already created on copr?
status=`curl -s -o /dev/null -w "%{http_code}" ${COPR_URL}/api/coprs/${COPR_USERNAME}/${COPR_PROJECT_NAME}/detail/`
if [ $status = "404" ]; then
# the project is not exist on copr, create it
chroot_opts=''
for mock_chroot in $MOCK_CHROOTS; do
chroot_opts="$chroot_opts --data-urlencode ${mock_chroot}=y"
done
curl -s -X POST \
-u "${COPR_LOGIN}:${COPR_TOKEN}" \
--data-urlencode "name=${COPR_PROJECT_NAME}" \
$chroot_opts \
--data-urlencode "description=${COPR_PROJECT_DESCRIPTION}" \
--data-urlencode "instructions=${COPR_PROJECT_INSTRUCTIONS}" \
--data-urlencode "homepage=${GITHUB_REPO_URL}" \
--data-urlencode "contact=${CONTACT}" \
--data-urlencode "build_enable_net=y" \
${COPR_URL}/api/coprs/${COPR_USERNAME}/new/
fi
# uploading a srpm file and create new build form srpm
chroot_opts=''
for mock_chroot in $MOCK_CHROOTS; do
chroot_opts="$chroot_opts -F ${mock_chroot}=y"
done
curl -s -X POST \
-u "${COPR_LOGIN}:${COPR_TOKEN}" \
-H "Expect:" \
$chroot_opts \
-F "pkgs=@${topdir}/SRPMS/${srpm_file};type=application/x-rpm" \
${COPR_URL}/api/coprs/${COPR_USERNAME}/${COPR_PROJECT_NAME}/new_build_upload/
}
case "${1:-}" in
srpm)
build_srpm
;;
mock)
build_rpm_with_mock
;;
copr)
build_rpm_on_copr
;;
*)
usage
;;
esac