Rename build deb script for Docker
[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
15
16 centos_map()
17 {
18     dist=$1
19     case $dist in
20         centos5)
21             F=5;;
22         centos6)
23             F=6;;
24         centos7)
25             F=7;;
26         *)
27             echo "$dist not supported"
28             exit 1
29     esac
30     return $F
31 }
32
33 prepare_deb()
34 {
35     TYPE=$1
36     DISTS=$2
37
38     for dist in ${DISTS}; do
39         test -f build/$TYPE/$dist && sudo rm -fr build/$TYPE/$dist
40         mkdir -p build/$TYPE
41         cp -a deb-src build/$TYPE/$dist
42         cp ${ID_DEB_BUILD}/in-docker-deb.sh build/$TYPE/$dist
43     done
44 }
45
46 run_deb()
47 {
48     TYPE=$1
49     DISTS=$2
50
51     for dist in ${DISTS}; do
52         cd build/$TYPE/$dist
53         echo "FROM $TYPE:$dist" >Dockerfile
54         echo "ENV DEBIAN_FRONTEND noninteractive" >>Dockerfile
55         echo 'RUN apt-get update && apt-get -q install -y wget devscripts equivs' >>Dockerfile
56         echo 'RUN wget -q -O - http://ftp.indexdata.dk/debian/indexdata.asc|apt-key add -' >>Dockerfile
57         echo "RUN echo \"deb http://ftp.indexdata.dk/$TYPE $dist main\" >/etc/apt/sources.list.d/indexdata.list" >>Dockerfile
58         docker build -t indexdata-build-$TYPE:$dist .
59         echo -n "$TYPE $dist "
60         docker run --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION indexdata-build-$TYPE:$dist ../in-docker-deb.sh >log 2>&1
61         if test $? -eq 0; then
62                 echo Done
63         else
64                 echo "Fail. Inspect build/$TYPE/$dist/log"
65                 exit 1
66         fi
67         cd ../../..
68     done
69 }
70
71 D0=`dirname $0`
72 ID_DEB_BUILD=`cd $D0; pwd`
73
74 UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk}
75 UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub}
76 upload=false
77 while test $# -gt 0; do
78     case "$1" in
79         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
80         *) optarg= ;;
81     esac
82     case $1 in
83         --debian=*)
84             DEBIAN_DIST_A=$optarg
85             ;;
86         --ubuntu=*)
87             UBUNTU_DIST_A=$optarg
88             ;;
89         --centos=*)
90             CENTOS_DIST_A=$optarg
91             ;;
92         --upload)
93             upload=true
94             ;;
95         --verbose)
96             set -x
97             ;;
98         -*)
99             do_help=yes
100             ;;
101     esac
102     shift
103 done
104 if test -f IDMETA;  then
105     . ./IDMETA
106 else
107     echo "IDMETA missing"
108     exit 1
109 fi
110 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
111     DEBIAN_DIST=$DEBIAN_DIST_A
112     UBUNTU_DIST=$UBUNTU_DIST_A
113     CENTOS_DIST=$CENTOS_DIST_A
114 fi
115
116 if test "$CENTOS_DIST"; then
117     RNAME=`awk '/Name:/ {print $2}' *.spec`
118     if test "$NAME" -a "$NAME" != "$RNAME"; then
119         echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
120         exit 1
121     fi
122     PRODUCT=$RNAME
123     centos=true
124 else
125     centos=false
126 fi
127
128 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
129     debian=true
130     DNAME=`awk '/Source:/ {print $2}' debian/control`
131     if test "$NAME" -a "$NAME" != "$DNAME"; then
132         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
133         exit 1
134     fi
135     PRODUCT=$DNAME
136 else
137     debian=false
138 fi
139
140 TAR=${PRODUCT}-${VERSION}.tar.gz
141 if test ! -f "$TAR"; then
142     echo "tar $TAR missing"
143     exit 1
144 fi
145
146 if $upload; then
147     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
148     echo "Uploading to ${UPLOAD_URI}"
149     if $centos; then
150         for dist in ${CENTOS_DIST}; do
151             centos_map $dist
152             F=$?
153             test $F = "5" && F=5.5
154             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$F/RPMS"
155             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$F/SRPMS"
156             scp -r build/centos/$dist/rpmbuild/RPMS ${UPLOAD_URI}/redhat/centos/$F
157             scp -r build/centos/$dist/rpmbuild/SRPMS ${UPLOAD_URI}/redhat/centos/$F
158         done
159         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >yum-update.log 2>&1; then
160             echo "update-yum-archive.sh failed; inspect yum-update.log"
161             exit 1
162         fi
163     fi
164     if $debian; then
165         if test -n "${DEBIAN_DIST}"; then
166             for dist in ${DEBIAN_DIST}; do
167                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
168                 if ! scp build/debian/${dist}/*_${VERSION}* ${UPLOAD_URI}/debian/${dist}; then
169                     echo "Upload failed for $dist"
170                     exit 1
171                 fi
172             done
173         fi
174         if test -n "${UBUNTU_DIST}"; then
175             for dist in ${UBUNTU_DIST}; do
176                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
177                 if ! scp build/ubuntu/${dist}/*_${VERSION}* ${UPLOAD_URI}/ubuntu/${dist}; then
178                     echo "Upload failed for $dist"
179                     exit 1
180                 fi
181             done
182         fi
183         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
184             echo "update-archive.sh failed"
185             exit 1
186         fi
187     fi
188     echo "Upload successful - we hope"
189     exit 0
190 fi
191
192 if $centos; then
193     for dist in ${CENTOS_DIST}; do
194         test -d build/centos/$dist && sudo rm -fr build/centos/$dist
195         mkdir -p build/centos/$dist/rpmbuild
196         mkdir -p build/centos/$dist/rpmbuild/BUILD
197         mkdir -p build/centos/$dist/rpmbuild/BUILDROOT
198         mkdir -p build/centos/$dist/rpmbuild/RPMS/noarch
199         mkdir -p build/centos/$dist/rpmbuild/RPMS/x86_64
200         mkdir -p build/centos/$dist/rpmbuild/SOURCES
201         mkdir -p build/centos/$dist/rpmbuild/SPECS
202         mkdir -p build/centos/$dist/rpmbuild/SRPMS
203         cp ${TAR} build/centos/$dist/rpmbuild/SOURCES
204         SPEC=${PRODUCT}.spec
205         cp ${SPEC} build/centos/$dist/rpmbuild/SPECS
206         cp IDMETA build/centos/$dist/rpmbuild
207         cp ${ID_DEB_BUILD}/in-docker-rpm.sh build/centos/$dist
208     done
209
210 fi
211
212 if $debian; then
213     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
214     if test ! -x $MKDEBSRC; then
215         echo "$MKDEBSRC not found"
216         exit 1
217     fi
218     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
219         echo "id-mk-deb-changelog.sh failed"
220     fi
221     rm -fr deb-src
222     if ! ${MKDEBSRC}; then
223         echo "id-mk-deb-src.sh failed"
224     fi
225     cd deb-src
226     for f in *.dsc; do
227         if test -f "$f"; then
228             DSC=$f
229         fi
230     done
231     cd ..
232     if test -z "$DSC"; then
233         echo "${DSC} does not exist"
234         exit 1
235     fi
236 fi
237 if test "${DEBIAN_DIST}"; then
238     prepare_deb debian "${DEBIAN_DIST}"
239 fi
240 if test "${UBUNTU_DIST}"; then
241     prepare_deb ubuntu "${UBUNTU_DIST}"
242 fi
243
244 if test "${CENTOS_DIST}"; then
245     for dist in ${CENTOS_DIST}; do
246         centos_map $dist
247         D=$?
248         F=$D
249         test $F = "5" && F=5.5
250         cd build/centos/$dist
251         echo "FROM centos:$D" >Dockerfile
252         echo "RUN yum install -y wget yum-utils redhat-rpm-config rpm-build gcc gcc-c++ make" >>Dockerfile
253         echo "RUN rpm --import http://ftp.indexdata.com/pub/yum/centos/$F/RPM-GPG-KEY-indexdata" >>Dockerfile
254         echo "RUN wget -q http://ftp.indexdata.com/pub/yum/centos/$F/indexdata.repo -P /etc/yum.repos.d/" >>Dockerfile
255         echo 'ENTRYPOINT ["/bin/sh", "-c"]' >>Dockerfile
256         docker build -t indexdata-build-centos:$D .
257         echo -n "$dist "
258         docker run --rm  -v "$PWD:/build" -w /build/rpmbuild indexdata-build-centos:$D ../in-docker-rpm.sh >log 2>&1
259         if test $? -eq 0; then
260                 echo Done
261         else
262                 echo "Fail. Inspect build/centos/$dist/log"
263                 exit 1
264         fi
265         cd ../../..
266     done
267 fi
268 if test "${DEBIAN_DIST}"; then
269     run_deb debian "${DEBIAN_DIST}"
270 fi
271 if test "${UBUNTU_DIST}"; then
272     run_deb ubuntu "${UBUNTU_DIST}"
273 fi
274
275 # Local Variables:
276 # mode:shell-script
277 # sh-indentation: 4
278 # sh-basic-offset: 4
279 # End:
280