summaryrefslogtreecommitdiff
path: root/.github/workflows/linux.yml
blob: 8a629aaeef5c32394f339d0e3954edb6b61ae434 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#                          __  __            _
#                       ___\ \/ /_ __   __ _| |_
#                      / _ \\  /| '_ \ / _` | __|
#                     |  __//  \| |_) | (_| | |_
#                      \___/_/\_\ .__/ \__,_|\__|
#                               |_| XML parser
#
# Copyright (c) 2021-2022 Sebastian Pipping <sebastian@pipping.org>
# Licensed under the MIT license:
#
# Permission is  hereby granted,  free of charge,  to any  person obtaining
# a  copy  of  this  software   and  associated  documentation  files  (the
# "Software"),  to  deal in  the  Software  without restriction,  including
# without  limitation the  rights  to use,  copy,  modify, merge,  publish,
# distribute, sublicense, and/or sell copies of the Software, and to permit
# persons  to whom  the Software  is  furnished to  do so,  subject to  the
# following conditions:
#
# The above copyright  notice and this permission notice  shall be included
# in all copies or substantial portions of the Software.
#
# THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
# EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
# NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
# USE OR OTHER DEALINGS IN THE SOFTWARE.

name: Run Linux Travis CI tasks

on:
  pull_request:
  push:
  schedule:
    - cron: '0 2 * * 5'  # Every Friday at 2am

jobs:
  checks:
    name: Perform checks
    strategy:
      matrix:
        include:
          # NOTE: This is a quick port from .travis.yml in reaction to
          #       stability issues at Travis CI.
          - MODE: cmake-oos
          - MODE: distcheck
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address
          - MODE: clang-format
          - MODE: cmake-oos
            FLAT_ENV: CMAKE_ARGS="-DEXPAT_ATTR_INFO=ON -DEXPAT_BUILD_FUZZERS=ON -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_ATTR_INFO=ON
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_CONTEXT_BYTES=OFF
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_DTD=OFF
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_LARGE_SIZE=ON
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_MIN_SIZE=ON
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_NS=OFF
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=memory
          - MODE: qa-sh
            FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=undefined
          - MODE: qa-sh
            FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov
          - MODE: qa-sh
            FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov CMAKE_ARGS=-D_EXPAT_M32=ON
          - MODE: qa-sh
            FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov CMAKE_ARGS="-D_EXPAT_M32=ON -DEXPAT_ATTR_INFO=ON"
          - MODE: qa-sh
            FLAT_ENV: CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LD=i686-w64-mingw32-ld QA_PROCESSOR=gcov CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Windows -DWIN32=ON -DMINGW=ON -DEXPAT_ATTR_INFO=ON"
          - MODE: qa-sh
            FLAT_ENV: CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LD=i686-w64-mingw32-ld QA_PROCESSOR=gcov CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Windows -DWIN32=ON -DMINGW=ON -DEXPAT_ATTR_INFO=ON -DEXPAT_CHAR_TYPE=wchar_t"
    runs-on: ubuntu-20.04
    env:
      CFLAGS: -g3 -pipe
    steps:
    - uses: actions/checkout@v3.1.0
    - name: Install build dependencies (MinGW)
      if: "${{ contains(matrix.FLAT_ENV, 'mingw') }}"
      run: |-
        set -x -u -o pipefail
        source /etc/os-release

        # Get rid of packages installed from ppa:ondrej/php so that we will be able to install wine32:i386 without conflicts
        # (see issue https://github.com/actions/virtual-environments/issues/4589)
        # In detail we:
        #   1. Remove all packages that ppa:ondrej/php has but plain Ubuntu doesn't, e.g. everything PHP
        #   2. Revert (remaining) packages that ppa:ondrej/php and plain Ubuntu share, back to the plain Ubuntu version
        #   3. Assert that no packages from ppa:ondrej/php are left installed
        dpkg -l | grep '^ii' | grep -F deb.sury.org | awk '{print $2}' | grep '^php' \
          | xargs -r -t sudo apt-get remove --yes libpcre2-posix3 libzip4
        dpkg -l | grep '^ii' | grep -F deb.sury.org | awk '{print $2}' | sed "s,\$,/${UBUNTU_CODENAME}," \
          | xargs -r -t sudo apt-get install --yes --no-install-recommends --allow-downgrades -V
        ! dpkg -l | grep '^ii' | grep -F deb.sury.org

        # Install 32bit Wine
        sudo dpkg --add-architecture i386  # for wine32
        sudo apt-get update  # due to new architecture
        sudo apt-get install --yes --no-install-recommends -V \
            mingw-w64 \
            wine-stable \
            wine32:i386
    - name: Install build dependencies (Non-MinGW)
      if: "${{ ! contains(matrix.FLAT_ENV, 'mingw') }}"
      run: |-
        set -x
        source /etc/os-release
        wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
        sudo add-apt-repository "deb http://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-15 main"
        sudo apt-get update  # due to new repository
        # NOTE: Please note the version-specific ${PATH} extension for Clang in .travis.sh
        sudo apt-get install --yes --no-install-recommends -V \
            clang-15 \
            clang-format-15 \
            llvm-15
    - name: Install build dependencies (common)
      run: |-
        sudo apt-get install --yes --no-install-recommends -V \
            cmake \
            docbook2x \
            dos2unix \
            gcc-multilib \
            g++-multilib \
            lcov \
            libbsd-dev \
            lzip \
            moreutils
    - name: Perform check "${{ matrix.MODE }}"
      env:
        MODE: ${{ matrix.MODE }}
        TRAVIS_OS_NAME: linux
      run: |
        env ${{ matrix.FLAT_ENV }} ./.travis.sh