blob: 88c81aff7f0f280d09a8d57fdc0c7f477749e607 [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 Vaskodca63462022-08-17 12:03:34 +020067 name: "Release, macOS 11, clang",
68 os: "macos-11",
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",
Michal Vasko682d5432022-08-17 12:31:55 +020073 packages: "cmocka shunit2",
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",
106 packages: "python3-pip",
107 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
Radek Krejcif4d97292020-11-30 16:38:32 +0100113
Michal Vaskoa2177482021-05-28 10:29:41 +0200114 - name: Deps-packages
115 shell: bash
116 run: |
117 ${{ matrix.config.packager }} update
118 if ${{ matrix.config.packages != '' }}
119 then ${{ matrix.config.packager }} install ${{ matrix.config.packages }}
120 fi
121 if ${{ matrix.config.snaps != '' }}
122 then sudo snap install ${{ matrix.config.snaps }}
123 fi
124
125 - name: Deps-uncrustify
Michal Vasko8bdbf852021-04-14 16:19:17 +0200126 shell: bash
127 working-directory: ${{ github.workspace }}
128 run: |
Michal Vasko84bf6f42023-05-19 11:09:48 +0200129 git clone --branch uncrustify-0.77.1 https://github.com/uncrustify/uncrustify
Michal Vasko8bdbf852021-04-14 16:19:17 +0200130 cd uncrustify
131 mkdir build
132 cd build
133 CC=${{ matrix.config.cc }} cmake ..
134 make
135 sudo make install
Michal Vasko09bddf92022-11-09 12:04:11 +0100136 if: ${{ matrix.config.name == 'Debug, gcc' }}
Michal Vasko8bdbf852021-04-14 16:19:17 +0200137
Michal Vaskod69f7382024-03-18 11:06:03 +0100138 - name: Build-and-install-package
139 shell: bash
140 working-directory: ${{ github.workspace }}
141 run: |
142 pip install apkg
143 apkg system-setup
144 apkg build
145 apkg install
146 if: ${{ matrix.config.name == 'DEB Package' }}
147
Radek Krejcif4d97292020-11-30 16:38:32 +0100148 - name: Configure
149 shell: bash
150 working-directory: ${{ github.workspace }}
151 run: |
152 mkdir build
153 cd build
154 CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build-type }} ${{ matrix.config.options }} ..
Michal Vaskocbb30612024-03-18 10:34:16 +0100155 if: ${{ matrix.config.name != 'DEB Package' }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100156
157 - name: Build
158 shell: bash
159 working-directory: ${{ github.workspace }}/build
Michal Vaskoa2177482021-05-28 10:29:41 +0200160 run: |
161 export LC_ALL=C.UTF-8
162 export PATH=/snap/bin:${{ github.workspace }}/coverity-tools/bin:$PATH
Michal Vaskocbb30612024-03-18 10:34:16 +0100163 ${{ matrix.config.build-cmd }}
Michal Vaskod69f7382024-03-18 11:06:03 +0100164 if: ${{ matrix.config.name != 'DEB Package' }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100165
166 - name: Test
167 shell: bash
168 working-directory: ${{ github.workspace }}/build
169 run: ctest --output-on-failure
Michal Vaskod69f7382024-03-18 11:06:03 +0100170 if: ${{ matrix.config.name != 'DEB Package' }}
Jan Kundrátf202b122021-12-14 19:02:10 +0100171
172 build-windows:
173 name: ${{ matrix.name }}
174 runs-on: ${{ matrix.os }}
175 strategy:
176 fail-fast: false
177 matrix:
178 include:
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200179 - name: "Windows 2022 MSVC 16 LF"
180 os: windows-2022
181 triplet: x64-windows
182 build_type: Release
183 generators: "Visual Studio 17 2022"
184 autocrlf: input
185 eol: lf
186
187 - name: "Windows 2022 MSVC 16 no autoCRLF"
Jan Kundrátf202b122021-12-14 19:02:10 +0100188 os: windows-2022
189 triplet: x64-windows
190 build_type: Release
191 generators: "Visual Studio 17 2022"
192
193 steps:
194 - name: Unix line endings in git
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200195 if: matrix.autocrlf
Jan Kundrátf202b122021-12-14 19:02:10 +0100196 run: |
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200197 git config --global core.autocrlf ${{ matrix.autocrlf }}
198
199 - name: Unix line endings in git
200 if: matrix.eol
201 run: |
202 git config --global core.eol ${{ matrix.eol }}
Jan Kundrátf202b122021-12-14 19:02:10 +0100203
Michal Vasko09bddf92022-11-09 12:04:11 +0100204 - uses: actions/checkout@v3
Jan Kundrátf202b122021-12-14 19:02:10 +0100205
206 - name: Get number of CPU cores
207 id: cpu-cores
Michal Vasko09bddf92022-11-09 12:04:11 +0100208 uses: SimenB/github-actions-cpu-cores@v1
Jan Kundrátf202b122021-12-14 19:02:10 +0100209
210 - name: Install Windows dependencies
211 run: vcpkg install --triplet=${{ matrix.triplet }} pcre2 pthreads dirent dlfcn-win32 cmocka getopt
212
213 - name: Configure
214 shell: bash
215 run: |
216 cmake \
217 -S '${{ github.workspace }}/' \
218 -B '${{ github.workspace }}/'../build \
219 -G '${{ matrix.generators }}' \
220 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
221 -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
222 -DCMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT//\\//}/scripts/buildsystems/vcpkg.cmake \
223 -DENABLE_TESTS=ON \
224 '-DCMAKE_INSTALL_PREFIX:PATH=${{ github.workspace }}'/../target
225
226 - name: Build
227 working-directory: '${{ github.workspace }}/../build'
228 run: cmake --build . -j${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.build_type }}
229
230 - name: Test
231 working-directory: '${{ github.workspace }}/../build'
232 run: ctest --output-on-failure -j${{ steps.cpu-cores.outputs.count }} --build-config ${{ matrix.build_type }}
233
234 - name: Install
235 working-directory: '${{ github.workspace }}/../build'
236 run: cmake --install . --strip