e608f79603f367c2f45c2d2503f41fcc66e41bdd
[git-tools-moved-to-github.git] / id-deb-build / docker-build.sh
1 #!/bin/sh
2 usage()
3 {
4     cat <<EOF
5 Usage: docker-build.sh [OPTIONS]
6 Options:
7         [--debian=distros]
8         [--ubuntu=distros]
9         [--upload]
10 EOF
11     exit $1
12 }
13 set -x
14 D0=`dirname $0`
15 ID_DEB_BUILD=`cd $D0; pwd`
16
17 UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk}
18 UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub}
19 upload=false
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         --concurrency=*)
36             concurrency=$optarg
37             ;;
38         --upload)
39             upload=true
40             ;;
41         -*)
42             do_help=yes
43             ;;
44     esac
45     shift
46 done
47 if test -f IDMETA;  then
48     . ./IDMETA
49 else
50     echo "IDMETA missing"
51     exit 1
52 fi
53 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
54     DEBIAN_DIST=$DEBIAN_DIST_A
55     UBUNTU_DIST=$UBUNTU_DIST_A
56     CENTOS_DIST=$CENTOS_DIST_A
57 fi
58
59 if test "$CENTOS_DIST"; then
60     RNAME=`awk '/Name:/ {print $2}' *.spec`
61     if test "$NAME" -a "$NAME" != "$RNAME"; then
62         echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
63         exit 1
64     fi
65     PRODUCT=$RNAME
66     centos=true
67 else
68     centos=false
69 fi
70
71 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
72     debian=true
73     DNAME=`awk '/Source:/ {print $2}' debian/control`
74     if test "$NAME" -a "$NAME" != "$DNAME"; then
75         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
76         exit 1
77     fi
78     PRODUCT=$DNAME
79 else
80     debian=false
81 fi
82
83 TAR=${PRODUCT}-${VERSION}.tar.gz
84 if test ! -f "$TAR"; then
85     echo "tar $TAR missing"
86     exit 1
87 fi
88
89 if $upload; then
90     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
91     echo "Uploading to ${UPLOAD_URI}"
92     if $centos; then
93         for dist in ${CENTOS_DIST}; do
94             case $dist in
95                 centos6)
96                     D=6;;
97                 centos7)
98                     D=7;;
99                 *)
100                     echo "$dist not supported"
101                     exit 1
102             esac
103             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$D/RPMS"
104             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$D/SRPMS"
105             scp -r build/centos/$dist/rpmbuild/RPMS ${UPLOAD_URI}/redhat/centos/$D
106             scp -r build/centos/$dist/rpmbuild/SRPMS ${UPLOAD_URI}/redhat/centos/$D
107         done
108         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >yum-update.log 2>&1; then
109             echo "update-yum-archive.sh failed; inspect yum-update.log"
110             exit 1
111         fi
112     fi
113     if $debian; then
114         if test -n "${DEBIAN_DIST}"; then
115             for dist in ${DEBIAN_DIST}; do
116                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
117                 if ! scp build/debian/${dist}/* ${UPLOAD_URI}/debian/${dist}; then
118                     echo "Upload failed for $dist"
119                     exit 1
120                 fi
121             done
122         fi
123         if test -n "${UBUNTU_DIST}"; then
124             for dist in ${UBUNTU_DIST}; do
125                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
126                 if ! scp build/ubuntu/${dist}/* ${UPLOAD_URI}/ubuntu/${dist}; then
127                     echo "Upload failed for $dist"
128                     exit 1
129                 fi
130             done
131         fi
132         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
133             echo "update-archive.sh failed"
134             exit 1
135         fi
136     fi
137     echo "Upload successful - we hope"
138     exit 0
139 fi
140
141
142 if $centos; then
143     for dist in ${CENTOS_DIST}; do
144         sudo rm -fr build/centos/$dist
145         mkdir -p build/centos/$dist/rpmbuild
146         mkdir -p build/centos/$dist/rpmbuild/BUILD
147         mkdir -p build/centos/$dist/rpmbuild/BUILDROOT
148         mkdir -p build/centos/$dist/rpmbuild/RPMS/noarch
149         mkdir -p build/centos/$dist/rpmbuild/RPMS/x86_64
150         mkdir -p build/centos/$dist/rpmbuild/SOURCES
151         mkdir -p build/centos/$dist/rpmbuild/SPECS
152         mkdir -p build/centos/$dist/rpmbuild/SRPMS
153         cp ${TAR} build/centos/$dist/rpmbuild/SOURCES
154         SPEC=${PRODUCT}.spec
155         cp ${SPEC} build/centos/$dist/rpmbuild/SPECS
156         cp IDMETA build/centos/$dist/rpmbuild
157         cp ${ID_DEB_BUILD}/in-docker-rpm.sh build/centos/$dist
158     done
159
160 fi
161
162 if $debian; then
163     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
164     if test ! -x $MKDEBSRC; then
165         echo "$MKDEBSRC not found"
166         exit 1
167     fi
168     cp ${ID_DEB_BUILD}/in-docker.sh .
169     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
170         echo "id-mk-deb-changelog.sh failed"
171     fi
172     if ! ${MKDEBSRC}; then
173         echo "id-mk-deb-src.sh failed"
174     fi
175     cd deb-src
176     for f in *.dsc; do
177         if test -f "$f"; then
178             DSC=$f
179         fi
180     done
181     cd ..
182     if test -z "$DSC"; then
183         echo "${DSC} does not exist"
184         exit 1
185     fi
186
187     if test "${DEBIAN_DIST}"; then
188         for dist in ${DEBIAN_DIST}; do
189             sudo rm -fr build/debian/$dist
190             mkdir -p build/debian
191             cp -a deb-src build/debian/$dist
192             cp ${ID_DEB_BUILD}/in-docker.sh build/debian/$dist
193         done
194     fi
195     if test "${UBUNTU_DIST}"; then
196         for dist in ${UBUNTU_DIST}; do
197             sudo rm -fr build/ubuntu/$dist
198             mkdir -p build/ubuntu
199             cp -a deb-src build/ubuntu/$dist
200             cp ${ID_DEB_BUILD}/in-docker.sh build/ubuntu/$dist
201         done
202     fi
203 fi
204
205 if test "${CENTOS_DIST}"; then
206     for dist in ${CENTOS_DIST}; do
207         case $dist in
208             centos6)
209                 D=6;;
210             centos7)
211                 D=7;;
212             *)
213                 echo "$dist not supported"
214                 exit 1
215         esac
216         cd build/centos/$dist
217         docker run -it --rm  -v "$PWD:/build" -w /build/rpmbuild centos:$D ../in-docker-rpm.sh centos $D
218         cd ../../..
219     done
220 fi
221 if test "${DEBIAN_DIST}"; then
222     for dist in ${DEBIAN_DIST}; do
223         cd build/debian/$dist
224         docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION debian:$dist ../in-docker.sh debian $dist
225         cd ../../..
226     done
227 fi
228 if test "${UBUNTU_DIST}"; then
229     for dist in ${UBUNTU_DIST}; do
230         cd build/ubuntu/$dist
231         docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION ubuntu:$dist ../in-docker.sh ubuntu $dist
232         cd ../../..
233     done
234 fi
235
236 # Local Variables:
237 # mode:shell-script
238 # sh-indentation: 4
239 # sh-basic-offset: 4
240 # End:
241