Clear symbol tree before filtering to ensure it's fully re-created
[geany-mirror.git] / .github / workflows / build.yml
blob966c8c84a04a9d64a8ac8cbd48c8a182a338a004
2 # Copyright:    2021, The Geany contributors
3 # License:              GNU GPL v2 or later
5 name: CI Build
7 on:
8   push:
9     branches:
10       - master
11   pull_request:
12     branches:
13       - master
15 # cancel already running builds of the same branch or pull request
16 concurrency:
17   group: ci-${{ github.head_ref }} || concat(${{ github.ref }}
18   cancel-in-progress: true
20 env:
21   CFLAGS: -g -O2 -Werror=pointer-arith -Werror=implicit-function-declaration
22   CCACHE_DIR: ${{ github.workspace }}/.ccache
23   CCACHE_COMPRESS: true
24   CCACHE_MAXSIZE: 1G
25   PYTHON: python3
26   DEBUG: 0
28 jobs:
29   linux:
30     name: Linux Build (BINRELOC=${{ matrix.binreloc }})
31     runs-on: ubuntu-18.04
33     strategy:
34       fail-fast: false
35       matrix:
36         include:
37           - binreloc: no
38           - binreloc: yes
40     env:
41       CONFIGURE_FLAGS: --enable-binreloc=${{ matrix.binreloc }}
42       CC: ccache gcc
43       CXX: ccache g++
45     steps:
46       - uses: actions/checkout@v2
48       # create and use a timestamp for the cache key: GH Actions will never update a cache
49       # only use an existing cache item or create a new one. To use an existing cache *and*
50       # push back the the updated cache after build, we use a always new cache key (to force
51       # the creation of the cache item at the end) in combination with "restore-keys" as fallback
52       - name: Prepare ccache timestamp
53         id: ccache_cache_timestamp
54         run: echo "::set-output name=timestamp::$(date +%Y-%m-%d-%H-%M)"
56       - name: Configure ccache
57         uses: actions/cache@v2
58         with:
59           path: ${{ env.CCACHE_DIR }}
60           key: ${{ runner.os }}-${{ github.job }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
61           restore-keys: ${{ runner.os }}-${{ github.job }}-ccache-
63       - name: Show environment
64         run: env | sort
65         if: ${{ env.DEBUG == '1' }}
67       - name: Install dependencies
68         run: |
69           sudo apt-get update -qq
70           sudo apt-get install --assume-yes --no-install-recommends \
71             ccache \
72             gettext autopoint \
73             libtool \
74             libgtk-3-dev \
75             doxygen \
76             python3-docutils \
77             python3-lxml \
78             rst2pdf
80       - name: Configure
81         run: |
82           NOCONFIGURE=1 ./autogen.sh
83           mkdir _build
84           cd _build
85           { ../configure $CONFIGURE_FLAGS || { cat config.log; exit 1; } ; }
87       - name: Build
88         run: |
89           cd _build
90           make
92       - name: Run Tests
93         run: |
94           cd _build
95           make -j2 check
97       - name: Run distcheck
98         run: |
99           cd _build
100           make -j2 distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS";
102       - name: ccache statistics
103         run: ccache --show-stats
104         if: ${{ env.DEBUG == '1' }}
107   mingw:
108     name: Mingw Build
109     # i686-w64-mingw32-pkg-config fails with weird error message on 20.04
110     runs-on: ubuntu-18.04
111     env:
112       CC: ccache i686-w64-mingw32-gcc
113       CXX: ccache i686-w64-mingw32-g++
115     steps:
116       - uses: actions/checkout@v2
118       # create and use a timestamp for the cache key: GH Actions will never update a cache
119       # only use an existing cache item or create a new one. To use an existing cache *and*
120       # push back the the updated cache after build, we use a always new cache key (to force
121       # the creation of the cache item at the end) in combination with "restore-keys" as fallback
122       - name: Prepare ccache timestamp
123         id: ccache_cache_timestamp
124         run: echo "::set-output name=timestamp::$(date +%Y-%m-%d-%H-%M)"
126       - name: Configure ccache
127         uses: actions/cache@v2
128         with:
129           path: ${{ env.CCACHE_DIR }}
130           key: ${{ runner.os }}-${{ github.job }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
131           restore-keys: ${{ runner.os }}-${{ github.job }}-ccache-
133       - name: Show environment
134         run: env | sort
135         if: ${{ env.DEBUG == '1' }}
137       - name: Install dependencies
138         run: |
139           sudo apt-get update -qq
140           sudo apt-get install --assume-yes --no-install-recommends \
141             ccache \
142             gettext autopoint \
143             libtool \
144             mingw-w64-tools \
145             g++-mingw-w64-i686 \
146             gcc-mingw-w64-i686 \
147             binutils-mingw-w64-i686 \
148             doxygen \
149             python3-docutils \
150             python3-lxml \
151             rst2pdf
152           # fix broken pkg-config-crosswrapper, see https://bugs.launchpad.net/ubuntu/+source/mingw-w64/+bug/1327242
153           sudo sed -e 's/PKG_CONFIG_PATH=/&$PKG_CONFIG_PATH:/' -i /usr/bin/i686-w64-mingw32-pkg-config
155       - name: Run autogen.sh
156         run: |
157           NOCONFIGURE=1 ./autogen.sh
159       - name: Build
160         run: |
161           sh ./scripts/cross-build-mingw.sh;
163       - name: ccache statistics
164         run: ccache --show-stats
165         if: ${{ env.DEBUG == '1' }}