summaryrefslogtreecommitdiffstats
path: root/.github/workflows/ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r--.github/workflows/ci.yml238
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