Docker testing and shippable patches

Hi Peter,
 
 These are testing and build automation patches:
 
 - Shippable.com powered CI config
 - Docker cross build
 - Fixes and MAINTAINERS tweaks.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQEtBAABCAAXBQJYr9MuEBxmYW16QHJlZGhhdC5jb20ACgkQyjViTGqRccb9cQf9
 FRjpMS0LP0IGTF6YkURivG09bPsl9owGfiZjRNo2DnEFmATY+aOoSvJMNyUBGwsi
 k9I1AgWZ6VPob4TDqDnPWHaNGNGLb7quP0rMN/Q2TvPGbmkevD4o7SX5cDCEPA/D
 QLxvG/SYb1R6a9lEmmyPgk8Q7zwB3nVAITvQMLVwVgzGk8t6uDNHBt+Fckf4zyJL
 XbuKYqAgICRGMDhuqqF9IkVO7wHCS3Gh0SqNKDMEZPeEgnWjFbyjsZxIJihk7tZP
 ZFCLEtnNYmNZmeFAJCL8p7PvsnXHF0lcWTIVzC5FOjPu9ytmcqw3GmgvghmCjFrG
 aGH8BYguc+SmQOUqtnR4lA==
 =JQKW
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/famz/tags/for-upstream' into staging

Docker testing and shippable patches

Hi Peter,

These are testing and build automation patches:

- Shippable.com powered CI config
- Docker cross build
- Fixes and MAINTAINERS tweaks.

# gpg: Signature made Fri 24 Feb 2017 06:31:10 GMT
# gpg:                using RSA key 0xCA35624C6A9171C6
# gpg: Good signature from "Fam Zheng <famz@redhat.com>"
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 5003 7CB7 9706 0F76 F021  AD56 CA35 624C 6A91 71C6

* remotes/famz/tags/for-upstream:
  docker: Install python2 explicitly in docker image
  MAINTAINERS: merge Build and test automation with Docker tests
  .shippable.yml: new CI provider
  new: debian docker targets for cross-compiling
  tests/docker: add basic user mapping support

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2017-02-25 16:37:32 +00:00
commit f62ab6bb8f
9 changed files with 102 additions and 11 deletions

19
.shippable.yml Normal file
View File

@ -0,0 +1,19 @@
language: c
env:
matrix:
- IMAGE=debian-armhf-cross
TARGET_LIST=arm-softmmu,arm-linux-user
- IMAGE=debian-arm64-cross
TARGET_LIST=aarch64-softmmu,aarch64-linux-user
build:
pre_ci:
- make docker-image-${IMAGE}
pre_ci_boot:
image_name: qemu
image_tag: ${IMAGE}
pull: false
options: "-e HOME=/root"
ci:
- unset CC
- ./configure ${QEMU_CONFIGURE_OPTS} --target-list=${TARGET_LIST}
- make -j2

View File

@ -1800,9 +1800,14 @@ F: docs/block-replication.txt
Build and test automation Build and test automation
------------------------- -------------------------
M: Alex Bennée <alex.bennee@linaro.org> M: Alex Bennée <alex.bennee@linaro.org>
M: Fam Zheng <famz@redhat.com>
L: qemu-devel@nongnu.org L: qemu-devel@nongnu.org
S: Supported S: Maintained
F: .travis.yml F: .travis.yml
F: .shippable.yml
F: tests/docker/
W: https://travis-ci.org/qemu/qemu
W: http://patchew.org/QEMU/
Documentation Documentation
------------- -------------
@ -1811,9 +1816,3 @@ M: Daniel P. Berrange <berrange@redhat.com>
S: Odd Fixes S: Odd Fixes
F: docs/build-system.txt F: docs/build-system.txt
Docker testing
--------------
Docker based testing framework and cases
M: Fam Zheng <famz@redhat.com>
S: Maintained
F: tests/docker/

View File

