b4ad44d2432acf726981884b87fe6640d823edb8
[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         [--verbose]
10         [--upload]
11 EOF
12     exit $1
13 }
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         --upload)
36             upload=true
37             ;;
38         --verbose)
39             set -x
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                 centos5)
96                     F=5.5;;
97                 centos6)
98                     F=6;;
99                 centos7)
100                     F=7;;
101                 *)
102                     echo "$dist not supported"
103                     exit 1
104             esac
105             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$F/RPMS"
106             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$F/SRPMS"
107             scp -r build/centos/$dist/rpmbuild/RPMS ${UPLOAD_URI}/redhat/centos/$F
108             scp -r build/centos/$dist/rpmbuild/SRPMS ${UPLOAD_URI}/redhat/centos/$F
109         done
110         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >yum-update.log 2>&1; then
111             echo "update-yum-archive.sh failed; inspect yum-update.log"
112             exit 1
113         fi
114     fi
115     if $debian; then
116         if test -n "${DEBIAN_DIST}"; then
117             for dist in ${DEBIAN_DIST}; do
118                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
119                 if ! scp build/debian/${dist}/* ${UPLOAD_URI}/debian/${dist}; then
120                     echo "Upload failed for $dist"
121                     exit 1
122                 fi
123             done
124         fi
125         if test -n "${UBUNTU_DIST}"; then
126             for dist in ${UBUNTU_DIST}; do
127                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
128                 if ! scp build/ubuntu/${dist}/* ${UPLOAD_URI}/ubuntu/${dist}; then
129                     echo "Upload failed for $dist"
130                     exit 1
131                 fi
132             done
133         fi
134         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
135             echo "update-archive.sh failed"
136             exit 1
137         fi
138     fi
139     echo "Upload successful - we hope"
140     exit 0
141 fi
142
143
144 if $centos; then
145     for dist in ${CENTOS_DIST}; do
146         test -d build/centos/$dist && sudo rm -fr build/centos/$dist
147         mkdir -p build/centos/$dist/rpmbuild
148         mkdir -p build/centos/$dist/rpmbuild/BUILD
149         mkdir -p build/centos/$dist/rpmbuild/BUILDROOT
150         mkdir -p build/centos/$dist/rpmbuild/RPMS/noarch
151         mkdir -p build/centos/$dist/rpmbuild/RPMS/x86_64
152         mkdir -p build/centos/$dist/rpmbuild/SOURCES
153         mkdir -p build/centos/$dist/rpmbuild/SPECS
154         mkdir -p build/centos/$dist/rpmbuild/SRPMS
155         cp ${TAR} build/centos/$dist/rpmbuild/SOURCES
156         SPEC=${PRODUCT}.spec
157         cp ${SPEC} build/centos/$dist/rpmbuild/SPECS
158         cp IDMETA build/centos/$dist/rpmbuild
159         cp ${ID_DEB_BUILD}/in-docker-rpm.sh build/centos/$dist
160     done
161
162 fi
163
164 if $debian; then
165     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
166     if test ! -x $MKDEBSRC; then
167         echo "$MKDEBSRC not found"
168         exit 1
169     fi
170     cp ${ID_DEB_BUILD}/in-docker.sh .
171     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
172         echo "id-mk-deb-changelog.sh failed"
173     fi
174     if ! ${MKDEBSRC}; then
175         echo "id-mk-deb-src.sh failed"
176     fi
177     cd deb-src
178     for f in *.dsc; do
179         if test -f "$f"; then
180             DSC=$f
181         fi
182     done
183     cd ..
184     if test -z "$DSC"; then
185         echo "${DSC} does not exist"
186         exit 1
187     fi
188
189     if test "${DEBIAN_DIST}"; then
190         for dist in ${DEBIAN_DIST}; do
191             test -f build/debian/$dist && sudo rm -fr build/debian/$dist
192             mkdir -p build/debian
193             cp -a deb-src build/debian/$dist
194             cp ${ID_DEB_BUILD}/in-docker.sh build/debian/$dist
195         done
196     fi
197     if test "${UBUNTU_DIST}"; then
198         for dist in ${UBUNTU_DIST}; do
199             sudo rm -fr build/ubuntu/$dist
200             mkdir -p build/ubuntu
201             cp -a deb-src build/ubuntu/$dist
202             cp ${ID_DEB_BUILD}/in-docker.sh build/ubuntu/$dist
203         done
204     fi
205 fi
206
207 if test "${CENTOS_DIST}"; then
208     for dist in ${CENTOS_DIST}; do
209         case $dist in
210             centos5)
211                 F=5.5
212                 D=5;;
213             centos6)
214                 F=6
215                 D=6;;
216             centos7)
217                 F=7
218                 D=7;;
219             *)
220                 echo "$dist not supported"
221                 exit 1
222         esac
223         cd build/centos/$dist
224
225         echo "FROM centos:$D" >Dockerfile
226         echo "RUN yum install -y wget yum-utils rpm-build gcc gcc-c++ make" >>Dockerfile
227         echo "RUN rpm --import http://ftp.indexdata.com/pub/yum/centos/$F/RPM-GPG-KEY-indexdata" >>Dockerfile
228         echo "RUN wget http://ftp.indexdata.com/pub/yum/centos/$F/indexdata.repo -P /etc/yum.repos.d/" >>Dockerfile
229         echo 'ENTRYPOINT ["/bin/sh", "-c"]' >>Dockerfile
230         docker build -t indexdata-build-centos-$D .
231         echo -n "$dist "
232         docker run --rm  -v "$PWD:/build" -w /build/rpmbuild indexdata-build-centos-$D ../in-docker-rpm.sh >log 2>&1
233         if test $? -eq 0; then
234                 echo Done
235         else
236                 echo "Fail. Inspect build/centos/$dist/log"
237                 exit 1
238         fi
239         cd ../../..
240     done
241 fi
242 if test "${DEBIAN_DIST}"; then
243     for dist in ${DEBIAN_DIST}; do
244         cd build/debian/$dist
245         echo "FROM debian:$dist" >Dockerfile
246         echo 'RUN apt-get update && apt-get -q install -y wget devscripts equivs' >>Dockerfile
247         echo 'RUN wget -q -O - http://ftp.indexdata.dk/debian/indexdata.asc|apt-key add -' >>Dockerfile
248         echo "RUN echo \"deb http://ftp.indexdata.dk/debian $dist main\" >/etc/apt/sources.list.d/indexdata.list" >>Dockerfile
249         docker build -t indexdata-build-debian-$dist .
250         echo -n "Debian $dist "
251         docker run --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION indexdata-build-debian-$dist ../in-docker.sh >log 2>&1
252         if test $? -eq 0; then
253                 echo Done
254         else
255                 echo "Fail. Inspect build/debian/$dist/log"
256                 exit 1
257         fi
258         cd ../../..
259     done
260 fi
261 if test "${UBUNTU_DIST}"; then
262     for dist in ${UBUNTU_DIST}; do
263         cd build/ubuntu/$dist
264         echo "FROM ubuntu:$dist" >Dockerfile
265         echo 'RUN apt-get update && apt-get -q install -y wget devscripts equivs' >>Dockerfile
266         echo 'RUN wget -q -O - http://ftp.indexdata.dk/debian/indexdata.asc|apt-key add -' >>Dockerfile
267         echo "RUN echo \"deb http://ftp.indexdata.dk/ubuntu $dist main\" >/etc/apt/sources.list.d/indexdata.list" >>Dockerfile
268         docker build -t indexdata-build-ubuntu-$dist .
269         echo -n "Ubuntu $dist "
270         docker run --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION indexdata-build-ubuntu-$dist ../in-docker.sh >log 2>&1
271         if test $? -eq 0; then
272                 echo Done
273         else
274                 echo "Fail. Inspect build/ubuntu/$dist/log"
275                 exit 1
276         fi
277         cd ../../..
278     done
279 fi
280
281 # Local Variables:
282 # mode:shell-script
283 # sh-indentation: 4
284 # sh-basic-offset: 4
285 # End:
286