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