-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
276 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,91 +1,118 @@ | ||
os: | ||
- linux | ||
|
||
language: | ||
- cpp | ||
language: cpp | ||
dist: trusty | ||
sudo: required | ||
os: linux | ||
|
||
compiler: | ||
- gcc | ||
- clang | ||
|
||
env: | ||
global: | ||
- CACHE_DIR=~/cached-deps | ||
matrix: | ||
- YARP_CHECKOUT=master | ||
- YARP_CHECKOUT=v2.3.72.1 | ||
- YARP_CHECKOUT=v2.3.70.2 | ||
|
||
matrix: | ||
include: | ||
- if: type = cron | ||
compiler: gcc | ||
env: ROBOTOLOGY_CHECKOUT=devel | ||
- if: type = cron | ||
compiler: clang | ||
env: ROBOTOLOGY_CHECKOUT=devel | ||
|
||
cache: | ||
directories: $CACHE_DIR | ||
|
||
addons: | ||
apt: | ||
packages: | ||
# AMOR API | ||
- libboost-thread-dev | ||
- libeigen3-dev | ||
|
||
# device deps | ||
- libusb-1.0-0-dev # libphidget21 | ||
- libspnav-dev # spacenavigator | ||
|
||
- libgtest-dev # unit testing | ||
- lcov # code coverage | ||
|
||
before_install: | ||
- sudo apt-get -qq update # -qq No output except for errors | ||
- '[[ "$TRAVIS_EVENT_TYPE" = cron ]] && export ROBOTOLOGY_CHECKOUT=devel || export ROBOTOLOGY_CHECKOUT=master' | ||
#-- Configure Git (needed by YCM) | ||
- if [ ! `git config --get user.email` ]; then `git config --global user.email '[email protected]'`; fi | ||
- if [ ! `git config --get user.name` ]; then `git config --global user.name 'Travis CI'`; fi | ||
|
||
#-- Register SSH deploy key for AMOR API private repository | ||
#-- https://gist.github.com/lukewpatterson/4242707#gistcomment-2382443 | ||
#-- http://anil.recoil.org/2013/10/06/travis-secure-ssh-integration.html | ||
- mkdir -p ~/.ssh | ||
- echo $DEPLOY_KEY_AMOR_API | base64 --decode | openssl aes-256-cbc -K $encrypted_7b486c11a122_key -iv $encrypted_7b486c11a122_iv -out ~/.ssh/id_rsa -d | ||
- chmod 600 ~/.ssh/id_rsa | ||
- echo "Host *" >> ~/.ssh/config | ||
- echo " StrictHostKeyChecking no" >> ~/.ssh/config | ||
- echo " CheckHostIP no" >> ~/.ssh/config | ||
- echo " PasswordAuthentication no" >> ~/.ssh/config | ||
- echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config | ||
- source "$TRAVIS_BUILD_DIR/scripts/travis/configure-ssh.sh" | ||
|
||
#-- Code coverage | ||
- if [ "$CXX" = "g++" ]; then gem install coveralls-lcov; fi | ||
|
||
install: | ||
#-- Install 3rd-party dependencies | ||
- sudo apt-get install libboost-thread-dev libeigen3-dev libspnav-dev libxwiimote-dev libusb-1.0-0-dev libgtest-dev | ||
#-- Install color-debug | ||
- git clone https://github.com/roboticslab-uc3m/color-debug | ||
- cd color-debug && mkdir build && cd build | ||
- cmake .. | ||
- sudo make install | ||
- cd ../.. | ||
#-- Install ycm | ||
- git clone --branch="$ROBOTOLOGY_CHECKOUT" https://github.com/robotology/ycm | ||
- cd ycm && mkdir build && cd build | ||
- cmake .. | ||
- make -j$(nproc) | ||
- sudo make install | ||
- cd ../.. | ||
#-- Install yarp | ||
- git clone --branch="$ROBOTOLOGY_CHECKOUT" https://github.com/robotology/yarp | ||
- cd yarp && mkdir build && cd build | ||
- cmake .. -DSKIP_ACE=ON | ||
- make -j$(nproc) | ||
- sudo make install | ||
- cd ../.. | ||
#-- Install device-related deps | ||
- sudo apt-get install libxwiimote-dev | ||
|
||
#-- Install YCM | ||
- > | ||
source "$TRAVIS_BUILD_DIR/scripts/travis/git-cache-dependency.sh" | ||
--package-name YCM | ||
--repo-url https://github.com/robotology/ycm | ||
--repo-checkout "${ROBOTOLOGY_CHECKOUT:-${YCM_CHECKOUT:-master}}" | ||
#-- Install YARP | ||
- > | ||
source "$TRAVIS_BUILD_DIR/scripts/travis/git-cache-dependency.sh" | ||
--package-name YARP | ||
--repo-url https://github.com/robotology/yarp | ||
--repo-checkout "${ROBOTOLOGY_CHECKOUT:-$YARP_CHECKOUT}" | ||
--additional-cmake-options "-DSKIP_ACE:BOOL=ON" | ||
--prepend-to-linker-path lib | ||
--additional-export-paths "YARP_DATA_DIRS;share/yarp" | ||
#-- Install libphidget21 | ||
- cd extern/phidget | ||
- tar xzf libphidget_2.1.8.20151217.tar.gz | ||
- cd libphidget-2.1.8.20151217 | ||
- ./configure --enable-jni=no | ||
- make -j$(nproc) | ||
- sudo make install | ||
- cd ../../.. | ||
#-- Install AMOR API | ||
- git clone [email protected]:roboticslab-uc3m/amor-api | ||
- cd amor-api && mkdir build && cd build | ||
- cmake .. | ||
- make | ||
- sudo make install | ||
- cd ../.. | ||
# see http://gronlier.fr/blog/2015/01/adding-code-coverage-to-your-c-project/ | ||
- if [ "$CXX" = "g++" ]; then wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz; fi | ||
- if [ "$CXX" = "g++" ]; then tar xf lcov_1.11.orig.tar.gz; fi | ||
- if [ "$CXX" = "g++" ]; then sudo make -C lcov-1.11/ install; fi | ||
- if [ "$CXX" = "g++" ]; then gem install coveralls-lcov; fi | ||
- > | ||
if [ ! -d "$CACHE_DIR/libphidget_2.1.8" ]; then | ||
echo "libphidget_2.1.8 not in cache" | ||
tar xzf "$TRAVIS_BUILD_DIR/extern/phidget/libphidget_2.1.8.20151217.tar.gz" -C ~ | ||
(cd ~/libphidget-2.1.8.20151217 && ./configure --enable-jni=no --prefix="$CACHE_DIR/libphidget_2.1.8") | ||
make -C ~/libphidget-2.1.8.20151217 -j$(nproc) install | ||
else | ||
echo "libphidget_2.1.8 already in cache" | ||
fi | ||
- export PKG_CONFIG_PATH="$CACHE_DIR/libphidget_2.1.8/lib/pkgconfig:$PKG_CONFIG_PATH" | ||
|
||
#-- Install color-debug | ||
- > | ||
source "$TRAVIS_BUILD_DIR/scripts/travis/git-cache-dependency.sh" | ||
--package-name COLOR_DEBUG | ||
--repo-url https://github.com/roboticslab-uc3m/color-debug | ||
--repo-checkout master | ||
#-- Install AMOR API (for AmorCartesianControl) | ||
- > | ||
source "$TRAVIS_BUILD_DIR/scripts/travis/git-cache-dependency.sh" | ||
--package-name AMOR_API | ||
--repo-url [email protected]:roboticslab-uc3m/amor-api | ||
--repo-checkout develop | ||
--additional-cmake-options "-DENABLE_udev_rules:BOOL=OFF" | ||
--prepend-to-linker-path lib | ||
before_script: | ||
- mkdir -p build && cd build | ||
- cmake .. -DENABLE_coverage=ON | ||
- mkdir -p "$TRAVIS_BUILD_DIR/build" && cd "$_" | ||
- cmake .. -DCMAKE_INSTALL_PREFIX="$PWD/install" -DENABLE_coverage:BOOL=ON | ||
- make install | ||
- export LD_LIBRARY_PATH=$PWD/install/lib:$LD_LIBRARY_PATH | ||
- export YARP_DATA_DIRS=$PWD/install/share/roboticslab-yarp-devices:$YARP_DATA_DIRS | ||
|
||
script: | ||
- make | ||
- sudo make install | ||
- echo "No unit tests available" | ||
|
||
after_success: | ||
# - cd ${TRAVIS_BUILD_DIR} | ||
# capture coverage info | ||
- if [ "$CXX" = "g++" ]; then lcov --directory . --capture --output-file coverage.info; fi | ||
# filter out system and test code | ||
- if [ "$CXX" = "g++" ]; then lcov --remove coverage.info '/usr/*' 'test/*' --output-file coverage.info; fi | ||
# debug before upload | ||
- if [ "$CXX" = "g++" ]; then lcov --list coverage.info; fi | ||
# uploads to coveralls | ||
#- if [ "$CXX" = "g++" ]; then coveralls-lcov --source-encoding=ISO-8859-1 --repo-token InWqFy6VWMrEUzr2Rn8XV0cGqv3wXWo2d coverage.info; fi | ||
- if [ "$CXX" = "g++" ]; then coveralls-lcov --source-encoding=ISO-8859-1 coverage.info; fi | ||
|
||
- sudo make uninstall | ||
#-- Code coverage | ||
- if [ "$CXX" = "g++" ]; then source "$TRAVIS_BUILD_DIR/scripts/travis/coverage.sh"; fi | ||
|
||
- make uninstall |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
|
||
#-- Register SSH deploy key for AMOR API private repository | ||
#-- https://gist.github.com/lukewpatterson/4242707#gistcomment-2382443 | ||
#-- http://anil.recoil.org/2013/10/06/travis-secure-ssh-integration.html | ||
|
||
mkdir -p ~/.ssh | ||
|
||
echo $DEPLOY_KEY_AMOR_API | base64 --decode | openssl aes-256-cbc -K $encrypted_7b486c11a122_key -iv $encrypted_7b486c11a122_iv -out ~/.ssh/id_rsa -d | ||
|
||
chmod 600 ~/.ssh/id_rsa | ||
|
||
echo "Host *" >> ~/.ssh/config | ||
echo " StrictHostKeyChecking no" >> ~/.ssh/config | ||
echo " CheckHostIP no" >> ~/.ssh/config | ||
echo " PasswordAuthentication no" >> ~/.ssh/config | ||
echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
#!/usr/bin/env bash | ||
|
||
set +e | ||
|
||
# see http://gronlier.fr/blog/2015/01/adding-code-coverage-to-your-c-project/ | ||
|
||
#-- Capture coverage info | ||
lcov --directory . --capture --output-file coverage.info | ||
|
||
#-- Filter out system and test code | ||
lcov --remove coverage.info '/usr/*' 'tests/*' --output-file coverage.info | ||
|
||
#-- Debug before upload | ||
lcov --list coverage.info | ||
|
||
#-- Upload to coveralls | ||
coveralls-lcov --source-encoding=ISO-8859-1 coverage.info |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
|
||
#-- Initialize variables | ||
package_name= | ||
repo_url= | ||
repo_checkout= | ||
clone_only_branches="master devel develop production" | ||
cmake_home_dir= | ||
additional_cmake_options= | ||
prepend_to_linker_path= | ||
prepend_to_standard_path= | ||
additional_export_paths= | ||
|
||
#-- Available getopt long option names | ||
#-- https://gist.github.com/magnetikonline/22c1eb412daa350eeceee76c97519da8 | ||
ARGUMENT_LIST=( | ||
"package-name" | ||
"repo-url" | ||
"repo-checkout" | ||
"clone-only-branches" | ||
"cmake-home-dir" | ||
"additional-cmake-options" | ||
"prepend-to-linker-path" | ||
"prepend-to-standard-path" | ||
"additional-export-paths" | ||
) | ||
|
||
#-- Read arguments | ||
opts=$(getopt \ | ||
--longoptions "$(printf "%s:," "${ARGUMENT_LIST[@]}")" \ | ||
--name "$(basename "${BASH_SOURCE[0]}")" \ | ||
--options "" \ | ||
-- "$@" | ||
) | ||
|
||
eval set -- $opts | ||
|
||
#-- Parse options | ||
while [ "$#" -gt 1 ]; do | ||
in=$(echo "$1" | sed -e 's/^--//') | ||
for v in "${ARGUMENT_LIST[@]}"; do | ||
if [ "$v" = "$in" ]; then | ||
declare "$(echo "$v" | tr '-' '_')"="$2" | ||
break | ||
fi | ||
done | ||
shift 2 | ||
done | ||
|
||
#-- Check required arguments | ||
if [ -z "$package_name" ] || [ -z "$repo_url" ] || [ -z "$repo_checkout" ]; then | ||
echo "Missing required options. Traceback:" | ||
for v in "${ARGUMENT_LIST[@]}"; do | ||
v_param=$(echo $v | tr '-' '_') | ||
echo " --$v=${!v_param}" | ||
done | ||
return 1 | ||
fi | ||
|
||
#-- Configure paths | ||
repo_source_dir=~/"$package_name-$repo_checkout" | ||
repo_build_dir="$repo_source_dir/build" | ||
repo_cache_dir="$CACHE_DIR/$package_name-$repo_checkout" | ||
cmake_home_dir="$repo_source_dir/$cmake_home_dir" | ||
|
||
#-- Configure CMake command line options | ||
repo_cmake_options="$additional_cmake_options -DCMAKE_INSTALL_PREFIX:PATH=$repo_cache_dir" | ||
|
||
is_clone_only_branch=false | ||
|
||
for branch in $clone_only_branches; do | ||
if [ "$repo_checkout" = "$branch" ]; then | ||
is_clone_only_branch=true | ||
break | ||
fi | ||
done | ||
|
||
if $is_clone_only_branch; then | ||
|
||
#-- Clone, build and store in cache | ||
|
||
echo "Cloning $package_name's $repo_checkout branch" | ||
git clone --depth=1 --branch="$repo_checkout" "$repo_url" "$repo_source_dir" | ||
last_commit_sha=$(git -C "$repo_source_dir" rev-parse HEAD) | ||
|
||
if [ ! -d "$repo_cache_dir" ] || \ | ||
[ ! -f "$repo_cache_dir/.last_commit_sha" ] || \ | ||
[ ! "$(cat $repo_cache_dir/.last_commit_sha)" = "$last_commit_sha" ]; | ||
then | ||
echo "$package_name not in cache or not the latest commit of $repo_checkout branch" | ||
rm -rf "$repo_cache_dir"/* | ||
cmake -H"$cmake_home_dir" -B"$repo_build_dir" $repo_cmake_options | ||
make -C "$repo_build_dir" -j$(nproc) install | ||
echo "$last_commit_sha" > "$repo_cache_dir/.last_commit_sha" | ||
else | ||
echo "$package_name found in cache ($(cat $repo_cache_dir/.last_commit_sha))" | ||
fi | ||
|
||
else | ||
|
||
#-- Download zipped file from archive, build and store in cache | ||
|
||
if [ ! -d "$repo_cache_dir" ]; then | ||
echo "Downloading $package_name $repo_checkout from archive" | ||
wget -q "$repo_url/archive/$repo_checkout.tar.gz" -P "$repo_source_dir" | ||
tar xzf "$repo_source_dir/$repo_checkout.tar.gz" -C "$repo_source_dir" --strip-components=1 | ||
cmake -H"$cmake_home_dir" -B"$repo_build_dir" $repo_cmake_options | ||
make -C "$repo_build_dir" -j$(nproc) install | ||
else | ||
echo "$package_name $repo_checkout already in cache" | ||
fi | ||
|
||
fi | ||
|
||
#-- Make installed package discoverable by CMake's find_package() command | ||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH:$repo_cache_dir" | ||
|
||
#-- Miscellanea, prepends stuff to LD_LIBRARY_PATH and PATH | ||
|
||
if [ ! -z "$prepend_to_linker_path" ]; then | ||
export LD_LIBRARY_PATH="$repo_cache_dir/$prepend_to_linker_path:$LD_LIBRARY_PATH" | ||
fi | ||
|
||
if [ ! -z "$prepend_to_standard_path" ]; then | ||
export PATH="$repo_cache_dir/$prepend_to_standard_path:$PATH" | ||
fi | ||
|
||
#-- Expands lists of values of the form 'VAR1;val1;VAR2;val2;...' to: | ||
#-- export VAR1=val1 | ||
#-- export VAR2=val2 | ||
#-- ... | ||
if [ ! -z "$additional_export_paths" ]; then | ||
IFS=';' read -ra ITEMS <<< "$additional_export_paths" | ||
for (( count=0; count<"${#ITEMS[@]}"; count+=2 )); do | ||
export "${ITEMS[$count]}"="$repo_cache_dir/${ITEMS[$(( $count+1 ))]}:${!ITEMS[$count]}" | ||
done | ||
fi |