aboutsummaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/ci.yml
blob: 2f2b8f03f7f5ef33c70e298647c7a52e3f29afcb (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
140
141
142
143
144
145
146
147
name: Continuous Integration

on: [push, pull_request]

jobs:
  ubuntu:
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04]
        compiler: ['CC=gcc CXX=g++', 'CC=clang CXX=clang++']
        interface: [ncurses, gtk]

    # NOTE: The virtual environments already contain both GCC and Clang
    runs-on: ${{ matrix.os }}

    steps:

    - name: Git Clone
      uses: actions/checkout@v4.1.6
      with:
        submodules: true

    - name: Update Repositories
      run: sudo apt-get update
    - name: Install Build Dependencies
      run: >
        sudo apt-get install -y
        build-essential
        autoconf automake libtool
        libglib2.0-dev libncurses-dev libgtk-3-dev xvfb
        groff doxygen

    - name: Configure Build
      env:
        # Enable Adress Sanitizer only on ncurses.
        # Gtk produces a lot of false negatives.
        # This will improve the test suite quality, even without Valgrind.
        CFLAGS: ${{ matrix.interface == 'ncurses' && '-fsanitize=address -fno-omit-frame-pointer' || ' ' }}
        CXXFLAGS: ${{ matrix.interface == 'ncurses' && '-fsanitize=address -fno-omit-frame-pointer' || ' ' }}
        MALLOC_REPLACEMENT: ${{ matrix.interface == 'ncurses' && 'no' || 'check' }}
      run: |
        autoreconf -i
        ./configure --with-interface=${{ matrix.interface }} --enable-debug --enable-html-docs \
                    --enable-malloc-replacement=$MALLOC_REPLACEMENT ${{ matrix.compiler }}

    # NOTE: xvfb-run emulates an XServer and is required when building
    # Gtk versions (since SciTECO calls itself during the build).
    - name: make
      run: xvfb-run -a make
    - name: make install
      run: sudo xvfb-run -a make install
    # NOTE: The test suite must be run in verbose mode because if it fails
    # we won't be able to analyze testsuite.log.
    - name: Run Test Suite
      run: xvfb-run -a make check TESTSUITEFLAGS="--verbose"
    - name: Build Developer Documentation
      run: cd doc && make devdoc
    - name: make distcheck
      run: xvfb-run -a make distcheck
    - name: Build Source Tarball
      run: make dist

  macos:
    runs-on: macos-latest

    steps:

    - name: Git Clone
      uses: actions/checkout@v4.1.6
      with:
        submodules: true

    # NOTE: macOS already ships with ncurses and
    # XCode already comes with the autotools.
    - name: Install Build Dependencies
      run: brew install autoconf automake libtool glib groff doxygen
    - name: Configure Build
      env:
        # Make sure we don't pick up GCC by accident.
        CC: clang
        CXX: clang++
      run: |
        autoreconf -i
        ./configure --with-interface=ncurses --enable-debug --enable-html-docs

    - run: make
    - run: sudo make install
    # NOTE: The test suite must be run in verbose mode because if it fails
    # we won't be able to analyze testsuite.log.
    - name: Run Test Suite
      run: make check TESTSUITEFLAGS="--verbose"
    - name: Build Developer Documentation
      run: cd doc && make devdoc
    - run: make distcheck
    - name: Build Source Tarball
      run: make dist

  win32:
    runs-on: windows-latest

    defaults:
      run:
        shell: bash.exe --login -eo pipefail "{0}"
    env:
      MSYSTEM: MINGW32
      CHERE_INVOKING: 1

    steps:

    - name: Git Clone
      uses: actions/checkout@v4.1.6
      with:
        submodules: true

    - name: Set Up Shell
      run: echo C:\msys64\usr\bin\ | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
      shell: pwsh

    - name: Install Build Dependencies
      run: >
        pacman -S --noconfirm --needed
        base-devel mingw-w64-i686-autotools mingw-w64-i686-toolchain
        mingw-w64-i686-glib2 mingw-w64-i686-pdcurses
        groff mingw-w64-i686-doxygen

    - name: Configure Build
      env:
        PDCURSES_CFLAGS: -I/mingw32/include/pdcurses/
      run: |
        autoreconf -i
        ./configure --with-interface=pdcurses-gui --enable-debug --enable-html-docs

    - run: make
    - run: make install
    # NOTE: The test suite must be run in verbose mode because if it fails
    # we won't be able to analyze testsuite.log.
    - name: Run Test Suite
      run: make check TESTSUITEFLAGS="--verbose"
    - name: Build Developer Documentation
      run: cd doc && make devdoc
    - name: make distcheck
      env:
        DISTCHECK_CONFIGURE_FLAGS: --with-interface=pdcurses-gui
        PDCURSES_CFLAGS: -I/mingw32/include/pdcurses/
      run: make distcheck
    - name: Build Source Tarball
      run: make dist