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