blob: 594945c62c7810a5678f1c51e418eab761fa6ba9 [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: "",
108 build-cmd: "pip install apkg && apkg system-setup && apkg build && apkg install"
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
Radek Krejcif4d97292020-11-30 16:38:32 +0100138 - name: Configure
139 shell: bash
140 working-directory: ${{ github.workspace }}
141 run: |
142 mkdir build
143 cd build
144 CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build-type }} ${{ matrix.config.options }} ..
Michal Vaskocbb30612024-03-18 10:34:16 +0100145 if: ${{ matrix.config.name != 'DEB Package' }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100146
147 - name: Build
148 shell: bash
149 working-directory: ${{ github.workspace }}/build
Michal Vaskoa2177482021-05-28 10:29:41 +0200150 run: |
151 export LC_ALL=C.UTF-8
152 export PATH=/snap/bin:${{ github.workspace }}/coverity-tools/bin:$PATH
Michal Vaskocbb30612024-03-18 10:34:16 +0100153 ${{ matrix.config.build-cmd }}
Radek Krejcif4d97292020-11-30 16:38:32 +0100154
155 - name: Test
156 shell: bash
157 working-directory: ${{ github.workspace }}/build
158 run: ctest --output-on-failure
Jan Kundrátf202b122021-12-14 19:02:10 +0100159
160 build-windows:
161 name: ${{ matrix.name }}
162 runs-on: ${{ matrix.os }}
163 strategy:
164 fail-fast: false
165 matrix:
166 include:
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200167 - name: "Windows 2022 MSVC 16 LF"
168 os: windows-2022
169 triplet: x64-windows
170 build_type: Release
171 generators: "Visual Studio 17 2022"
172 autocrlf: input
173 eol: lf
174
175 - name: "Windows 2022 MSVC 16 no autoCRLF"
Jan Kundrátf202b122021-12-14 19:02:10 +0100176 os: windows-2022
177 triplet: x64-windows
178 build_type: Release
179 generators: "Visual Studio 17 2022"
180
181 steps:
182 - name: Unix line endings in git
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200183 if: matrix.autocrlf
Jan Kundrátf202b122021-12-14 19:02:10 +0100184 run: |
Jan Kundráta3b1c6d2022-07-07 21:53:34 +0200185 git config --global core.autocrlf ${{ matrix.autocrlf }}
186
187 - name: Unix line endings in git
188 if: matrix.eol
189 run: |
190 git config --global core.eol ${{ matrix.eol }}
Jan Kundrátf202b122021-12-14 19:02:10 +0100191
Michal Vasko09bddf92022-11-09 12:04:11 +0100192 - uses: actions/checkout@v3
Jan Kundrátf202b122021-12-14 19:02:10 +0100193
194 - name: Get number of CPU cores
195 id: cpu-cores
Michal Vasko09bddf92022-11-09 12:04:11 +0100196 uses: SimenB/github-actions-cpu-cores@v1
Jan Kundrátf202b122021-12-14 19:02:10 +0100197
198 - name: Install Windows dependencies
199 run: vcpkg install --triplet=${{ matrix.triplet }} pcre2 pthreads dirent dlfcn-win32 cmocka getopt
200
201 - name: Configure
202 shell: bash
203 run: |
204 cmake \
205 -S '${{ github.workspace }}/' \
206 -B '${{ github.workspace }}/'../build \
207 -G '${{ matrix.generators }}' \
208 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
209 -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
210 -DCMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT//\\//}/scripts/buildsystems/vcpkg.cmake \
211 -DENABLE_TESTS=ON \
212 '-DCMAKE_INSTALL_PREFIX:PATH=${{ github.workspace }}'/../target
213
214 - name: Build
215 working-directory: '${{ github.workspace }}/../build'
216 run: cmake --build . -j${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.build_type }}
217
218 - name: Test
219 working-directory: '${{ github.workspace }}/../build'
220 run: ctest --output-on-failure -j${{ steps.cpu-cores.outputs.count }} --build-config ${{ matrix.build_type }}
221
222 - name: Install
223 working-directory: '${{ github.workspace }}/../build'
224 run: cmake --install . --strip