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