Fix RPM build: no debuginfo packages SA-778 SA-759
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild.sh
1 #!/bin/sh
2 usage()
3 {
4     cat <<EOF
5 Usage: id-pbuild.sh [OPTIONS]
6 Options:
7         [--debian=distros]
8         [--ubuntu=distros]
9         [--centos=distros]
10         [--concurrency=level]
11         [--update=true|false]
12         [--upload]
13 EOF
14     exit $1
15 }
16 D0=`dirname $0`
17 ID_DEB_BUILD=`cd $D0; pwd`
18 update=true
19 do_help=false
20 upload=false
21 concurrency=8
22 ARCHS="i386 amd64"
23 while test $# -gt 0; do
24     case "$1" in
25         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
26         *) optarg= ;;
27     esac
28     case $1 in
29         --debian=*)
30             DEBIAN_DIST_A=$optarg
31             ;;
32         --ubuntu=*)
33             UBUNTU_DIST_A=$optarg
34             ;;
35         --centos=*)
36             CENTOS_DIST_A=$optarg
37             ;;
38         --concurrency=*)
39             concurrency=$optarg
40             ;;
41         --upload)
42             upload=true
43             ;;
44         --update=*)
45             update=$optarg
46             ;;
47         -*)
48             do_help=yes
49             ;;
50     esac
51     shift
52 done
53 if test "$do_help" = "yes"; then
54     usage 1 1>&2
55 fi
56 if test ! -x /usr/bin/lxc-attach; then
57     echo "No lxc-attach. Probably not running on mochi!!"
58     exit 1
59 fi
60 if test -f IDMETA;  then
61     . ./IDMETA
62 else
63     echo "IDMETA missing"
64     exit 1
65 fi
66 UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk}
67 UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub}
68
69 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
70     DEBIAN_DIST=$DEBIAN_DIST_A
71     UBUNTU_DIST=$UBUNTU_DIST_A
72     CENTOS_DIST=$CENTOS_DIST_A
73 fi
74 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
75     debian=true
76     DNAME=`awk '/Source:/ {print $2}' debian/control`
77     if test "$NAME" -a "$NAME" != "$DNAME"; then
78         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
79         exit 1
80     fi
81     PRODUCT=$DNAME
82 else
83     debian=false
84 fi
85 if test "$CENTOS_DIST"; then
86     centos=true
87     RNAME=`awk '/Name:/ {print $2}' *.spec`
88     if test "$NAME" -a "$NAME" != "$RNAME"; then
89         echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
90         exit 1
91     fi
92     PRODUCT=$RNAME
93     if test ! -d ~/rpmbuild; then
94         echo "Creating ~/rpmbuild"
95         mkdir -p ~/pmbuild/BUILD
96         mkdir -p ~/rpmbuild/RPMS/noarch
97         mkdir -p ~/rpmbuild/RPMS/x86_64
98         mkdir -p ~/rpmbuild/SOURCES
99         mkdir -p ~/rpmbuild/SPECS
100         mkdir -p ~/rpmbuild/SRPMS
101     fi
102     if test ! -f ~/.rpmmacros; then
103         echo "Creating ~/.rpmmacros"
104         echo "%_topdir $HOME/rpmbuild" >~/.rpmmacros
105         echo "%_source_filedigest_algorithm   0" >>~/.rpmmacros
106         echo "%_binary_filedigest_algorithm   0" >>~/.rpmmacros
107     fi
108 else
109     centos=false
110 fi
111 TAR=${PRODUCT}-${VERSION}.tar.gz
112
113 if $upload; then
114     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
115     echo "Uploading to ${UPLOAD_URI}"
116     if $centos; then
117         pkg_names=`sudo lxc-attach -n mockbuild -- rpm -q --specfile ~/rpmbuild/SPECS/${PRODUCT}.spec --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n"`
118         for dist in ${CENTOS_DIST}; do
119             case $dist in
120                 centos5)
121                     ftpdir=centos/5.5
122                     r=id-epel-5-x86_64 ;;
123                 centos6)
124                     ftpdir=centos/6
125                     r=id-epel-6-x86_64 ;;
126                 centos7)
127                     ftpdir=centos/7
128                     r=id-epel-7-x86_64 ;;
129                 *)
130                     ftpdir=centos/$dist
131                     r=$dist ;;
132             esac
133             echo "$r"
134             for pkg in ${pkg_names}; do
135                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/SRPMS"
136                 if test -f ~/rpmbuild/SRPMS/${pkg}.src.rpm; then
137                     scp ~/rpmbuild/SRPMS/${pkg}.src.rpm ${UPLOAD_URI}/redhat/${ftpdir}/SRPMS
138                 fi
139                 for arch in x86_64 noarch; do
140                     if test -f ~/rpmbuild/$r/${pkg}.${arch}.rpm; then
141                         ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/RPMS/${arch}"
142                         scp ~/rpmbuild/$r/${pkg}.${arch}.rpm ${UPLOAD_URI}/redhat/${ftpdir}/RPMS/${arch}
143                     fi
144                 done
145             done
146         done
147         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >~/rpmbuild/yum-update.log 2>&1; then
148             echo "update-yum-archive.sh failed. Inspect ~/rpmbuild/yum-update.log"
149             exit 1
150         fi
151     fi
152
153     if $debian; then
154         cd deb-src
155         if test -n "${UBUNTU_DIST}"; then
156             for dist in ${UBUNTU_DIST}; do
157                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
158                 if ! scp ${dist}-*/* ${UPLOAD_URI}/ubuntu/${dist}; then
159                     echo "Upload failed for $dist"
160                     exit 1
161                 fi
162             done
163         fi
164         if test -n "${DEBIAN_DIST}"; then
165             for dist in ${DEBIAN_DIST}; do
166                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
167                 if ! scp ${dist}-*/* ${UPLOAD_URI}/debian/${dist}; then
168                     echo "Upload failed for $dist"
169                     exit 1
170                 fi
171             done
172         fi
173         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
174             echo "update-archive.sh failed"
175             exit 1
176         fi
177     fi
178     echo "Upload successful - we hope"
179     exit 0
180 fi
181
182 if $centos; then
183     SPEC=${PRODUCT}.spec
184     cp ${TAR} ~/rpmbuild/SOURCES
185     cat ${SPEC}|sed "s/%define idmetaversion.*/%define idmetaversion ${VERSION}/" >~/rpmbuild/SPECS/${SPEC}
186     sudo lxc-attach -n mockbuild -- rpmbuild -bs ~/rpmbuild/SPECS/${SPEC}
187     for dist in ${CENTOS_DIST}; do
188         case $dist in
189             centos5)
190                 r=id-epel-5-x86_64 ;;
191             centos6)
192                 r=id-epel-6-x86_64 ;;
193             centos7)
194                 r=id-epel-7-x86_64 ;;
195             *)
196                 r=$dist ;;
197         esac
198         echo -n "$r"
199         mkdir -p ~/rpmbuild/$r
200         if sudo lxc-attach -n mockbuild -- mock -q --resultdir=~/rpmbuild/$r -r $r ~/rpmbuild/SRPMS/${PRODUCT}-${VERSION}*src.rpm; then
201             echo " done"
202         else
203             echo " failed. Inspect ~/rpmbuild/$r/build.log"
204             exit 1
205         fi
206     done
207 fi
208 if $debian; then
209     sudo rm -fr deb-src
210     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
211     if test ! -x $MKDEBSRC; then
212         echo "$MKDEBSRC not found"
213         exit 1
214     fi
215     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
216         echo "id-mk-deb-changelog.sh failed"
217     fi
218     if ! ${MKDEBSRC}; then
219         echo "id-mk-deb-src.sh failed"
220     fi
221     cd deb-src
222     for f in *.dsc; do
223         if test -f "$f"; then
224             DSC=$f
225         fi
226     done
227     if test -z "$DSC"; then
228         echo "${DSC}does not exist"
229         exit 1
230     fi
231     if grep "Architecture: all" $DSC >/dev/null; then
232         USE_ARCHS=i386
233     else
234         USE_ARCHS=$ARCHS
235     fi
236     rm -f ~/.pbuilderrc
237     i=0
238     cat ${ID_DEB_BUILD}/pbuilderrc > ~/.pbuilderrc
239     for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
240         for arch in ${USE_ARCHS}; do
241             sudo ${ID_DEB_BUILD}/id-pbuild-root.sh --update=$update --dsc=$DSC --arch=$arch --dist=$dist &
242             i=`expr $i + 1`
243             if test $i -ge $concurrency; then
244                 i=0
245                 wait
246                 if ! test -f ${dist}-${arch}/*.dsc; then
247                     echo "FAILED: No .dsc file for ${dist}-${arch}"
248                     exit 1
249                 fi
250             fi
251         done
252     done
253     wait
254     for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
255         for arch in ${USE_ARCHS}; do
256             if ! test -f ${dist}-${arch}/*.dsc; then
257                 echo "FAILED: No .dsc file for ${dist}-${arch}"
258                 exit 1
259             fi
260         done
261     done
262 fi
263
264 # Local Variables:
265 # mode:shell-script
266 # sh-indentation: 4
267 # sh-basic-offset: 4
268 # End:
269