2015-10-16 16:48:37 +02:00
sudo : required
dist : trusty
2015-04-26 04:00:50 +02:00
language : c
2016-10-05 00:13:47 +02:00
# Build only master and stable branches. Other branches go through PRs.
branches :
only :
- master
- 3.5
2015-04-26 04:00:50 +02:00
env :
matrix :
2017-04-09 18:18:42 +02:00
- LUA=5.2 LUANAME=lua5.2 DO_COVERAGE=coveralls
# Lua 5.3 isn't available in Ubuntu Trusty, so some magic below installs it.
2017-07-03 00:23:57 +02:00
- LUA=5.3 LUANAME=lua5.3 LUALIBRARY=/usr/lib/liblua.so DO_COVERAGE=codecov AWESOME_THEME=xresources
2016-07-05 22:14:41 +02:00
# luajit: installed from source.
2017-06-23 11:42:20 +02:00
- LUA=5.1 LUANAME=luajit-2.0 LUALIBRARY=/usr/lib/libluajit-5.1.so LUAROCKS_ARGS=--lua-suffix=jit-2.0.5 TEST_PREV_COMMITS=1
2015-04-26 04:00:50 +02:00
# Note: luarocks does not work with Lua 5.0.
2016-05-08 18:07:42 +02:00
- LUA=5.1 LUANAME=lua5.1 BUILD_IN_DIR=/tmp/awesome-build
2016-05-08 20:58:19 +02:00
# Lua 5.2 with older lgi and screen size not divisible by 2.
2017-06-23 11:42:20 +02:00
- LUA=5.2 LUANAME=lua5.2 LGIVER=0.8.0 TESTS_SCREEN_SIZE=1921x1079 BUILD_APIDOC=true DO_CHECKQA=1 EMPTY_THEME_WHILE_LOADING=1
2015-07-23 23:28:39 +02:00
global :
2016-05-01 18:06:18 +02:00
# Secure GH_APIDOC_TOKEN to push to awesomeWM/apidoc.
- secure : "R/HYDclnws1I1+v9Yjt+RKa4CsFhbBT9tiwE3EfPhEj2KCYX4sFRMxuZvLf5sq0XWdrQaPhQ54fgAZGr3f054JKRXcTB0g9J6nhSHz9kIjPh446gafUhEeDQcZRwM/MeCWiwFIkiZm6smYoDFE9JTWu6quNV+lQ4kcVDOp2ibEc="
2015-07-23 23:28:39 +02:00
2015-05-26 16:05:07 +02:00
before_install :
2017-01-03 14:29:10 +01:00
- if [ "$BUILD_APIDOC" = true ] && [ -n "$DO_COVERAGE" ]; then echo "BUILD_APIDOC and DO_COVERAGE are not meant to be used together." >&2; exit 1; fi
2015-10-16 16:48:37 +02:00
- if [ -z $LUAINCLUDE ]; then LUAINCLUDE=/usr/include/${LUANAME}; fi
2016-01-24 15:52:29 +01:00
- if [ -z $LUALIBRARY ]; then LUALIBRARY=/usr/lib/x86_64-linux-gnu/lib${LUANAME}.so; fi
2015-05-26 16:05:07 +02:00
- cmake --version
2015-04-26 04:00:50 +02:00
install :
# Travis boilerplate: the apt-get cache might be out of date.
2015-12-17 00:18:20 +01:00
- travis_retry sudo apt-get update -qq
2015-04-26 04:00:50 +02:00
# Do not install recommended packages with apt-get.
- echo 'APT::Install-Recommends "false";' | sudo tee /etc/apt/apt.conf.d/no-recommends
2015-10-16 16:48:37 +02:00
# Install build dependencies.
# See also `apt-cache showsrc awesome | grep -E '^(Version|Build-Depends)'`.
Fix travis package list (#1681)
The entry "gtk+3.0" caused the following to happen:
Note, selecting 'libcanberra-gtk3-0-dbg' for regex 'gtk+3.0'
Note, selecting 'monodoc-gtk3.0-manual' for regex 'gtk+3.0'
Note, selecting 'libgtk3.0-cil' for regex 'gtk+3.0'
Note, selecting 'libavahi-ui-gtk3-0' for regex 'gtk+3.0'
Note, selecting 'libwxgtk3.0-0-dbg' for regex 'gtk+3.0'
Note, selecting 'libseed-gtk3-0' for regex 'gtk+3.0'
Note, selecting 'libgtk3.0-cil-dev' for regex 'gtk+3.0'
Note, selecting 'libcanberra-gtk3-0' for regex 'gtk+3.0'
Note, selecting 'libinfgtk3-0.5-0' for regex 'gtk+3.0'
Note, selecting 'libwxgtk3.0-0' for regex 'gtk+3.0'
Note, selecting 'gir1.2-dbusmenu-gtk3-0.4' for regex 'gtk+3.0'
Note, selecting 'libwxgtk3.0-dev' for regex 'gtk+3.0'
This was clearly not intended. Fix this by using gir1.2-gtk-3.0 instead,
which is what we actually want (GObject introspection data for GTK 3).
This pretty much reverts commit 30a527fcfd1bdc5f4dce7c662d9647dacccf7b1.
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-03-29 18:47:44 +02:00
- sudo apt-get install -y libcairo2-dev gir1.2-gtk-3.0 xmlto asciidoc libpango1.0-dev libxcb-xtest0-dev libxcb-icccm4-dev libxcb-randr0-dev libxcb-keysyms1-dev libxcb-xinerama0-dev libdbus-1-dev libxdg-basedir-dev libstartup-notification0-dev imagemagick libxcb1-dev libxcb-shape0-dev libxcb-util0-dev libx11-xcb-dev libxcb-cursor-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
2015-04-26 04:00:50 +02:00
2017-04-18 00:05:06 +02:00
# Deps for tests.
- sudo apt-get install -y dbus-x11 xterm xdotool xterm xvfb zsh
2015-04-26 04:00:50 +02:00
2016-10-30 18:47:52 +01:00
# Need xorg-macros
- sudo apt-get install -y xutils-dev
- git clone --recursive https://github.com/Airblader/xcb-util-xrm.git && cd xcb-util-xrm && ./autogen.sh --prefix=/usr && make && sudo make install && cd -
2015-10-16 16:48:37 +02:00
# Install Lua (per env).
2016-04-18 22:35:50 +02:00
# Note that Lua 5.3 is installed manually, because it is not available in Ubuntu Trusty.
2016-01-24 15:52:29 +01:00
- |
2017-01-03 14:29:10 +01:00
set -e
2016-02-11 21:40:22 +01:00
if [[ "$LUA" == "5.3" ]]; then
2016-12-01 18:04:18 +01:00
wget http://www.lua.org/ftp/lua-5.3.3.tar.gz -O lua.tar.gz
2016-02-11 21:40:22 +01:00
tar -xvzf lua.tar.gz
2016-11-06 20:43:45 +01:00
(cd lua-5.3.3/src \
2016-08-14 02:25:20 +02:00
&& make SYSCFLAGS="-DLUA_USE_LINUX -ULUA_COMPAT_5_2 -DLUA_USE_APICHECK" SYSLIBS="-Wl,-E -ldl -lreadline" LUA_A=liblua.so MYCFLAGS="-fPIC" RANLIB=: AR="gcc -shared -ldl -o" liblua.so \
&& cd .. \
&& sudo make INSTALL_TOP=/usr/ INSTALL_INC=${LUAINCLUDE} TO_LIB=liblua.so linux install)
2016-04-06 01:29:57 +02:00
elif [[ "$LUANAME" == "luajit-2.0" ]]; then
git clone http://luajit.org/git/luajit-2.0.git
2016-08-14 02:25:20 +02:00
(cd luajit-2.0 && sudo make install PREFIX=/usr)
2016-04-06 01:29:57 +02:00
# "Create" /usr/bin/lua if needed (Yup, this is a bad hack)
if [ ! -e "/usr/bin/lua" ]; then sudo ln -s /usr/bin/luajit /usr/bin/lua; fi
2016-02-11 21:40:22 +01:00
else
sudo apt-get install -y lib${LUANAME}-dev ${LUANAME} ${INSTALL_PKGS}
fi
2016-01-24 15:52:29 +01:00
2015-04-26 04:00:50 +02:00
# Install luarocks (for the selected Lua version).
2016-04-06 01:48:30 +02:00
- |
travis_retry wget https://keplerproject.github.io/luarocks/releases/luarocks-2.3.0.tar.gz
tar xf luarocks-2.3.0.tar.gz
2016-08-14 02:25:20 +02:00
(cd luarocks-2.3.0 \
&& ./configure --lua-version=$LUA --with-lua-include=${LUAINCLUDE} ${LUAROCKS_ARGS} \
&& make build \
&& sudo make install)
2015-04-26 04:00:50 +02:00
2015-10-16 16:48:37 +02:00
# lgi.
- sudo apt-get install -y gir1.2-pango-1.0 libgirepository1.0-dev
- travis_retry sudo luarocks install lgi $LGIVER
2015-04-26 04:00:50 +02:00
2016-02-07 15:29:04 +01:00
# Install busted for "make check-unit".
2015-10-16 16:48:37 +02:00
- travis_retry sudo luarocks install busted
2016-11-27 15:24:04 +01:00
# Install luacheck for "make check-qa".
2016-12-18 11:20:55 +01:00
- if [ "$DO_CHECKQA" = 1 ]; then travis_retry sudo luarocks install luacheck; fi
2017-02-06 18:35:20 +01:00
# Install depgraph for "make check-qa".
- if [ "$DO_CHECKQA" = 1 ]; then travis_retry sudo luarocks install depgraph; fi
2015-04-26 04:00:50 +02:00
2017-04-09 18:18:42 +02:00
# Install ldoc for building docs and check-ldoc-warnings.
2016-12-30 15:38:50 +01:00
- |
2017-04-09 18:18:42 +02:00
if [ "$BUILD_APIDOC" = "true" ] || [ "$DO_CHECKQA" = 1 ]; then
2016-12-30 15:38:50 +01:00
travis_retry sudo luarocks install ldoc
travis_retry sudo luarocks install lua-discount
fi
2015-07-10 13:17:50 +02:00
2016-06-11 18:47:29 +02:00
# Install dependencies for code coverage testing.
- if [ "$DO_COVERAGE" = "" ]; then export DO_COVERAGE=0; fi
2017-01-03 14:29:10 +01:00
- if [ "$DO_COVERAGE" != "0" ]; then sudo luarocks install luacov 0.12.0-1; fi
2016-07-08 22:46:41 +02:00
- if [ "$DO_COVERAGE" = "coveralls" ]; then sudo luarocks install luacov-coveralls; fi
2016-02-06 15:23:28 +01:00
2015-07-24 01:01:38 +02:00
# Determine custom version.
2015-07-27 15:57:11 +02:00
- export AWESOME_VERSION="${TRAVIS_BRANCH}-g$(git rev-parse --short HEAD)"
2017-03-08 21:18:33 +01:00
- |
if [ "$TRAVIS_PULL_REQUEST" != false ] && [ "$TEST_PREV_COMMITS" = 1 ]; then
AWESOME_VERSION="${AWESOME_VERSION}-PR${TRAVIS_PULL_REQUEST}"
elif [ "$TRAVIS_PULL_REQUEST" != false ]; then
AWESOME_VERSION="v9999-PR${TRAVIS_PULL_REQUEST}";
fi
2016-06-11 18:47:29 +02:00
# function for codecov support
2017-01-03 14:29:10 +01:00
- if [ "$DO_COVERAGE" = "codecov" ]; then travis_retry wget -O /tmp/codecov-bash https://codecov.io/bash; fi
2016-06-11 18:47:29 +02:00
- |
do_codecov() {
2017-01-03 14:29:10 +01:00
echo "== do_codecov in $PWD: $*: build/luacov.stats.out: =="
2016-06-11 18:47:29 +02:00
if [ "$DO_COVERAGE" = "codecov" ]; then
2017-01-08 10:08:30 +01:00
test -f build/luacov.stats.out || { echo 'build/luacov.stats.out does not exist.'; return 1; }
2017-01-05 14:05:03 +01:00
luacov || return 1
2016-09-20 19:53:10 +02:00
travis_retry bash /tmp/codecov-bash -X coveragepy -c -F "$1" || return 1
2016-06-11 18:47:29 +02:00
rm build/luacov.stats.out
fi
2016-08-14 02:25:20 +02:00
return 0
2016-06-11 18:47:29 +02:00
}
2017-05-01 17:24:43 +02:00
- |
do_codecov_gcov() {
echo "== do_codecov_gcov in $PWD: $*: =="
if [ "$DO_COVERAGE" = "codecov" ]; then
travis_retry bash /tmp/codecov-bash -X coveragepy -c -F "$1" || return 1
fi
return 0
}
2015-07-24 01:01:38 +02:00
2016-07-05 22:14:41 +02:00
# Functions for custom Travis folds.
- |
travis_fold_start() {
2016-12-25 15:26:09 +01:00
travis_fold start "$1"
2016-07-05 22:14:41 +02:00
travis_fold_current="$1"
}
travis_fold_end() {
2016-12-25 15:26:09 +01:00
travis_fold end "$travis_fold_current"
2016-07-05 22:14:41 +02:00
}
travis_run_in_fold() {
travis_fold_start "$1"
shift
2017-07-01 14:15:12 +02:00
"$@" || return 1
2016-07-05 22:14:41 +02:00
travis_fold_end
2017-02-04 16:35:53 +01:00
return 0
2016-07-05 22:14:41 +02:00
}
2015-04-26 04:00:50 +02:00
script :
2017-01-03 14:29:10 +01:00
- export CMAKE_ARGS="-DLUA_LIBRARY=${LUALIBRARY} -DLUA_INCLUDE_DIR=${LUAINCLUDE} -D OVERRIDE_VERSION=$AWESOME_VERSION -DSTRICT_TESTS=true"
2017-07-03 00:23:57 +02:00
- |
if [ ! -z "$AWESOME_THEME" ]; then
sed awesomerc.lua -i -e "s/default\/theme/$AWESOME_THEME\/theme/g"
fi
2017-05-01 17:24:43 +02:00
- |
if [ "$DO_COVERAGE" = "codecov" ]; then
export CXXFLAGS="-fprofile-arcs -ftest-coverage"
export CFLAGS="-fprofile-arcs -ftest-coverage"
export LDFLAFS="-fprofile-arcs -ftest-coverage"
fi
2017-02-15 00:46:27 +01:00
- |
if [ "$EMPTY_THEME_WHILE_LOADING" = 1 ]; then
# Break beautiful so that trying to access the theme before beautiful.init() causes an error
sed -i -e 's/theme = {}/theme = setmetatable({}, { __index = function() error("May not access theme before beautiful.init()") end })/' lib/beautiful/init.lua \
&& grep -q 'May not access' lib/beautiful/init.lua
fi
2016-05-08 18:07:42 +02:00
- |
2017-01-03 14:29:10 +01:00
set -e
2016-05-08 18:07:42 +02:00
if [ -n "$BUILD_IN_DIR" ]; then
2016-07-05 22:14:41 +02:00
# Explicitly remove the Makefile to not build from the src dir accidentally.
rm Makefile
SOURCE_DIRECTORY="$PWD"
mkdir "$BUILD_IN_DIR"
cd "$BUILD_IN_DIR"
travis_run_in_fold "build_in_dir" cmake $CMAKE_ARGS "$SOURCE_DIRECTORY"
fi
- travis_run_in_fold "make" make
- |
if [ "$TRAVIS_TEST_RESULT" = 0 ]; then
travis_run_in_fold "make.install" sudo env PATH=$PATH make install
awesome --version
2016-05-08 18:07:42 +02:00
fi
2016-11-27 15:24:04 +01:00
# Run check-unit{,-coverage} and check-integration.
2016-06-11 18:47:29 +02:00
- |
2017-01-03 14:29:10 +01:00
set -ex
2016-06-11 18:47:29 +02:00
if [ "$TRAVIS_TEST_RESULT" = 0 ]; then
if [ "$DO_COVERAGE" != "0" ]; then
2016-07-05 22:14:41 +02:00
travis_fold_start "DO_COVERAGE"
2017-01-03 14:29:10 +01:00
# Run tests/examples explicitly.
(mkdir -p tests/examples/build \
&& cd tests/examples/build \
&& cmake $CMAKE_ARGS ..)
do_codecov samples
2017-07-01 14:15:12 +02:00
make check-unit-coverage
do_codecov unittests
tests/run.sh
do_codecov functionaltests
gcov $(find -name '*.o')
do_codecov_gcov c_code
2016-07-05 22:14:41 +02:00
travis_fold_end
2016-06-05 16:12:57 +02:00
else
2016-11-27 15:24:04 +01:00
travis_run_in_fold "make.check-unit" make check-unit
travis_run_in_fold "make.check-integration" make check-integration
2016-07-05 22:14:41 +02:00
fi
fi
2016-11-27 15:24:04 +01:00
# Run check-qa.
- |
if [ "$DO_CHECKQA" = 1 ]; then
travis_run_in_fold "make.check-qa" make check-qa
fi
2016-07-05 22:14:41 +02:00
- |
2017-01-03 14:29:10 +01:00
set -e
2016-07-05 22:14:41 +02:00
if [ "$TEST_PREV_COMMITS" = 1 ] && ! [ "$TRAVIS_PULL_REQUEST" = false ]; then
# Check each commit separately (to make git-bisect less annoying).
2016-12-25 13:13:33 +01:00
# Fix Travis' commit range (https://github.com/travis-ci/travis-ci/issues/4596).
commit_range="${TRAVIS_COMMIT_RANGE/.../..}"
echo "Testing previous commits ($commit_range)"
rev_list="$(git rev-list --bisect-all $commit_range)"
2016-07-05 22:14:41 +02:00
echo "rev-list: $rev_list"
2016-12-25 13:13:33 +01:00
commits="$(echo "$rev_list" | grep -v 'dist=0' | cut -d\ -f 1)"
n ="$(echo "$commits" | wc -l)"
echo "Testing $n commits: $commits"
2016-07-05 22:14:41 +02:00
i=0
failed=
for commit in $commits; do
i=$((i+1))
travis_fold_start "test_commit_${commit}_.$i.$n"
echo "Testing commit $commit"
git checkout "$commit"
git --no-pager show --stat
2016-12-28 02:34:20 +01:00
if ! DO_COVERAGE=0 make all check; then
2016-07-05 22:14:41 +02:00
failed="$failed $commit"
fi
travis_fold_end
done
2016-12-28 02:34:20 +01:00
git checkout -qf FETCH_HEAD
2016-07-05 22:14:41 +02:00
if [ -n "$failed" ]; then
2016-12-28 02:34:20 +01:00
echo "Checks failed for these commits:"
for c in $commits; do
git log -1 --pretty="%h %s (%an, %ad)" "$c"
done
2016-08-14 02:25:20 +02:00
false
2016-06-05 16:12:57 +02:00
fi
2016-02-06 17:18:23 +01:00
fi
2015-07-23 23:28:39 +02:00
after_success :
2015-07-27 15:57:11 +02:00
# Push updated API docs for relevant branches, e.g. non-PRs builds on master.
2015-10-10 23:08:20 +02:00
- if [ "$BUILD_APIDOC" = "true" ]; then build-utils/travis-apidoc.sh; fi
2016-02-06 15:23:28 +01:00
# Push code coverage information
2017-01-03 14:29:10 +01:00
- |
set -e
if [ "$DO_COVERAGE" = "coveralls" ]; then
2017-01-08 10:08:30 +01:00
test -f build/luacov.stats.out || { echo 'build/luacov.stats.out does not exist.'; return 1; }
2017-01-03 14:29:10 +01:00
luacov-coveralls --verbose --merge
fi