#! /bin/bash -e
# build and test everything in a fresh docker installation
img = "ubuntu:latest"
repos = ""
keys = ""
envs = ""
dirs = " -v $( pwd ) :/workdir "
targets = "all check distcheck"
if test -e ./build-in-docker.conf; then
# you can preconfigure the variables in file build-in-docker.conf
# if you do so, add the file to EXTRA_DIST in makefile.am
source ./build-in-docker.conf
fi
while test $# -gt 0; do
case " $1 " in
( -h| --help)
echo " $0 [OPTIONS] "
echo
echo "OPTIONS:"
echo " -h, --help show this help"
echo " -i --image <image> use given docker image instead of ${ img } "
echo " -t --targets targets specify build targets, default: ${ targets } "
echo " -r --repo <url> add given apt repository"
echo " -k --key <url> add public key from url"
echo " -e --env <var>=<val> set environment variable in docker"
echo " -d --dir <dir> access given directory read only"
echo
echo "EXAMPLE:"
echo
echo " $0 -i mwaeckerlin/ubuntu:trusty-i386 \\ "
echo " -t deb \\"
echo " -e ANDROID_HOME=/opt/local/android \\"
echo " -d /opt/local/android \\"
echo " -r universe \\"
echo " -r https://dev.marc.waeckerlin.org/repository \\"
echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey"
echo
exit 0
; ;
( -i| --image) shift;
img = " $1 "
; ;
( -t| --targets) shift;
targets = " $1 "
; ;
( -r| --repo) shift;
repos += " $1 "
; ;
( -k| --key) shift;
keys += " $1 "
; ;
( -e| --env) shift;
envs += " -e $1 "
; ;
( -d| --dirs) shift;
dirs += " -v $1 : $1 :ro "
; ;
( *)
echo " **** ERROR: unknown option ' $1 ', try --help " 1>& 2
exit 1
; ;
esac
if test $# -eq 0; then
echo "**** ERROR: missing value, try --help" 2>61
exit 1
fi
shift
done
set -x
DOCKER_ID = $( docker run -d ${ dirs } ${ envs } -w /workdir $img sleep infinity)
trap " docker rm -f ${ DOCKER_ID } " INT TERM EXIT
docker exec ${ DOCKER_ID } apt-get install -y software-properties-common apt-transport-https dpkg-dev
if test -n " ${ repos } " ; then
for repo in ${ repos } ; do
docker exec ${ DOCKER_ID } apt-add-repository ${ repo }
done
fi
if test -n " ${ keys } " ; then
for key in ${ keys } ; do
wget -O- ${ key } \
| docker exec -i ${ DOCKER_ID } apt-key add -
done
fi
docker exec ${ DOCKER_ID } apt-get update
docker exec ${ DOCKER_ID } ./resolve-debbuilddeps.sh
docker exec -u $( id -u) ${ DOCKER_ID } svn upgrade || true
docker exec -u $( id -u) ${ DOCKER_ID } ./bootstrap.sh -t " ${ targets } "