blob: 6ab29383c7294bd93222f8c830ac8d1e46b4c261 [file] [log] [blame]
Radek Krejcif4d97292020-11-30 16:38:32 +01001name: libyang CI
Michal Vasko8bdbf852021-04-14 16:19:17 +02002on:
Radek Krejcif4d97292020-11-30 16:38:32 +01003 push:
4 branches:
Michal Vasko0791e802021-05-27 10:29:14 +02005 - master
6 - devel
Radek Krejcif4d97292020-11-30 16:38:32 +01007 pull_request:
8 branches:
Michal Vasko0791e802021-05-27 10:29:14 +02009 - master
10 - devel
Radek Krejcif4d97292020-11-30 16:38:32 +010011
12jobs:
Jan Kundrátf202b122021-12-14 19:02:10 +010013 build-unix:
Radek Krejcif4d97292020-11-30 16:38:32 +010014 name: ${{ matrix.config.name }}
15 runs-on: ${{ matrix.config.os }}
16 strategy:
17 fail-fast: false
18 matrix:
19 config:
20 - {
Michal Vasko09bddf92022-11-09 12:04:11 +010021 name: "Release, gcc",
22 os: "ubuntu-22.04",
Radek Krejcif4d97292020-11-30 16:38:32 +010023 build-type: "Release",
24 cc: "gcc",
Michal Vaskocdffdab2021-06-23 14:00:10 +020025 options: "-DENABLE_TESTS=ON",
Radek Krejcif4d97292020-11-30 16:38:32 +010026 packager: "sudo apt-get",
Michal Vaskoc1372ae2022-11-09 12:13:45 +010027 # no expect because stdout seems to be redirected
28 packages: "libcmocka-dev shunit2",
Michal Vaskoa2177482021-05-28 10:29:41 +020029 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010030 build-cmd: "make"
Radek Krejcif4d97292020-11-30 16:38:32 +010031 }
32 - {
Michal Vasko09bddf92022-11-09 12:04:11 +010033 name: "Release, clang",
34 os: "ubuntu-22.04",
Radek Krejcif4d97292020-11-30 16:38:32 +010035 build-type: "Release",
36 cc: "clang",
Michal Vaskocdffdab2021-06-23 14:00:10 +020037 options: "-DENABLE_TESTS=ON",
Radek Krejcif4d97292020-11-30 16:38:32 +010038 packager: "sudo apt-get",
Michal Vaskoc1372ae2022-11-09 12:13:45 +010039 packages: "libcmocka-dev shunit2",
Michal Vaskoa2177482021-05-28 10:29:41 +020040 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010041 build-cmd: "make"
Radek Krejcif4d97292020-11-30 16:38:32 +010042 }
43 - {
Michal Vasko09bddf92022-11-09 12:04:11 +010044 name: "Debug, gcc",
45 os: "ubuntu-22.04",
Radek Krejcif4d97292020-11-30 16:38:32 +010046 build-type: "Debug",
47 cc: "gcc",
48 options: "",
49 packager: "sudo apt-get",
Michal Vaskoc1372ae2022-11-09 12:13:45 +010050 packages: "libcmocka-dev valgrind shunit2",
Michal Vaskoa2177482021-05-28 10:29:41 +020051 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010052 build-cmd: "make"
Radek Krejcif4d97292020-11-30 16:38:32 +010053 }
54 - {
Michal Vasko09bddf92022-11-09 12:04:11 +010055 name: "Debug, clang",
56 os: "ubuntu-22.04",
Radek Krejcif4d97292020-11-30 16:38:32 +010057 build-type: "Debug",
58 cc: "clang",
59 options: "",
60 packager: "sudo apt-get",
Michal Vasko09bddf92022-11-09 12:04:11 +010061 # no valgrind because it does not support DWARF5 yet generated by clang 14
Michal Vaskoc1372ae2022-11-09 12:13:45 +010062 packages: "libcmocka-dev shunit2",
Michal Vaskoa2177482021-05-28 10:29:41 +020063 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010064 build-cmd: "make"
Radek Krejcif4d97292020-11-30 16:38:32 +010065 }
66 - {
Michal Vaskod4200ac2024-07-16 11:12:44 +020067 name: "Release, macOS 14, clang",
68 os: "macos-14",
Radek Krejcif4d97292020-11-30 16:38:32 +010069 build-type: "Release",
70 cc: "clang",
Michal Vasko682d5432022-08-17 12:31:55 +020071 options: "-DENABLE_TESTS=ON -DPATH_EXPECT=",
Radek Krejcif4d97292020-11-30 16:38:32 +010072 packager: "brew",
Jan Kundrátdacafb62024-07-16 11:18:19 +020073 packages: "cmocka shunit2 tcl-tk",
Michal Vaskoa2177482021-05-28 10:29:41 +020074 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010075 build-cmd: "make"
Radek Krejcif4d97292020-11-30 16:38:32 +010076 }
77 - {
Michal Vasko09bddf92022-11-09 12:04:11 +010078 name: "ASAN and UBSAN",
Jan Kundrátda345692022-07-16 13:21:23 +020079 os: "ubuntu-22.04",
Radek Krejcif4d97292020-11-30 16:38:32 +010080 build-type: "Debug",
Michal Vasko09bddf92022-11-09 12:04:11 +010081 cc: "clang",
Michal Vaskocdffdab2021-06-23 14:00:10 +020082 options: "-DCMAKE_C_FLAGS=-fsanitize=address,undefined -DENABLE_TESTS=ON -DENABLE_VALGRIND_TESTS=OFF",
Radek Krejcif4d97292020-11-30 16:38:32 +010083 packager: "sudo apt-get",
Michal Vaskoa2177482021-05-28 10:29:41 +020084 packages: "libcmocka-dev",
85 snaps: "",
Michal Vaskocbb30612024-03-18 10:34:16 +010086 build-cmd: "make"
Michal Vaskoa2177482021-05-28 10:29:41 +020087 }
88 - {
89 name: "ABI Check",
Michal Vasko09bddf92022-11-09 12:04:11 +010090 os: "ubuntu-22.04",
Michal Vaskoa2177482021-05-28 10:29:41 +020091 build-type: "ABICheck",
92 cc: "gcc",
93 options: "",
Michal Vaskob5043682021-05-28 10:33:24 +020094 packager: "sudo apt-get",
Michal Vaskoa2177482021-05-28 10:29:41 +020095 packages: "libcmocka-dev abi-dumper abi-compliance-checker",
96 snaps: "core universal-ctags",
Michal Vaskocbb30612024-03-18 10:34:16 +010097 build-cmd: "make abi-check"
98 }
99 - {
100 name: "DEB Package",
101 os: "ubuntu-22.04",
102 build-type: "Release",
103 cc: "gcc",
104 options: "",
105 packager: "sudo apt-get",
Michal Vasko8ef803c2024-03-18 11:38:59 +0100106 packages: "cmake debhelper libcmocka-dev python3-pip",
Michal Vaskocbb30612024-03-18 10:34:16 +0100107 snaps: "",
Michal Vaskod69f7382024-03-18 11:06:03 +0100108 build-cmd: ""
Michal Vaskoa2177482021-05-28 10:29:41 +0200109 }
Radek Krejcif4d97292020-11-30 16:38:32 +0100110
111 steps:
Michal Vaskocbb30612024-03-18 10:34:16 +0100112 - uses: actions/checkout@main
Michal Vasko8f6ddc52024-03-18 11:36:42 +0100113 with:
114 fetch-depth: 100
Radek Krejcif4d97292020-11-30 16:38:32 +0100115
Michal Vaskoa2177482021-05-28 10:29:41 +0200116 - name: Deps-packages
117 shell: bash
118 run: |
119 ${{ matrix.config.packager }} update
120 if ${{ matrix.config.packages != '' }}
121 then ${{ matrix.config.packager }} install ${{ matrix.config.packages }}
122 fi
123 if ${{ matrix.config.snaps != '' }}
124 then sudo snap install ${{ matrix.config.snaps }}
125 fi
126
127 - name: Deps-uncrustify
Michal Vasko8bdbf852021-04-14 16:19:17 +0200128 shell: bash
129 working-directory: ${{ github.workspace }}
130 run: |
Michal Vasko84bf6f42023-05-19 11:09:48 +0200131 git clone --branch uncrustify-0.77.1 https://github.com/uncrustify/uncrustify
Michal Vasko8bdbf852021-04-14 16:19:17 +0200132 cd uncrustify
133 mkdir build
134 cd build
135 CC=${{ matrix.config.cc }} cmake ..
136 make
137 sudo make install
Michal Vasko09bddf92022-11-09 12:04:11 +0100138 if: ${{ matrix.config.name == 'Debug, gcc' }}
Michal Vasko8bdbf852021-04-14 16:19:17 +0200139
Michal Vaskod69f7382024-03-18 11:06:03 +0100140 - name: Build-and-install-package
141 shell: bash
Michal Vaskod187d9c2024-03-18 11:24:49 +0100142 working-directory: ${{ github.workspace }}
Michal Vaskod69f7382024-03-18 11:06:03 +0100143 run: |
144 pip install apkg
145 apkg system-setup
146 apkg build
147 apkg install
148 if: ${{ matrix.config.name == 'DEB Package' }}
149
Radek Krejcif4d97292020-11-30 16:38:32 +0100150 - name: Configure
151 shell: bash
152 working-directory: ${{ github.workspace }}
153 run: |
154 mkdir build
155 cd build
156 CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build-type }} ${{ matrix.config.options }} ..
Michal Vaskocbb30612024-03-18 10:34:16 +0100157 if: ${{ matrix.config.name != 'DEB Package' }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100158
159 - name: Build
160 shell: bash
161 working-directory: ${{ github.workspace }}/build
Michal Vaskoa2177482021-05-28 10:29:41 +0200162 run: |
163 export LC_ALL=C.UTF-8
164 export PATH=/snap/bin:${{ github.workspace }}/coverity-tools/bin:$PATH
Michal Vaskocbb30612024-03-18 10:34:16 +0100165 ${{ matrix.config.build-cmd }}
Michal Vaskod69f7382024-03-18 11:06:03 +0100166 if: ${{ matrix.config.name != 'DEB Package' }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100167
168 - name: Test
169 shell: bash
170 working-directory: ${{ github.workspace }}/build
171 run: ctest --output-on-failure
Michal Vaskod69f7382024-03-18 11:06:03 +0100172 if: ${{ matrix.config.name != 'DEB Package' }}
Jan Kundrátf202b122021-12-14 19:02:10 +0100173
174 build-windows:
175 name: ${{ matrix.name }}
176 runs-on: ${{ matrix.os }}
177 strategy:
178 fail-fast: false
179 matrix:
180 include:
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200181 - name: "Windows 2022 MSVC 16 LF"
182 os: windows-2022
183 triplet: x64-windows
184 build_type: Release
185 generators: "Visual Studio 17 2022"
186 autocrlf: input
187 eol: lf
188
189 - name: "Windows 2022 MSVC 16 no autoCRLF"
Jan Kundrátf202b122021-12-14 19:02:10 +0100190 os: windows-2022
191 triplet: x64-windows
192 build_type: Release
193 generators: "Visual Studio 17 2022"
194
195 steps:
196 - name: Unix line endings in git
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200197 if: matrix.autocrlf
Jan Kundrátf202b122021-12-14 19:02:10 +0100198 run: |
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200199 git config --global core.autocrlf ${{ matrix.autocrlf }}
200
201 - name: Unix line endings in git
202 if: matrix.eol
203 run: |
204 git config --global core.eol ${{ matrix.eol }}
Jan Kundrátf202b122021-12-14 19:02:10 +0100205
Michal Vasko99697d72024-03-18 11:11:32 +0100206 - uses: actions/checkout@main
Jan Kundrátf202b122021-12-14 19:02:10 +0100207
208 - name: Get number of CPU cores
209 id: cpu-cores
Michal Vasko09bddf92022-11-09 12:04:11 +0100210 uses: SimenB/github-actions-cpu-cores@v1
Jan Kundrátf202b122021-12-14 19:02:10 +0100211
212 - name: Install Windows dependencies
213 run: vcpkg install --triplet=${{ matrix.triplet }} pcre2 pthreads dirent dlfcn-win32 cmocka getopt
214
215 - name: Configure
216 shell: bash
217 run: |
218 cmake \
219 -S '${{ github.workspace }}/' \
220 -B '${{ github.workspace }}/'../build \
221 -G '${{ matrix.generators }}' \
222 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
223 -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
224 -DCMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT//\\//}/scripts/buildsystems/vcpkg.cmake \
225 -DENABLE_TESTS=ON \
226 '-DCMAKE_INSTALL_PREFIX:PATH=${{ github.workspace }}'/../target
227
228 - name: Build
229 working-directory: '${{ github.workspace }}/../build'
230 run: cmake --build . -j${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.build_type }}
231
232 - name: Test
233 working-directory: '${{ github.workspace }}/../build'
234 run: ctest --output-on-failure -j${{ steps.cpu-cores.outputs.count }} --build-config ${{ matrix.build_type }}
235
236 - name: Install
237 working-directory: '${{ github.workspace }}/../build'
238 run: cmake --install . --strip