164 lines
6.2 KiB
YAML
164 lines
6.2 KiB
YAML
# Define the building environment
|
|
language: c
|
|
|
|
matrix:
|
|
fast_finish: true
|
|
|
|
compiler:
|
|
- clang
|
|
- gcc
|
|
|
|
env:
|
|
matrix:
|
|
# Test the last version of Python and Ruby together, with some linkers
|
|
- PYVER=python3.7 RUBYLIBVER=2.5.1
|
|
- PYVER=python3.7 RUBYLIBVER=2.5.1 TEST_FLAGS_OVERRIDE=1
|
|
- PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=gold
|
|
- PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=bfd
|
|
|
|
# Test several Python versions
|
|
- PYVER=python2.7 RUBYLIBVER=2.5.1
|
|
- PYVER=python3.5 RUBYLIBVER=2.5.1
|
|
- PYVER=python3.6 RUBYLIBVER=2.5.1
|
|
# pypy2.7 seems not to be available in Travis-CI Xenial template yet.
|
|
# https://github.com/travis-ci/travis-ci/issues/9542
|
|
#- PYVER=pypy RUBYLIBVER=2.5.1
|
|
- PYVER=pypy3.5 RUBYLIBVER=2.5.1
|
|
|
|
# Test several Ruby versions
|
|
- PYVER=python3.7 RUBYLIBVER=2.4
|
|
- PYVER=python3.7 RUBYLIBVER=2.3
|
|
- PYVER=python3.7 RUBYLIBVER=2.2
|
|
|
|
matrix:
|
|
exclude:
|
|
- compiler: clang
|
|
env: PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=gold
|
|
- compiler: clang
|
|
env: PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=bfd
|
|
|
|
# Use Travis-CI Ubuntu 16.04 Xenial Xerus infrastructure, "full image" variant
|
|
sudo: required
|
|
dist: xenial
|
|
|
|
# Install SELinux userspace utilities dependencies
|
|
addons:
|
|
apt:
|
|
packages:
|
|
- bison
|
|
- flex
|
|
- gawk
|
|
- gettext
|
|
- libaudit-dev
|
|
- libbz2-dev
|
|
- libcap-dev
|
|
- libcap-ng-dev # This package is not whitelisted for the container infrastructure (https://github.com/travis-ci/apt-package-whitelist/issues/1096)
|
|
- libcunit1-dev
|
|
- libdbus-glib-1-dev
|
|
- libncurses5-dev
|
|
- libpcre3-dev
|
|
- patch
|
|
- python3-dev
|
|
- python-dev
|
|
- swig
|
|
- xmlto
|
|
|
|
install:
|
|
# Download refpolicy Makefile for sepolgen tests
|
|
- sudo mkdir -p /usr/share/selinux/default
|
|
- sudo curl --retry 10 -o /usr/share/selinux/default/Makefile 'https://raw.githubusercontent.com/SELinuxProject/refpolicy/RELEASE_2_20180114/support/Makefile.devel'
|
|
- sudo sed "s,^PREFIX :=.*,PREFIX := $TRAVIS_BUILD_DIR/installdir/usr," -i /usr/share/selinux/default/Makefile
|
|
- sudo mkdir -p /usr/share/selinux/refpolicy/include
|
|
- sudo curl --retry 10 -o /usr/share/selinux/refpolicy/include/build.conf 'https://raw.githubusercontent.com/SELinuxProject/refpolicy/RELEASE_2_20180114/build.conf'
|
|
- sudo mkdir -p /etc/selinux
|
|
- echo 'SELINUXTYPE=refpolicy' | sudo tee /etc/selinux/config
|
|
|
|
# Make sepolgen tests work without really installing anything in the real root (doing this would conflict with Ubuntu packages)
|
|
- sed -e "s,\"\(/usr/bin/[cs]\),\"$TRAVIS_BUILD_DIR/installdir\1," -i python/sepolgen/src/sepolgen/module.py
|
|
|
|
# Download the required python version if it is not installed
|
|
- VIRTUAL_ENV="$HOME/virtualenv/$PYVER"
|
|
- if ! [ -d "$VIRTUAL_ENV" ] ; then
|
|
curl --retry 10 -o python.tar.bz2 "https://s3.amazonaws.com/travis-python-archives/binaries/ubuntu/16.04/x86_64/${PYVER/python/python-}.tar.bz2" &&
|
|
sudo tar xjf python.tar.bz2 --directory / &&
|
|
rm python.tar.bz2 ;
|
|
fi
|
|
|
|
# Install flake8 for the given python version
|
|
- $VIRTUAL_ENV/bin/pip install flake8
|
|
|
|
before_script:
|
|
# Build and install in a temporary directory to run tests
|
|
- export DESTDIR="$TRAVIS_BUILD_DIR/installdir"
|
|
|
|
# Configure the variables for Python parts
|
|
- export VIRTUAL_ENV="$HOME/virtualenv/$PYVER"
|
|
- export PYTHON="$VIRTUAL_ENV/bin/python"
|
|
# Use the header files in /opt/python/... for Python because the virtualenvs do not provide Python.h
|
|
- export PKG_CONFIG_PATH="/opt/python/$($PYTHON -c 'import sys;print("%d.%d.%d" % sys.version_info[:3])')/lib/pkgconfig"
|
|
# PyPy does not provide a config file for pkg-config nor a pypy-c.so
|
|
- if echo "$PYVER" | grep -q pypy ; then export PYINC=-I$($PYTHON -c 'import sys;print(sys.prefix)')/include PYLIBS= ; fi
|
|
|
|
# Find the Ruby executable with version $RUBYLIBVER
|
|
- rvm reinstall ruby-$RUBYLIBVER --binary
|
|
- export RUBY="$(ls -d -1 "$HOME/.rvm/rubies/ruby-$RUBYLIBVER"*/bin/ruby | head -n 1)"
|
|
|
|
# Set the linker in $CC so that it gets used everywhere
|
|
- if [ -n "$LINKER" ]; then CC="$CC -fuse-ld=$LINKER" ; fi
|
|
|
|
# Show variables and versions (to help debugging)
|
|
- echo "$CC" ; $CC --version
|
|
- echo "$PYTHON" ; $PYTHON --version
|
|
- echo "$RUBY" ; $RUBY --version
|
|
|
|
# If TEST_FLAGS_OVERRIDE is defined, test that overriding CFLAGS, LDFLAGS and other variables works fine
|
|
- if [ -n "$TEST_FLAGS_OVERRIDE" ]; then EXPLICIT_MAKE_VARS="CFLAGS=-I$DESTDIR/usr/include LDFLAGS=-L$DESTDIR/usr/lib LDLIBS= CPPFLAGS=" ; fi
|
|
|
|
script:
|
|
# Start by installing everything into $DESTDIR
|
|
- make install $EXPLICIT_MAKE_VARS -k
|
|
- make install-pywrap $EXPLICIT_MAKE_VARS -k
|
|
- make install-rubywrap $EXPLICIT_MAKE_VARS -k
|
|
|
|
# Now that everything is installed, run "make all" to build everything which may have not been built
|
|
- make all $EXPLICIT_MAKE_VARS -k
|
|
|
|
# Set up environment variables for the tests
|
|
- export LD_LIBRARY_PATH="$DESTDIR/usr/lib:$DESTDIR/lib"
|
|
- export PATH="$DESTDIR/usr/sbin:$DESTDIR/usr/bin:$DESTDIR/sbin:$DESTDIR/bin:$PATH"
|
|
- export PYTHONPATH="$DESTDIR$($PYTHON -c "from distutils.sysconfig import *;print(get_python_lib(prefix='/usr'))")"
|
|
- export RUBYLIB="$DESTDIR/$($RUBY -e 'puts RbConfig::CONFIG["vendorlibdir"]'):$DESTDIR/$($RUBY -e 'puts RbConfig::CONFIG["vendorarchdir"]')"
|
|
|
|
# Show variables (to help debugging issues)
|
|
- echo "$LD_LIBRARY_PATH"
|
|
- echo "$PATH"
|
|
- echo "$PYTHONPATH"
|
|
- echo "$RUBYLIB"
|
|
|
|
# Run tests
|
|
- make test $EXPLICIT_MAKE_VARS
|
|
|
|
# Test Python and Ruby wrappers
|
|
- $PYTHON -c 'import selinux;import selinux.audit2why;import semanage;print(selinux.is_selinux_enabled())'
|
|
- $RUBY -e 'require "selinux";require "semanage";puts Selinux::is_selinux_enabled()'
|
|
|
|
# Run Python linter
|
|
- PATH="$VIRTUAL_ENV/bin:$PATH" ./scripts/run-flake8
|
|
|
|
# Remove every installed files
|
|
- rm -rf "$DESTDIR"
|
|
|
|
# Test that "git status" looks clean, or print a clear error message
|
|
- |-
|
|
git status --short | sed -n 's/^??/error: missing .gitignore entry for/p' | (! grep '^')
|
|
|
|
# Clean up everything and show which file would be added to "make clean"
|
|
- make clean distclean $EXPLICIT_MAKE_VARS
|
|
- |-
|
|
git ls-files --ignored --others --exclude-standard | sed 's/^/error: "make clean distclean" did not remove /' | (! grep '^')
|
|
|
|
# Do not spam by email so long as the build succeeds
|
|
notifications:
|
|
email:
|
|
on_success: never
|