summaryrefslogtreecommitdiff
path: root/.github/workflows/build-and-test.yml
blob: ba5cb84db9cd22a5a2c1cdb91fb62269bfdb975d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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