Using mock inside container
[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
85 if $upload; then
86     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
87     echo "Uploading to ${UPLOAD_URI}"
88     if $debian; then
89         if test -n "${DEBIAN_DIST}"; then
90             for dist in ${DEBIAN_DIST}; do
91                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
92                 if ! scp build/debian/${dist}/* ${UPLOAD_URI}/debian/${dist}; then
93                     echo "Upload failed for $dist"
94                     exit 1
95                 fi
96             done
97         fi
98         if test -n "${UBUNTU_DIST}"; then
99             for dist in ${UBUNTU_DIST}; do
100                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
101                 if ! scp build/ubuntu/${dist}/* ${UPLOAD_URI}/ubuntu/${dist}; then
102                     echo "Upload failed for $dist"
103                     exit 1
104                 fi
105             done
106         fi
107         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
108             echo "update-archive.sh failed"
109             exit 1
110         fi
111     fi
112     echo "Upload successful - we hope"
113     exit 0
114 fi
115
116 if $centos; then
117     mkdir -p rpmbuild/BUILD
118     mkdir -p rpmbuild/BUILDROOT
119     mkdir -p rpmbuild/RPMS/noarch
120     mkdir -p rpmbuild/RPMS/x86_64
121     mkdir -p rpmbuild/SOURCES
122     mkdir -p rpmbuild/SPECS
123     mkdir -p rpmbuild/SRPMS
124
125     echo "%_topdir /home/mock/rpmbuild" >rpmbuild/rpmmacros
126     echo "%_source_filedigest_algorithm   0" >>rpmbuild/rpmmacros
127     echo "%_binary_filedigest_algorithm   0" >>rpmbuild/rpmmacros
128
129     cp ${ID_DEB_BUILD}/Dockerfile.mock rpmbuild
130     cp ${TAR} rpmbuild/SOURCES
131     SPEC=${PRODUCT}.spec
132     cat ${SPEC}|sed "s/%define idmetaversion.*/%define idmetaversion ${VERSION}/" >rpmbuild/SPECS/${SPEC}
133
134     if true; then
135         for dist in ${CENTOS_DIST}; do
136             case $dist in
137                 centos5)
138                     r=epel-5-x86_64 ;;
139                 centos6)
140                     r=epel-6-x86_64 ;;
141                 centos7)
142                     r=epel-7-x86_64 ;;
143                 *)
144                     r=$dist ;;
145             esac
146             echo -n "$r"
147
148             rm -f rpmbuild/run.sh
149             echo '#!/bin/sh' >rpmbuild/run.sh
150             echo "rpmbuild -bs rpmbuild/SPECS/${SPEC}" >>rpmbuild/run.sh
151             echo "/usr/bin/mock --resultdir=rpmbuild -r $r rpmbuild/SRPMS/${PRODUCT}-${VERSION}*src.rpm" >>rpmbuild/run.sh
152
153             docker build -t indexdata-fedora-mock -f rpmbuild/Dockerfile.mock .
154             docker run --privileged -it --rm indexdata-fedora-mock rpmbuild/run.sh
155             echo "done"
156         done
157     fi
158 fi
159 if $debian; then
160     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
161     if test ! -x $MKDEBSRC; then
162         echo "$MKDEBSRC not found"
163         exit 1
164     fi
165     cp ${ID_DEB_BUILD}/in-docker.sh .
166     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
167         echo "id-mk-deb-changelog.sh failed"
168     fi
169     if ! ${MKDEBSRC}; then
170         echo "id-mk-deb-src.sh failed"
171     fi
172     cd deb-src
173     for f in *.dsc; do
174         if test -f "$f"; then
175             DSC=$f
176         fi
177     done
178     cd ..
179     if test -z "$DSC"; then
180         echo "${DSC} does not exist"
181         exit 1
182     fi
183
184     if test "${DEBIAN_DIST}"; then
185         for dist in ${DEBIAN_DIST}; do
186             sudo rm -fr build/debian/$dist
187             mkdir -p build/debian
188             cp -a deb-src build/debian/$dist
189             cp ${ID_DEB_BUILD}/in-docker.sh build/debian/$dist
190         done
191     fi
192     if test "${UBUNTU_DIST}"; then
193         for dist in ${UBUNTU_DIST}; do
194             sudo rm -fr build/ubuntu/$dist
195             mkdir -p build/ubuntu
196             cp -a deb-src build/ubuntu/$dist
197             cp ${ID_DEB_BUILD}/in-docker.sh build/ubuntu/$dist
198         done
199     fi
200     if test "${DEBIAN_DIST}"; then
201         for dist in ${DEBIAN_DIST}; do
202             cd build/debian/$dist
203             docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION debian:$dist ../in-docker.sh debian $dist
204             cd ../../..
205         done
206     fi
207     if test "${UBUNTU_DIST}"; then
208         for dist in ${UBUNTU_DIST}; do
209             cd build/ubuntu/$dist
210             docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION ubuntu:$dist ../in-docker.sh ubuntu $dist
211             cd ../../..
212         done
213     fi
214 fi
215
216 # Local Variables:
217 # mode:shell-script
218 # sh-indentation: 4
219 # sh-basic-offset: 4
220 # End:
221