summaryrefslogtreecommitdiff
path: root/.github/workflows/build-and-test.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/build-and-test.yml')
-rw-r--r--.github/workflows/build-and-test.yml116
1 files changed, 116 insertions, 0 deletions
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
new file mode 100644
index 0000000..ba5cb84
--- /dev/null
+++ b/.github/workflows/build-and-test.yml
@@ -0,0 +1,116 @@
+# Copyright (C) 2021 Sebastian Pipping <sebastian@pipping.org>
+# Licensed under the MIT license
+
+name: Build and test
+
+on:
+ pull_request:
+ push:
+ schedule:
+ - cron: '0 4 * * 5' # Every Friday at 4am
+
+jobs:
+ build_and_test:
+ name: Build and test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2.3.4
+
+ - name: Add Clang/LLVM repositories
+ run: |-
+ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
+ sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-11 main'
+
+ - name: Install build dependencies
+ run: |-
+ sudo apt-get install --yes --no-install-recommends -V \
+ clang-11 \
+ cmake \
+ doxygen \
+ graphviz \
+ llvm-11 \
+ lzip \
+ qhelpgenerator-qt5 \
+ qtchooser
+
+ - name: Build, test and install
+ run: |-
+ sed 's,:,\n,g' <<<"${PATH}"
+ clang --version
+
+ GTEST_VERSION=1.8.1
+ GTEST_PREFIX=~/.local/
+
+ wget https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz
+ tar xf release-${GTEST_VERSION}.tar.gz
+ (
+ cd googletest-release-${GTEST_VERSION}/
+ cmake \
+ -DBUILD_SHARED_LIBS=ON \
+ -DCVF_VERSION=${GTEST_VERSION} \
+ -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX} \
+ .
+ make
+ make install
+ )
+
+ mkdir build
+ pushd build
+ compile_flags=(
+ -pipe
+
+ -O1
+ -g
+ -fsanitize=address,undefined,leak
+ -fno-sanitize-recover=all
+ -fno-omit-frame-pointer
+
+ -Wall
+ -Wextra
+ -pedantic
+ )
+ CFLAGS="${compile_flags[*]} -std=c89"
+ CXXFLAGS="${compile_flags[*]} -std=c++98"
+ LDFLAGS='-g -fsanitize=address'
+ cmake_args=(
+ -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX}
+
+ -Wdev
+ -Werror=dev
+ -Wdeprecated
+ -Werror=deprecated
+
+ -DCMAKE_C_COMPILER=clang-11
+ -DCMAKE_CXX_COMPILER=clang++-11
+ -DCMAKE_C_FLAGS="${CFLAGS}"
+ -DCMAKE_CXX_FLAGS="${CXXFLAGS}"
+ -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}"
+ -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}"
+ -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}"
+
+ -DURIPARSER_WARNINGS_AS_ERRORS=ON
+ )
+ cmake "${cmake_args[@]}" -DCMAKE_INSTALL_INCLUDEDIR=include123 ..
+
+ make VERBOSE=1 all
+
+ make VERBOSE=1 test ARGS=--verbose
+ cat Testing/Temporary/LastTest.log
+
+ make install
+ make DESTDIR="${PWD}"/ROOT/ install
+ find ROOT | sort
+
+ ./doc/release.sh
+ popd
+ pushd cmake/test_find_package
+ cmake "${cmake_args[@]}" .
+ make VERBOSE=1
+ ./hello
+ popd
+
+ git fetch --tags --unshallow origin # for "git describe" in make-distcheck.sh
+
+ ./make-distcheck.sh -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX} # without AddressSanitizer
+
+ ! git status | fgrep -A100 'Untracked files:' # works best at the very end