@ -50,9 +50,14 @@ docker-image-%: $(DOCKER_FILES_DIR)/%.docker
$(call quiet-command,\ $(call quiet-command,\
$(SRC_PATH)/tests/docker/docker.py build qemu:$* $< \ $(SRC_PATH)/tests/docker/docker.py build qemu:$* $< \
$(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \ $(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \
$(if $(NOUSER),,--add-current-user) \
$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\ $(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\
"BUILD","$*") "BUILD","$*")
# Enforce dependancies for composite images
docker-image-debian-armhf-cross: docker-image-debian
docker-image-debian-arm64-cross: docker-image-debian
# Expand all the pre-requistes for each docker image and test combination # Expand all the pre-requistes for each docker image and test combination
$(foreach i,$(DOCKER_IMAGES), \ $(foreach i,$(DOCKER_IMAGES), \
$(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \ $(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \
@ -99,6 +104,7 @@ docker:
@echo ' (default is 1)' @echo ' (default is 1)'
@echo ' DEBUG=1 Stop and drop to shell in the created container' @echo ' DEBUG=1 Stop and drop to shell in the created container'
@echo ' before running the command.' @echo ' before running the command.'
@echo ' NOUSER Define to disable adding current user to containers passwd.'
@echo ' NOCACHE=1 Ignore cache when build images.' @echo ' NOCACHE=1 Ignore cache when build images.'
@echo ' EXECUTABLE=<path> Include executable in image.' @echo ' EXECUTABLE=<path> Include executable in image.'

View File

@ -29,7 +29,7 @@ build_qemu()
config_opts="--enable-werror \ config_opts="--enable-werror \
${TARGET_LIST:+--target-list=${TARGET_LIST}} \ ${TARGET_LIST:+--target-list=${TARGET_LIST}} \
--prefix=$PWD/install \ --prefix=$PWD/install \
$EXTRA_CONFIGURE_OPTS \ $QEMU_CONFIGURE_OPTS $EXTRA_CONFIGURE_OPTS \
$@" $@"
echo "Configure options:" echo "Configure options:"
echo $config_opts echo $config_opts

View File

@ -25,6 +25,7 @@
from tarfile import TarFile, TarInfo from tarfile import TarFile, TarInfo
from StringIO import StringIO from StringIO import StringIO
from shutil import copy, rmtree from shutil import copy, rmtree
from pwd import getpwuid
DEVNULL = open(os.devnull, 'wb') DEVNULL = open(os.devnull, 'wb')
@ -149,13 +150,21 @@ def get_image_dockerfile_checksum(self, tag):
labels = json.loads(resp)[0]["Config"].get("Labels", {}) labels = json.loads(resp)[0]["Config"].get("Labels", {})
return labels.get("com.qemu.dockerfile-checksum", "") return labels.get("com.qemu.dockerfile-checksum", "")
def build_image(self, tag, docker_dir, dockerfile, quiet=True, argv=None): def build_image(self, tag, docker_dir, dockerfile,
quiet=True, user=False, argv=None):
if argv == None: if argv == None:
argv = [] argv = []
tmp_df = tempfile.NamedTemporaryFile(dir=docker_dir, suffix=".docker") tmp_df = tempfile.NamedTemporaryFile(dir=docker_dir, suffix=".docker")
tmp_df.write(dockerfile) tmp_df.write(dockerfile)
if user:
uid = os.getuid()
uname = getpwuid(uid).pw_name
tmp_df.write("\n")
tmp_df.write("RUN id %s 2>/dev/null || useradd -u %d -U %s" %
(uname, uid, uname))
tmp_df.write("\n") tmp_df.write("\n")
tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s" % tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s" %
_text_checksum(dockerfile)) _text_checksum(dockerfile))
@ -225,6 +234,9 @@ def args(self, parser):
help="""Specify a binary that will be copied to the help="""Specify a binary that will be copied to the
container together with all its dependent container together with all its dependent
libraries""") libraries""")
parser.add_argument("--add-current-user", "-u", dest="user",
action="store_true",
help="Add the current user to image's passwd")
parser.add_argument("tag", parser.add_argument("tag",
help="Image Tag") help="Image Tag")
parser.add_argument("dockerfile", parser.add_argument("dockerfile",
@ -261,7 +273,7 @@ def run(self, args, argv):
docker_dir) docker_dir)
dkr.build_image(tag, docker_dir, dockerfile, dkr.build_image(tag, docker_dir, dockerfile,
quiet=args.quiet, argv=argv) quiet=args.quiet, user=args.user, argv=argv)
rmtree(docker_dir) rmtree(docker_dir)

View File

@ -0,0 +1,15 @@
#
# Docker arm64 cross-compiler target
#
# This docker target builds on the base debian image.
#
FROM qemu:debian
# Add the foreign architecture we want and install dependencies
RUN dpkg --add-architecture arm64
RUN apt update
RUN apt install -yy crossbuild-essential-arm64
RUN apt-get build-dep -yy -a arm64 qemu
# Specify the cross prefix for this image (see tests/docker/common.rc)
ENV QEMU_CONFIGURE_OPTS --cross-prefix=aarch64-linux-gnu-

View File

@ -0,0 +1,15 @@
#
# Docker armhf cross-compiler target
#
# This docker target builds on the base debian image.
#
FROM qemu:debian
# Add the foreign architecture we want and install dependencies
RUN dpkg --add-architecture armhf
RUN apt update
RUN apt install -yy crossbuild-essential-armhf
RUN apt-get build-dep -yy -a armhf qemu
# Specify the cross prefix for this image (see tests/docker/common.rc)
ENV QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabihf-

View File

@ -0,0 +1,25 @@
#
# Docker multiarch cross-compiler target
#
# This docker target is builds on Debian and Emdebian's cross compiler targets
# to build distro with a selection of cross compilers for building test binaries.
#
# On its own you can't build much but the docker-foo-cross targets
# build on top of the base debian image.
#
FROM debian:stable-slim
# Setup some basic tools we need
RUN apt update
RUN apt install -yy curl aptitude
# Setup Emdebian
RUN echo "deb http://emdebian.org/tools/debian/ jessie main" >> /etc/apt/sources.list
RUN curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
# Duplicate deb line as deb-src
RUN cat /etc/apt/sources.list | sed "s/deb/deb-src/" >> /etc/apt/sources.list
# Install common build utilities
RUN apt update
RUN apt install -yy build-essential clang

View File

@ -1,6 +1,6 @@
FROM fedora:latest FROM fedora:latest
ENV PACKAGES \ ENV PACKAGES \
ccache git tar PyYAML sparse flex bison \ ccache git tar PyYAML sparse flex bison python2 \
glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel \ glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel \
gcc gcc-c++ clang make perl which bc findutils \ gcc gcc-c++ clang make perl which bc findutils \
mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config \ mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config \