mirror of
https://github.com/SELinuxProject/selinux
synced 2024-12-24 23:12:05 +00:00
b5e2da2654
Ubuntu 14.04 uses SWIG 2.0.11 which produces Python files which contain lines ending with a semicolon: __del__ = lambda self : None; Ubuntu 16.04 uses SWIG 3.0.8, which does not put a semicolon. Moreover Travis CI only support Python 3.7 with Ubuntu 16.04. The reason for this is clearly stated on https://docs.travis-ci.com/user/languages/python/#development-releases-support : Recent Python branches require OpenSSL 1.0.2+. As this library is not available for Trusty, 3.7, 3.7-dev, 3.8-dev, and nightly do not work (or use outdated archive). Enabling Python 3.7 in Travis CI build matrix is therefore another reason to upgrade .travis.yml to Ubuntu 16.04. As this new template does not support Python 3.4 nor 3.5, and does not support PyPy2.7 yet, drop them from the build matrix. Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
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
|