summaryrefslogtreecommitdiffstats
path: root/.github/workflows/ninja-build.yml
blob: 0b74aa77160f4215e0d5beb3b98af06b3aa8b30d (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
148
149
150
151
# Smoke builds
#
# The goal of this workflow is to finish as fast as possible. Therefore some
# choices have been made:
# - no optimizations
# - link to system-provided libraries instead of building
#   bundled 3rd party libraries
# - ccache

name: Smoke build

on: push

env:
  BRANCH:     dev
  BRANCH_REF: refs/heads/dev

defaults:
  run:
    shell: bash

jobs:

  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: ubuntu-20.04
            os:   ubuntu-20.04
            # NOTE: system libmd4c is not detected
            deps:  libgl-dev libglu-dev 'libxcb*-dev' libx11-xcb-dev libxkbcommon-x11-dev libpcre2-dev libz-dev libfreetype6-dev libpng-dev libjpeg-dev libsqlite3-dev libharfbuzz-dev libb2-dev libdouble-conversion-dev libmd4c-dev
            tools: ninja-build ccache
            install_cmd: sudo apt-get -y install
            configure_flags: -xcb -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion -system-libmd4c
          - name: ubuntu-18.04
            os:   ubuntu-18.04
            # NOTE: system libb2 is not detected because version < 0.98.1 lacks pkg-config module
            # NOTE: system libharfbuzz is not detected because system has old version
            deps:  libgl-dev libglu-dev 'libxcb*-dev' libx11-xcb-dev libxkbcommon-x11-dev libpcre2-dev libz-dev libfreetype6-dev libpng-dev libjpeg-dev libsqlite3-dev libharfbuzz-dev libb2-dev libdouble-conversion-dev
            tools: ninja-build ccache
            install_cmd: sudo apt-get -y install
            configure_flags: -xcb -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion
          - name: macos-10.15
            os:   macos-10.15
            deps:  jpeg sqlite libpng pcre2 harfbuzz freetype libb2 double-conversion
            tools: ninja ccache pkg-config
            install_cmd: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install
            # Specifically on macOS pkg_config has to be manually turned on otherwise libraries under /usr/local are not detected.
            configure_flags: -pkg-config -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion
          - name: windows-2019
            os:   windows-2019
            install_cmd: choco install
            install_cmd_postfix: --yes --no-progress
            # Chocolatey sqlite package does not come with headers, so we build with bundled sqlite.
            #deps: sqlite
            # ccache installed separately later in order to force version
            tools: ninja
            # We don't want the system headers / libraries from Strawberry Perl while compiling with MinGW 8.1.0
            configure_flags: -qt-sqlite -qt-pcre -qt-zlib -qt-freetype -qt-libpng -qt-libjpeg -qt-harfbuzz -no-feature-sql-psql -no-feature-sql-mysql -no-feature-sql-odbc
    runs-on: ${{ matrix.os }}


    steps:

    - name: prepare Linux
      if: runner.os == 'Linux'
      run: sudo apt-get update
    - name: prepare macOS
      if: runner.os == 'macOS'
      run: echo noop
    - name: prepare Windows
      if: runner.os == 'Windows'
      # Header pthread.h from postgres is included and creates issues.
      # Also library zlib.lib is linked instead of the system one.
      run: |
        rm -rf "C:/Program Files/PostgreSQL/"
        choco install ccache --version 3.7.12 --yes --no-progress --not-silent --verbose --debug

    - uses: actions/checkout@v2
      with:
        path: source

    - name: restore ccache
      id: ccache
      uses: actions/cache@v2
      with:
        path: ${{ runner.temp }}/ccache
        # "github.run_id" is unique, which causes the cache to always get
        # saved at the end of a successful run.
        key:  ccache-${{ matrix.os }}-${{ github.ref }}-${{ github.run_id }}
        # As the unique "key" above will never be found in the cache when the
        # job starts, we need these broader "restore-keys" in order to match
        # and restore the most recent cache.
        restore-keys: |
          ccache-${{ matrix.os }}-${{ github.ref }}-
          ccache-${{ matrix.os }}-${{ env.BRANCH_REF }}-
          ccache-${{ matrix.os }}-refs/heads/dev-
          ccache-${{ matrix.os }}-

    - name: install build dependencies
      run:  ${{ matrix.install_cmd }}  ${{ matrix.deps }}  ${{ matrix.install_cmd_postfix }}
      if: matrix.deps != ''
    - name: install compiler tools
      run:  ${{ matrix.install_cmd }}  ${{ matrix.tools }}  ${{ matrix.install_cmd_postfix }}
    - name: configure ccache
      run: |
        ccache --set-config sloppiness=file_macro,time_macros
        ccache --set-config cache_dir='${{ runner.temp }}'/ccache
        ccache --set-config compression=true
        ccache --set-config max_size=1G
    - name: print versions and environment
      run: |
        gcc --version    | head -1
        cmake --version  | head -1
        echo Ninja `ninja --version`
        { ninja --help || true ; } 2>&1 | grep "run N jobs in parallel"
        ccache --version | head -1
        ccache --show-config  ||  echo 'Old ccache version does not support --show-config'
        echo Environment:
        printenv

    - name: make build directory
      run:  mkdir build
    - name: configure
      working-directory: build
      run:  "../source/configure -cmake -opensource -confirm-license -ccache -no-pch
        -debug -nomake tests -nomake examples
        -prefix '${{ runner.temp }}'/install_dir
        ${{ matrix.configure_flags }}"
    - name: ninja
      working-directory: build
      run: ninja

    - name: various stats
      # Print ccache utilization statistics, then reset them.
      run: |
        ccache -s
        ccache -x 2>/dev/null || true
        ccache -z

    - name: print logfiles and other info in case of failure
      if: ${{ failure() }}
      run: |
        echo ==== CMakeOutput.log ====
        cat build/CMakeFiles/CMakeOutput.log
        echo
        echo ==== CMakeError.log ====
        cat build/CMakeFiles/CMakeError.log
        echo ==== CMakeCache.txt ====
        cat build/CMakeCache.txt