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