Reorganized travis building.

1. travis/build-prereqs.sh will build all the from-source dependencies;
    i.e. dune, superLU and ert.

 2. travis/clone-opm.sh will clone all opm modules, except the module
    given as commandline argument; it is assumed that travis has already
    fetched and merged the correct ref of this repo.

 3. travis/build-and-test.sh will build all upstream modules and then
    build and test the module given as commandline argument including
    all downstream modules:

       travis/build-and-test.sh  opm-output

With this the .travis.yml file can be nearly identical for each module,
e.g. for opm-output the before_script and script sections will be:

   before_script:
       - export CXX="g++-4.8" CC="gcc-4.8" FC="gfortran-4.8"
       - cd ..
       - opm-common/travis/build-prereqs.sh
       - opm-common/travis/clone-opm.sh opm-output

   script: opm-common/travis/build-and-test.sh opm-output
This commit is contained in:
Joakim Hove 2016-06-03 09:50:39 +02:00
parent 82b638b429
commit 422a11c6c7
4 changed files with 189 additions and 1 deletions

View File

@ -13,9 +13,18 @@ addons:
- gcc-4.8 - gcc-4.8
- g++-4.8 - g++-4.8
- gfortran-4.8 - gfortran-4.8
- liblapack-dev
- libgmp3-dev
- libsuitesparse-dev
- libeigen3-dev
before_script: before_script:
- export CXX="g++-4.8" CC="gcc-4.8" FC="gfortran-4.8" - export CXX="g++-4.8" CC="gcc-4.8" FC="gfortran-4.8"
- cd .. - cd ..
- opm-common/travis/build-prereqs.sh
- opm-common/travis/clone-opm.sh opm-common
script: opm-common/travis/build-and-test.sh opm-common
script: opm-common/travis/build-and-test-opm-common.sh

86
travis/build-and-test.sh Executable file
View File

@ -0,0 +1,86 @@
#!/bin/bash
set -e
build_order=(opm-common opm-parser opm-material opm-core opm-output opm-grid opm-simulators opm-upscaling)
# This shell script should be started with the name of a module as
# only only command line argument. It will start by building all
# upstream modules, then it will build and test the module of interest
# and all downstream modules.
#
# Before invoking this script all the modules should have been cloned
# in sibling directories, so that this script will see this directory
# structure:
#
# opm-common/
# opm-parser/
# opm-material/
# opm-output/
# opm-core/
# opm-grid/
# opm-simulators/
# opm-upscaling/
#
#
# This can typically be achived by using the 'clone-opm.sh' script.
function upstream_build {
project=${1}
echo "Building: ${project}"
mkdir -p ${project}/build
pushd ${project}/build > /dev/null
cmake ../ -DENABLE_PYTHON=ON -DBUILD_TESTING=OFF -DSILENCE_EXTERNAL_WARNINGS=True
make
popd > /dev/null
}
function downstream_build_and_test {
project=${1}
echo "Building and testing: ${project}"
mkdir -p ${project}/build
pushd ${project}/build > /dev/null
# The build commands cmake, make and ctest must be given as
# separate commands and not chained with &&. If chaining with &&
# is used the 'set -e' does not exit on first error.
cmake ../ -DENABLE_PYTHON=ON -DBUILD_TESTING=ON -DSILENCE_EXTERNAL_WARNINGS=True
make
ctest --output-on-failure
popd > /dev/null
}
for i in "${!build_order[@]}"; do
if [[ "${build_order[$i]}" = "$1" ]]; then
project_index=$i
fi
done
if [[ -z ${project_index} ]]; then
echo "${0}: Project: ${1} not recognized."
exit 1
fi
build_index=0
while [ $build_index -lt ${project_index} ];
do
project=${build_order[$build_index]}
upstream_build ${project}
build_index=$((build_index + 1))
done
while [ $build_index -lt ${#build_order[@]} ]
do
project=${build_order[$build_index]}
downstream_build_and_test ${project}
build_index=$((build_index + 1))
done

71
travis/build-prereqs.sh Executable file
View File

@ -0,0 +1,71 @@
#!/bin/bash
set -e
# This script should build all the OPM dependencies which are installed from source.
# The build_dune function should take the module name as the first
# argument. By default the script will clone the source from:
#
# https://github.com/dune-project/${project}.git
#
# But you can optionally supply a git url as second argument, i.e.
#
# build_dune dune-alugrid https://gitlab.dune-project.org/extensions/dune-alugrid.git
#
# to build the dune-alugrid module which is not found at github.
function build_dune {
project=$1
if [[ $# -eq 1 ]]; then
url=https://github.com/dune-project/${project}.git
else
url=$2
fi
pushd . > /dev/null
git clone ${url}
cd ${project}
git checkout tags/v2.3.1
mkdir build
cd build
cmake ../
make
popd > /dev/null
}
function build_superlu {
pushd . > /dev/null
git clone https://github.com/starseeker/SuperLU.git
cd SuperLU
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=.. -D SUPERLU_BUILD_EXAMPLES=OFF -D SUPERLU_ENABLE_TESTING=OFF ../
make install
popd > /dev/null
}
function build_ert {
git clone https://github.com/Ensembles/ert.git
mkdir -p ert/build
pushd ert/build > /dev/null
cmake ../devel && make
popd > /dev/null
}
#################################################################
build_superlu
build_ert
build_dune dune-common
build_dune dune-istl
build_dune dune-geometry
build_dune dune-grid

22
travis/clone-opm.sh Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -e
project_list=(opm-data opm-common opm-parser opm-material opm-core opm-output opm-grid opm-simulators opm-upscaling ewoms)
# Will clone all the projects *except* the one project given as commandline argument; that
# has typically been checked out by travis already.
function clone_project {
url=https://github.com/OPM/${1}.git
git clone $url
}
for project in "${project_list[@]}"; do
if [ "$project" != $1 ]; then
clone_project $project
fi
done