#! /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 use given docker image instead of ${img}" echo " -t --targets targets specify build targets, default: ${targets}" echo " -r --repo add given apt repository" echo " -k --key add public key from url" echo " -e --env = set environment variable in docker" echo " -d --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}"