[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v8 1/2] OSSTEST: introduce a raisin build test
Introduce a raisin build test to OSSTest. The build is meant to test Raisin itself. Enable the raisin build just for xen-unstable. Disable it for all the older Xen branches and for all the non-Xen branches. The components built by the raisin job are static; the list is written by ts-raisin-build. Don't automatically generate the list as the component names are not regular. The versions of the components and their git tree urls are passed by mfi-common to ts-raisin-build. mfi-common passes the same TREE_ and REVISION_ variables used with the other jobs. ts-raisin-build writes them to the raisin config file, overwriting the defaults, only if both the tree and revision variables for a component are set, to avoid inconsistencies. For example mfi-common can pass a revision only present in a specific git tree, but not the corresponding git tree. Make divide_xen_build common between ts-raisin-build and ts-xen-build. It is used to split the build output in two archives: one with the hypervisor binary and another with the userspace tools. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- Changes in v8: - update commit message - do not install-builddep in ts-raisin-build, rely on ts-xen-build-dep Changes in v7: - update raisin git url after http://marc.info/?l=xen-devel&m=143472251602803 Changes in v6: - move divide to Osstest/BuildSupport.pm and rename it to divide_xen_build; use divide_xen_build in ts-raisin-build and ts-xen-build. Changes in v5: - remove setting DEFAULT_REVISION_RAISIN to master - disable raisin when branch is not xen* - do not overwrite raisin default variables unless both revision_* and tree_* are set of a given component Changes in v4: - introduce enable_raisin in mfi-common: only build raisin when building xen-unstable - start off from the default raisin config, then append osstest config options to it - do not write variable to the raisin config if the conrresponding runvar is not set - remove TREE_OVMF and TREE_SEABIOS Changes in v3: - use $raisindir throughout ts-raisin-build - do not specify ENABLED_COMPONENTS so that empty REVISION variables can be used to disable building a raisin component Changes in v2: - set revision_* variables in mfi-common; - in ts-raisin-build set the *_REVISION config options based on the revision_* variables; - in ts-raisin-build, call store_revision appropriately; - divide the output in an hypervisor and a tools tarball. --- Osstest/BuildSupport.pm | 48 ++++++++++++++++++ ap-common | 2 + mfi-common | 41 +++++++++++++++ sg-run-job | 5 ++ ts-raisin-build | 128 +++++++++++++++++++++++++++++++++++++++++++++++ ts-xen-build | 44 +--------------- 6 files changed, 226 insertions(+), 42 deletions(-) create mode 100755 ts-raisin-build diff --git a/Osstest/BuildSupport.pm b/Osstest/BuildSupport.pm index 933f6e1..76a3feb 100644 --- a/Osstest/BuildSupport.pm +++ b/Osstest/BuildSupport.pm @@ -43,6 +43,10 @@ BEGIN { xendist $xendist + divide_xen_build + trapping + die_if_fail + submodulefixup submodule_have submodule_find ); @@ -84,6 +88,50 @@ sub xendist () { ($ho, 'xendist', '', $r{"buildjob"}); } +sub divide_xen_build ($$) { + my ($subdir, $postfix) = @_; + # Only move hv to xeninstall, so that we can have + # xenpolicy in tools tarball. + # + # The files inside boot/ after `make dist' are + # xen-$XEN_VERSION: Xen binary + # xen.gz/xen: symlink to xen-$XEN_VERSION + # xen-$MAJOR: symlink to xen-$XEN_VERSION + # xen-$MAJOR.$MINOR: symlink to xen-$XEN_VERSION + # xen-sym-$XEN_VERSION: Xen symbol + # xenpolicy-$XEN_VERSION: flask policy binary if xsm is enabled + # + # So the following snippet will leave xenpolicy* in + # install/boot and get packaged to tools tarball. + target_cmd_build($ho, 100, $builddir, <<END); + cd $subdir + mkdir xen$postfix + for f in *$postfix; do + mkdir -p \$f/lib + done + if test -d $postfix/boot; then + if test -f $postfix/boot/xen.gz || test -f $postfix/boot/xen; then + mkdir xen$postfix/boot + mvfiles=`find $postfix/boot -name 'xen[a-z]*' -prune -o -name 'xen*' -print` + mv \$mvfiles xen$postfix/boot/. + fi + fi +END +} + +our @probs; + +sub trapping ($) { + my ($sub) = @_; + my $tok= eval { $sub->(); 1; }; + if (!$tok) { push @probs, $@; print STDERR "failure (trapped): $@\n"; } +} + +sub die_if_fail () { + die "*** something failed:\n\n".(join "\n\n",@probs)."\n** something failed" + if @probs; +} + #----- submodules ----- sub submodulefixup ($$$$) { diff --git a/ap-common b/ap-common index 64749e3..6e1c472 100644 --- a/ap-common +++ b/ap-common @@ -47,6 +47,8 @@ # rumpsrc-related runvars needed only for old rumpuser-xen # (ie ones which need $bodges=1 in ts-rumpuserxen-build) +: ${TREE_RAISIN:=git://xenbits.xen.org/raisin.git} + : ${TREE_SEABIOS_UPSTREAM:=git://git.seabios.org/seabios.git} : ${PUSH_TREE_SEABIOS:=$XENBITS:/home/xen/git/osstest/seabios.git} : ${BASE_TREE_SEABIOS:=git://xenbits.xen.org/osstest/seabios.git} diff --git a/mfi-common b/mfi-common index 16fc8c5..d75823d 100644 --- a/mfi-common +++ b/mfi-common @@ -148,6 +148,22 @@ create_build_jobs () { *) enable_ovmf=true; esac + case "$xenbranch" in + xen-3.*-testing) enable_raisin=false;; + xen-4.0-testing) enable_raisin=false;; + xen-4.1-testing) enable_raisin=false;; + xen-4.2-testing) enable_raisin=false;; + xen-4.3-testing) enable_raisin=false;; + xen-4.4-testing) enable_raisin=false;; + xen-4.5-testing) enable_raisin=false;; + *) enable_raisin=true; + esac + case "$branch" in + xen*) ;; + *) enable_raisin=false;; + esac + + eval " arch_runvars=\"\$ARCH_RUNVARS_$arch\" " @@ -215,6 +231,31 @@ create_build_jobs () { fi + if [ "x$REVISION_RAISIN" != xdisable ] && [ "$enable_raisin" = "true" ]; then + + ./cs-job-create $flight build-$arch-raisin build-raisin \ + arch=$arch \ + tree_xen=$TREE_XEN \ + $RUNVARS $BUILD_RUNVARS $BUILD_RAISIN_RUNVARS $arch_runvars \ + $suite_runvars \ + host_hostflags=$build_hostflags \ + buildjob=${bfi}build-$arch \ + tree_raisin=$TREE_RAISIN \ + tree_qemuu=$TREE_QEMU_UPSTREAM \ + tree_qemu=$TREE_QEMU \ + tree_seabios=$TREE_SEABIOS \ + tree_libvirt=$TREE_LIBVIRT \ + tree_ovmf=$TREE_OVMF \ + revision_xen=$REVISION_XEN \ + revision_qemu=$REVISION_QEMU \ + revision_qemuu=$REVISION_QEMU_UPSTREAM \ + revision_seabios=$REVISION_SEABIOS \ + revision_ovmf=$REVISION_OVMF \ + revision_libvirt=$REVISION_LIBVIRT \ + revision_raisin=${REVISION_RAISIN:-${DEFAULT_REVISION_RAISIN}}\ + + fi + if branch_wants_rumpkernel_tests; then case $arch in diff --git a/sg-run-job b/sg-run-job index eae159d..449118d 100755 --- a/sg-run-job +++ b/sg-run-job @@ -346,6 +346,7 @@ proc need-hosts/build {} { return BUILD } proc need-hosts/build-kern {} { return BUILD } proc need-hosts/build-libvirt {} { return BUILD } proc need-hosts/build-rumpuserxen {} { return BUILD } +proc need-hosts/build-raisin {} { return BUILD } proc run-job/build {} { run-ts . = ts-xen-build @@ -364,6 +365,10 @@ proc run-job/build-rumpuserxen {} { run-ts . = ts-xen-build + host tools } +proc run-job/build-raisin {} { + run-ts . = ts-raisin-build +} + proc prepare-build-host {} { global jobinfo run-ts broken = ts-hosts-allocate + host diff --git a/ts-raisin-build b/ts-raisin-build new file mode 100755 index 0000000..85f12d4 --- /dev/null +++ b/ts-raisin-build @@ -0,0 +1,128 @@ +#!/usr/bin/perl -w +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2009-2013 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +use strict qw(vars); +use DBI; +use Osstest; +use File::Path; +use POSIX; +use Osstest::TestSupport; +use Osstest::BuildSupport; + +tsreadconfig(); +selectbuildhost(\@ARGV); +# remaining arguments are passed as targets to "make" +builddirsprops(); + +my $raisindir="$builddir/raisin"; + +sub checkout () { + prepbuilddirs(); + build_clone($ho, 'raisin', $builddir, 'raisin'); + + target_cmd_build($ho, 100, $builddir, <<END. + cd $raisindir + cp defconfig config + >>config + + echo >>config MAKE=\\"make $makeflags\\" + echo >>config PREFIX=\\"/usr\\" + echo >>config DESTDIR=dist + echo >>config ENABLED_COMPONENTS=\\"seabios ovmf xen qemu qemu_traditional libvirt\\" +END + (nonempty($r{tree_xen}) && nonempty($r{revision_xen}) ? <<END : ''). + echo >>config XEN_URL=\\"$r{tree_xen}\\" + echo >>config XEN_REVISION=\\"$r{revision_xen}\\" +END + (nonempty($r{tree_qemuu}) && nonempty($r{revision_qemuu}) ? <<END : ''). + echo >>config QEMU_URL=\\"$r{tree_qemuu}\\" + echo >>config QEMU_REVISION=\\"$r{revision_qemuu}\\" +END + (nonempty($r{tree_qemu}) && nonempty($r{revision_qemu}) ? <<END : ''). + echo >>config QEMU_TRADITIONAL_URL=\\"$r{tree_qemu}\\" + echo >>config QEMU_TRADITIONAL_REVISION=\\"$r{revision_qemu}\\" +END + (nonempty($r{tree_seabios}) && nonempty($r{revision_seabios}) ? <<END : ''). + echo >>config SEABIOS_URL=\\"$r{tree_seabios}\\" + echo >>config SEABIOS_REVISION=\\"$r{revision_seabios}\\" +END + (nonempty($r{tree_libvirt}) && nonempty($r{revision_libvirt}) ? <<END : ''). + echo >>config LIBVIRT_URL=\\"$r{tree_libvirt}\\" + echo >>config LIBVIRT_REVISION=\\"$r{revision_libvirt}\\" +END + (nonempty($r{tree_ovmf}) && nonempty($r{revision_ovmf}) ? <<END : '') + echo >>config OVMF_URL=\\"$r{tree_ovmf}\\" + echo >>config OVMF_REVISION=\\"$r{revision_ovmf}\\" +END + ); +} + +sub build () { + target_cmd_build($ho, 9000, $builddir, <<END); + cd $raisindir + ./raise -n build +END +#/; +} + +sub checkoutput () { + target_cmd_build($ho, 100, $builddir, <<END); + cd $raisindir/dist + ls boot/xen.gz + ls usr/sbin/xenstored + ls usr/sbin/xenconsoled + ls usr/lib/libxenlight.so + ls usr/sbin/xl + ls usr/lib/xen/boot/hvmloader + ls usr/lib/xen/bin/qemu-dm + ls usr/lib/xen/bin/qemu-system-i386 + ls usr/sbin/libvirtd +END +#/; +} + +sub collectversions () { + store_revision($ho, 'xen', "$raisindir/xen-dir", 1); + store_revision($ho, 'qemu', "$raisindir/qemu-traditional-dir", 1); + store_revision($ho, 'qemuu', "$raisindir/qemu-dir", 1); + store_revision($ho, 'seabios', "$raisindir/seabios-dir", 1); + store_revision($ho, 'ovmf', "$raisindir/ovmf-dir", 1); + store_revision($ho, 'libvirt', "$raisindir/libvirt-dir", 1); +} + +sub stash () { + foreach my $part ('', 'xen') { + built_stash($ho, $builddir, + "raisin/${part}dist", + "${part}dist"); + } + built_stash_file($ho, $builddir, "xen-syms", "raisin/xen-dir/xen/xen-syms", 1); + built_stash_file($ho, $builddir, "raisin-config", "raisin/config", 1); + built_stash_file($ho, $builddir, "seabios-config", + "raisin/seabios-dir/.config", 1); + built_compress_stashed("xen-syms"); +} + + +checkout(); +trapping(\&build); +trapping(\&checkoutput); +trapping(\&collectversions); +divide_xen_build('raisin', 'dist'); +stash(); +die_if_fail(); + diff --git a/ts-xen-build b/ts-xen-build index e757f68..10fc95b 100755 --- a/ts-xen-build +++ b/ts-xen-build @@ -145,36 +145,6 @@ sub collectversions () { store_revision($ho, 'ovmf', "$tools/firmware/ovmf-dir", 1); } -sub divide () { - # Only move hv to xeninstall, so that we can have - # xenpolicy in tools tarball. - # - # The files inside boot/ after `make dist' are - # xen-$XEN_VERSION: Xen binary - # xen.gz/xen: symlink to xen-$XEN_VERSION - # xen-$MAJOR: symlink to xen-$XEN_VERSION - # xen-$MAJOR.$MINOR: symlink to xen-$XEN_VERSION - # xen-sym-$XEN_VERSION: Xen symbol - # xenpolicy-$XEN_VERSION: flask policy binary if xsm is enabled - # - # So the following snippet will leave xenpolicy* in - # install/boot and get packaged to tools tarball. - target_cmd_build($ho, 100, $builddir, <<END); - cd xen/dist - mkdir xeninstall - for f in *install; do - mkdir -p \$f/lib - done - if test -d install/boot; then - if test -f install/boot/xen.gz || test -f install/boot/xen; then - mkdir xeninstall/boot - mvfiles=`find install/boot -name 'xen[a-z]*' -prune -o -name 'xen*' -print` - mv \$mvfiles xeninstall/boot/. - fi - fi -END -} - sub stash () { foreach my $part ('', 'xen') { built_stash($ho, $builddir, @@ -212,22 +182,12 @@ END $chk->finish(); } -our @probs; - -sub trapping ($) { - my ($sub) = @_; - my $tok= eval { $sub->(); 1; }; - if (!$tok) { push @probs, $@; print STDERR "failure (trapped): $@\n"; } -} - checkout(); trapping(\&build); trapping(\&collectversions); +die_if_fail(); -die "*** something failed:\n\n".(join "\n\n",@probs)."\n** something failed" - if @probs; - -divide(); +divide_xen_build('xen/dist', 'install'); stash(); checkversions(); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |