Create debs with 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         [--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     echo "CentOS not yet supported"
61     exit 1
62     centos=true
63 else
64     centos=false
65 fi
66
67 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
68     debian=true
69     DNAME=`awk '/Source:/ {print $2}' debian/control`
70     if test "$NAME" -a "$NAME" != "$DNAME"; then
71         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
72         exit 1
73     fi
74     PRODUCT=$DNAME
75 else
76     debian=false
77 fi
78
79 if $upload; then
80     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
81     echo "Uploading to ${UPLOAD_URI}"
82     if $debian; then
83         if test -n "${DEBIAN_DIST}"; then
84             for dist in ${DEBIAN_DIST}; do
85                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
86                 if ! scp build/debian/${dist}/* ${UPLOAD_URI}/debian/${dist}; then
87                     echo "Upload failed for $dist"
88                     exit 1
89                 fi
90             done
91         fi
92         if test -n "${UBUNTU_DIST}"; then
93             for dist in ${UBUNTU_DIST}; do
94                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
95                 if ! scp build/ubuntu/${dist}/* ${UPLOAD_URI}/ubuntu/${dist}; then
96                     echo "Upload failed for $dist"
97                     exit 1
98                 fi
99             done
100         fi
101         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
102             echo "update-archive.sh failed"
103             exit 1
104         fi
105     fi
106     echo "Upload successful - we hope"
107     exit 0
108 fi
109
110 if $debian; then
111     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
112     if test ! -x $MKDEBSRC; then
113         echo "$MKDEBSRC not found"
114         exit 1
115     fi
116     cp ${ID_DEB_BUILD}/in-docker.sh .
117     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
118         echo "id-mk-deb-changelog.sh failed"
119     fi
120     if ! ${MKDEBSRC}; then
121         echo "id-mk-deb-src.sh failed"
122     fi
123     cd deb-src
124     for f in *.dsc; do
125         if test -f "$f"; then
126             DSC=$f
127         fi
128     done
129     cd ..
130     if test -z "$DSC"; then
131         echo "${DSC} does not exist"
132         exit 1
133     fi
134
135     if test "${DEBIAN_DIST}"; then
136         for dist in ${DEBIAN_DIST}; do
137             sudo rm -fr build/debian/$dist
138             mkdir -p build/debian
139             cp -a deb-src build/debian/$dist
140             cp ${ID_DEB_BUILD}/in-docker.sh build/debian/$dist
141         done
142     fi
143     if test "${UBUNTU_DIST}"; then
144         for dist in ${UBUNTU_DIST}; do
145             sudo rm -fr build/ubuntu/$dist
146             mkdir -p build/ubuntu
147             cp -a deb-src build/ubuntu/$dist
148             cp ${ID_DEB_BUILD}/in-docker.sh build/ubuntu/$dist
149         done
150     fi
151     if test "${DEBIAN_DIST}"; then
152         for dist in ${DEBIAN_DIST}; do
153             cd build/debian/$dist
154             docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION debian:$dist ../in-docker.sh debian $dist
155             cd ../../..
156         done
157     fi
158     if test "${UBUNTU_DIST}"; then
159         for dist in ${UBUNTU_DIST}; do
160             cd build/ubuntu/$dist
161             docker run -it --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION ubuntu:$dist ../in-docker.sh ubuntu $dist
162             cd ../../..
163         done
164     fi
165 fi
166
167 # Local Variables:
168 # mode:shell-script
169 # sh-indentation: 4
170 # sh-basic-offset: 4
171 # End:
172