diff options
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r-- | .github/workflows/ci.yml | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ef3bfe6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,238 @@ +name: libyang CI +on: + push: + branches: + - master + - devel + pull_request: + branches: + - master + - devel + +jobs: + build-unix: + name: ${{ matrix.config.name }} + runs-on: ${{ matrix.config.os }} + strategy: + fail-fast: false + matrix: + config: + - { + name: "Release, gcc", + os: "ubuntu-22.04", + build-type: "Release", + cc: "gcc", + options: "-DENABLE_TESTS=ON", + packager: "sudo apt-get", + # no expect because stdout seems to be redirected + packages: "libcmocka-dev shunit2", + snaps: "", + build-cmd: "make" + } + - { + name: "Release, clang", + os: "ubuntu-22.04", + build-type: "Release", + cc: "clang", + options: "-DENABLE_TESTS=ON", + packager: "sudo apt-get", + packages: "libcmocka-dev shunit2", + snaps: "", + build-cmd: "make" + } + - { + name: "Debug, gcc", + os: "ubuntu-22.04", + build-type: "Debug", + cc: "gcc", + options: "", + packager: "sudo apt-get", + packages: "libcmocka-dev valgrind shunit2", + snaps: "", + build-cmd: "make" + } + - { + name: "Debug, clang", + os: "ubuntu-22.04", + build-type: "Debug", + cc: "clang", + options: "", + packager: "sudo apt-get", + # no valgrind because it does not support DWARF5 yet generated by clang 14 + packages: "libcmocka-dev shunit2", + snaps: "", + build-cmd: "make" + } + - { + name: "Release, macOS 11, clang", + os: "macos-11", + build-type: "Release", + cc: "clang", + options: "-DENABLE_TESTS=ON -DPATH_EXPECT=", + packager: "brew", + packages: "cmocka shunit2", + snaps: "", + build-cmd: "make" + } + - { + name: "ASAN and UBSAN", + os: "ubuntu-22.04", + build-type: "Debug", + cc: "clang", + options: "-DCMAKE_C_FLAGS=-fsanitize=address,undefined -DENABLE_TESTS=ON -DENABLE_VALGRIND_TESTS=OFF", + packager: "sudo apt-get", + packages: "libcmocka-dev", + snaps: "", + build-cmd: "make" + } + - { + name: "ABI Check", + os: "ubuntu-22.04", + build-type: "ABICheck", + cc: "gcc", + options: "", + packager: "sudo apt-get", + packages: "libcmocka-dev abi-dumper abi-compliance-checker", + snaps: "core universal-ctags", + build-cmd: "make abi-check" + } + - { + name: "DEB Package", + os: "ubuntu-22.04", + build-type: "Release", + cc: "gcc", + options: "", + packager: "sudo apt-get", + packages: "cmake debhelper libcmocka-dev python3-pip", + snaps: "", + build-cmd: "" + } + + steps: + - uses: actions/checkout@main + with: + fetch-depth: 100 + + - name: Deps-packages + shell: bash + run: | + ${{ matrix.config.packager }} update + if ${{ matrix.config.packages != '' }} + then ${{ matrix.config.packager }} install ${{ matrix.config.packages }} + fi + if ${{ matrix.config.snaps != '' }} + then sudo snap install ${{ matrix.config.snaps }} + fi + + - name: Deps-uncrustify + shell: bash + working-directory: ${{ github.workspace }} + run: | + git clone --branch uncrustify-0.77.1 https://github.com/uncrustify/uncrustify + cd uncrustify + mkdir build + cd build + CC=${{ matrix.config.cc }} cmake .. + make + sudo make install + if: ${{ matrix.config.name == 'Debug, gcc' }} + + - name: Build-and-install-package + shell: bash + working-directory: ${{ github.workspace }} + run: | + pip install apkg + apkg system-setup + apkg build + apkg install + if: ${{ matrix.config.name == 'DEB Package' }} + + - name: Configure + shell: bash + working-directory: ${{ github.workspace }} + run: | + mkdir build + cd build + CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build-type }} ${{ matrix.config.options }} .. + if: ${{ matrix.config.name != 'DEB Package' }} + + - name: Build + shell: bash + working-directory: ${{ github.workspace }}/build + run: | + export LC_ALL=C.UTF-8 + export PATH=/snap/bin:${{ github.workspace }}/coverity-tools/bin:$PATH + ${{ matrix.config.build-cmd }} + if: ${{ matrix.config.name != 'DEB Package' }} + + - name: Test + shell: bash + working-directory: ${{ github.workspace }}/build + run: ctest --output-on-failure + if: ${{ matrix.config.name != 'DEB Package' }} + + build-windows: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - name: "Windows 2022 MSVC 16 LF" + os: windows-2022 + triplet: x64-windows + build_type: Release + generators: "Visual Studio 17 2022" + autocrlf: input + eol: lf + + - name: "Windows 2022 MSVC 16 no autoCRLF" + os: windows-2022 + triplet: x64-windows + build_type: Release + generators: "Visual Studio 17 2022" + + steps: + - name: Unix line endings in git + if: matrix.autocrlf + run: | + git config --global core.autocrlf ${{ matrix.autocrlf }} + + - name: Unix line endings in git + if: matrix.eol + run: | + git config --global core.eol ${{ matrix.eol }} + + - uses: actions/checkout@main + + - name: Get number of CPU cores + id: cpu-cores + uses: SimenB/github-actions-cpu-cores@v1 + + - name: Install Windows dependencies + run: vcpkg install --triplet=${{ matrix.triplet }} pcre2 pthreads dirent dlfcn-win32 cmocka getopt + + - name: Configure + shell: bash + run: | + cmake \ + -S '${{ github.workspace }}/' \ + -B '${{ github.workspace }}/'../build \ + -G '${{ matrix.generators }}' \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \ + -DCMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT//\\//}/scripts/buildsystems/vcpkg.cmake \ + -DENABLE_TESTS=ON \ + '-DCMAKE_INSTALL_PREFIX:PATH=${{ github.workspace }}'/../target + + - name: Build + working-directory: '${{ github.workspace }}/../build' + run: cmake --build . -j${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.build_type }} + + - name: Test + working-directory: '${{ github.workspace }}/../build' + run: ctest --output-on-failure -j${{ steps.cpu-cores.outputs.count }} --build-config ${{ matrix.build_type }} + + - name: Install + working-directory: '${{ github.workspace }}/../build' + run: cmake --install . --strip |