mirror of
https://github.com/awesomeWM/awesome
synced 2024-11-17 07:47:41 +01:00
844bd1eb05
For loading a theme, beautiful.init() has to be called. We do not handle dynamic changes of the theme, so if the theme is changed after something was already queried, this change will not apply. This also means that before the theme is loaded, nothing useful can be returned. In fact, code that tries to access the theme during require() will never get a useful value from beautiful, but just nils. To catch this, one Travis build is modified so that an error is raised if the theme is accessed before beautiful.init() was called. Signed-off-by: Uli Schlachter <psychon@znc.in>
238 lines
9.4 KiB
YAML
238 lines
9.4 KiB
YAML
sudo: required
|
|
dist: trusty
|
|
language: c
|
|
|
|
# Build only master and stable branches. Other branches go through PRs.
|
|
branches:
|
|
only:
|
|
- master
|
|
- 3.5
|
|
|
|
env:
|
|
matrix:
|
|
- LUA=5.2 DO_CHECKQA=1 LUANAME=lua5.2 DO_COVERAGE=coveralls
|
|
# luajit: installed from source.
|
|
- LUA=5.1 LUANAME=luajit-2.0 LUALIBRARY=/usr/lib/libluajit-5.1.so LUAROCKS_ARGS=--lua-suffix=jit-2.0.4 TEST_PREV_COMMITS=1 EMPTY_THEME_WHILE_LOADING=1
|
|
# Note: luarocks does not work with Lua 5.0.
|
|
- LUA=5.1 LUANAME=lua5.1 BUILD_IN_DIR=/tmp/awesome-build
|
|
# Lua 5.2 with older lgi and screen size not divisible by 2.
|
|
- LUA=5.2 LUANAME=lua5.2 LGIVER=0.8.0 TESTS_SCREEN_SIZE=1921x1079 BUILD_APIDOC=true
|
|
# Lua 5.3 isn't available in Ubuntu Trusty, so some magic below installs it.
|
|
- LUA=5.3 LUANAME=lua5.3 LUALIBRARY=/usr/lib/liblua.so DO_COVERAGE=codecov
|
|
global:
|
|
# Secure GH_APIDOC_TOKEN to push to awesomeWM/apidoc.
|
|
- secure: "R/HYDclnws1I1+v9Yjt+RKa4CsFhbBT9tiwE3EfPhEj2KCYX4sFRMxuZvLf5sq0XWdrQaPhQ54fgAZGr3f054JKRXcTB0g9J6nhSHz9kIjPh446gafUhEeDQcZRwM/MeCWiwFIkiZm6smYoDFE9JTWu6quNV+lQ4kcVDOp2ibEc="
|
|
|
|
before_install:
|
|
- 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
|
|
- if [ -z $LUAINCLUDE ]; then LUAINCLUDE=/usr/include/${LUANAME}; fi
|
|
- if [ -z $LUALIBRARY ]; then LUALIBRARY=/usr/lib/x86_64-linux-gnu/lib${LUANAME}.so; fi
|
|
- cmake --version
|
|
|
|
install:
|
|
# Travis boilerplate: the apt-get cache might be out of date.
|
|
- travis_retry sudo apt-get update -qq
|
|
|
|
# Do not install recommended packages with apt-get.
|
|
- echo 'APT::Install-Recommends "false";' | sudo tee /etc/apt/apt.conf.d/no-recommends
|
|
|
|
# Install build dependencies.
|
|
# See also `apt-cache showsrc awesome | grep -E '^(Version|Build-Depends)'`.
|
|
- sudo apt-get install -y libcairo2-dev 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
|
|
|
|
# Deps for functional tests.
|
|
- sudo apt-get install -y dbus-x11 xterm xdotool xterm xvfb
|
|
|
|
# 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 -
|
|
|
|
# Install Lua (per env).
|
|
# Note that Lua 5.3 is installed manually, because it is not available in Ubuntu Trusty.
|
|
- |
|
|
set -e
|
|
if [[ "$LUA" == "5.3" ]]; then
|
|
wget http://www.lua.org/ftp/lua-5.3.3.tar.gz -O lua.tar.gz
|
|
tar -xvzf lua.tar.gz
|
|
(cd lua-5.3.3/src \
|
|
&& 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)
|
|
elif [[ "$LUANAME" == "luajit-2.0" ]]; then
|
|
git clone http://luajit.org/git/luajit-2.0.git
|
|
(cd luajit-2.0 && sudo make install PREFIX=/usr)
|
|
|
|
# "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
|
|
else
|
|
sudo apt-get install -y lib${LUANAME}-dev ${LUANAME} ${INSTALL_PKGS}
|
|
fi
|
|
|
|
# Install luarocks (for the selected Lua version).
|
|
- |
|
|
travis_retry wget https://keplerproject.github.io/luarocks/releases/luarocks-2.3.0.tar.gz
|
|
tar xf luarocks-2.3.0.tar.gz
|
|
(cd luarocks-2.3.0 \
|
|
&& ./configure --lua-version=$LUA --with-lua-include=${LUAINCLUDE} ${LUAROCKS_ARGS} \
|
|
&& make build \
|
|
&& sudo make install)
|
|
|
|
# lgi.
|
|
- sudo apt-get install -y gir1.2-pango-1.0 libgirepository1.0-dev
|
|
- travis_retry sudo luarocks install lgi $LGIVER
|
|
|
|
# Pin lua-term (https://github.com/hoelzro/lua-term/issues/16).
|
|
- travis_retry sudo luarocks install lua-term 0.4-1
|
|
|
|
# Install busted for "make check-unit".
|
|
- travis_retry sudo luarocks install busted
|
|
# Install luacheck for "make check-qa".
|
|
- if [ "$DO_CHECKQA" = 1 ]; then travis_retry sudo luarocks install luacheck; fi
|
|
# Install depgraph for "make check-qa".
|
|
- if [ "$DO_CHECKQA" = 1 ]; then travis_retry sudo luarocks install depgraph; fi
|
|
|
|
# Install ldoc for building docs.
|
|
- |
|
|
if [ "$BUILD_APIDOC" = "true" ]; then
|
|
travis_retry sudo luarocks install ldoc
|
|
travis_retry sudo luarocks install lua-discount
|
|
fi
|
|
|
|
# Install dependencies for code coverage testing.
|
|
- if [ "$DO_COVERAGE" = "" ]; then export DO_COVERAGE=0; fi
|
|
- if [ "$DO_COVERAGE" != "0" ]; then sudo luarocks install luacov 0.12.0-1; fi
|
|
- if [ "$DO_COVERAGE" = "coveralls" ]; then sudo luarocks install luacov-coveralls; fi
|
|
|
|
# Determine custom version.
|
|
- export AWESOME_VERSION="${TRAVIS_BRANCH}-g$(git rev-parse --short HEAD)"
|
|
- 'if [ "$TRAVIS_PULL_REQUEST" != false ]; then AWESOME_VERSION="${AWESOME_VERSION}-PR${TRAVIS_PULL_REQUEST}"; fi'
|
|
# function for codecov support
|
|
- if [ "$DO_COVERAGE" = "codecov" ]; then travis_retry wget -O /tmp/codecov-bash https://codecov.io/bash; fi
|
|
- |
|
|
do_codecov() {
|
|
echo "== do_codecov in $PWD: $*: build/luacov.stats.out: =="
|
|
if [ "$DO_COVERAGE" = "codecov" ]; then
|
|
test -f build/luacov.stats.out || { echo 'build/luacov.stats.out does not exist.'; return 1; }
|
|
luacov || return 1
|
|
travis_retry bash /tmp/codecov-bash -X coveragepy -c -F "$1" || return 1
|
|
rm build/luacov.stats.out
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# Functions for custom Travis folds.
|
|
- |
|
|
travis_fold_start() {
|
|
travis_fold start "$1"
|
|
travis_fold_current="$1"
|
|
}
|
|
travis_fold_end() {
|
|
travis_fold end "$travis_fold_current"
|
|
}
|
|
travis_run_in_fold() {
|
|
travis_fold_start "$1"
|
|
shift
|
|
"$@" || return
|
|
travis_fold_end
|
|
return 0
|
|
}
|
|
script:
|
|
- export CMAKE_ARGS="-DLUA_LIBRARY=${LUALIBRARY} -DLUA_INCLUDE_DIR=${LUAINCLUDE} -D OVERRIDE_VERSION=$AWESOME_VERSION -DSTRICT_TESTS=true"
|
|
- |
|
|
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
|
|
- |
|
|
set -e
|
|
if [ -n "$BUILD_IN_DIR" ]; then
|
|
# 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
|
|
fi
|
|
# Run check-unit{,-coverage} and check-integration.
|
|
- |
|
|
set -ex
|
|
if [ "$TRAVIS_TEST_RESULT" = 0 ]; then
|
|
if [ "$DO_COVERAGE" != "0" ]; then
|
|
travis_fold_start "DO_COVERAGE"
|
|
|
|
# Run tests/examples explicitly.
|
|
(mkdir -p tests/examples/build \
|
|
&& cd tests/examples/build \
|
|
&& cmake $CMAKE_ARGS ..)
|
|
do_codecov samples
|
|
|
|
(make check-unit-coverage \
|
|
&& do_codecov unittests \
|
|
&& tests/run.sh \
|
|
&& do_codecov functionaltests)
|
|
ret=$?
|
|
travis_fold_end
|
|
[ "$ret" = 0 ]
|
|
else
|
|
travis_run_in_fold "make.check-unit" make check-unit
|
|
travis_run_in_fold "make.check-integration" make check-integration
|
|
fi
|
|
fi
|
|
# Run check-qa.
|
|
- |
|
|
if [ "$DO_CHECKQA" = 1 ]; then
|
|
travis_run_in_fold "make.check-qa" make check-qa
|
|
fi
|
|
- |
|
|
set -e
|
|
if [ "$TEST_PREV_COMMITS" = 1 ] && ! [ "$TRAVIS_PULL_REQUEST" = false ]; then
|
|
# Check each commit separately (to make git-bisect less annoying).
|
|
# 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)"
|
|
echo "rev-list: $rev_list"
|
|
commits="$(echo "$rev_list" | grep -v 'dist=0' | cut -d\ -f 1)"
|
|
n="$(echo "$commits" | wc -l)"
|
|
echo "Testing $n commits: $commits"
|
|
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
|
|
if ! DO_COVERAGE=0 make all check; then
|
|
failed="$failed $commit"
|
|
fi
|
|
travis_fold_end
|
|
done
|
|
|
|
git checkout -qf FETCH_HEAD
|
|
if [ -n "$failed" ]; then
|
|
echo "Checks failed for these commits:"
|
|
for c in $commits; do
|
|
git log -1 --pretty="%h %s (%an, %ad)" "$c"
|
|
done
|
|
false
|
|
fi
|
|
fi
|
|
|
|
after_success:
|
|
# Push updated API docs for relevant branches, e.g. non-PRs builds on master.
|
|
- if [ "$BUILD_APIDOC" = "true" ]; then build-utils/travis-apidoc.sh; fi
|
|
# Push code coverage information
|
|
- |
|
|
set -e
|
|
if [ "$DO_COVERAGE" = "coveralls" ]; then
|
|
test -f build/luacov.stats.out || { echo 'build/luacov.stats.out does not exist.'; return 1; }
|
|
luacov-coveralls --verbose --merge
|
|
fi
|