name: build on: push: branches: [ master ] pull_request: branches: [ master ] jobs: clang-format: name: ClangFormat check runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Format code # ClangFormat 14 has a bug, which seems to be fixed in ClangFormat 15. Until GitHub-hosted runners support ClangFormat 15, we will stay at ClangFormat 13. run: find src/ test/ -iname '*.c' -or -iname '*.cpp' -or -iname '*.m' -or -iname '*.mm' -or -iname '*.h' -or -iname '*.hpp' | xargs clang-format-13 -i -style=file - name: Check diff run: git diff --exit-code build-ubuntu: name: Ubuntu ${{ matrix.os.name }} - ${{ matrix.compiler.name }}, ${{ matrix.portal.name }}, ${{ matrix.autoappend.name }}, ${{ matrix.shared_lib.name }}, C++${{ matrix.cppstd }} runs-on: ${{ matrix.os.label }} strategy: matrix: os: [ {label: ubuntu-latest, name: latest}, {label: ubuntu-20.04, name: 20.04} ] portal: [ {flag: OFF, dep: libgtk-3-dev, name: GTK}, {flag: ON, dep: libdbus-1-dev, name: Portal} ] # The NFD_PORTAL setting defaults to OFF (i.e. uses GTK) autoappend: [ {flag: OFF, name: NoAppendExtn} ] # By default the NFD_PORTAL mode does not append extensions, because it breaks some features of the portal compiler: [ {c: gcc, cpp: g++, name: GCC}, {c: clang, cpp: clang++, name: Clang} ] # The default compiler is gcc/g++ cppstd: [20, 11] shared_lib: [ {flag: OFF, name: Static} ] include: - os: {label: ubuntu-latest, name: latest} portal: {flag: ON, dep: libdbus-1-dev, name: Portal} autoappend: {flag: ON, name: AutoAppendExtn} compiler: {c: gcc, cpp: g++, name: GCC} cppstd: 11 shared_lib: {flag: OFF, name: Static} - os: {label: ubuntu-latest, name: latest} portal: {flag: ON, dep: libdbus-1-dev, name: Portal} autoappend: {flag: ON, name: AutoAppendExtn} compiler: {c: clang, cpp: clang++, name: Clang} cppstd: 11 shared_lib: {flag: OFF, name: Static} - os: {label: ubuntu-latest, name: latest} portal: {flag: ON, dep: libdbus-1-dev, name: Portal} autoappend: {flag: ON, name: NoAppendExtn} compiler: {c: gcc, cpp: g++, name: GCC} cppstd: 11 shared_lib: {flag: ON, name: Shared} steps: - name: Checkout uses: actions/checkout@v2 - name: Installing Dependencies run: sudo apt-get update && sudo apt-get install ${{ matrix.portal.dep }} - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${{ matrix.compiler.c }} -DCMAKE_CXX_COMPILER=${{ matrix.compiler.cpp }} -DCMAKE_CXX_STANDARD=${{ matrix.cppstd }} -DCMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror -pedantic" -DNFD_PORTAL=${{ matrix.portal.flag }} -DNFD_APPEND_EXTENSION=${{ matrix.autoappend.flag }} -DBUILD_SHARED_LIBS=${{ matrix.shared_lib.flag }} -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v2 with: name: Ubuntu ${{ matrix.os.name }} - ${{ matrix.compiler.name }}, ${{ matrix.portal.name }}, ${{ matrix.autoappend.name }}, ${{ matrix.shared_lib.name }}, C++${{ matrix.cppstd }} path: | build/src/* build/test/* build-macos-clang: name: MacOS ${{ matrix.os.name }} - Clang, ${{ matrix.shared_lib.name }} runs-on: ${{ matrix.os.label }} strategy: matrix: os: [ {label: macos-latest, name: latest}, {label: macos-11, name: 11} ] shared_lib: [ {flag: OFF, name: Static} ] include: - os: {label: macos-latest, name: latest} shared_lib: {flag: ON, name: Shared} steps: - name: Checkout uses: actions/checkout@v2 - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror -pedantic" -DBUILD_SHARED_LIBS=${{ matrix.shared_lib.flag }} -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v2 with: name: MacOS ${{ matrix.os.name }} - Clang, ${{ matrix.shared_lib.name }} path: | build/src/* build/test/* build-windows-msvc: name: Windows latest - MSVC, ${{ matrix.shared_lib.name }} runs-on: windows-latest strategy: matrix: shared_lib: [ {flag: OFF, name: Static}, {flag: ON, name: Shared} ] steps: - name: Checkout uses: actions/checkout@v2 - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DBUILD_SHARED_LIBS=${{ matrix.shared_lib.flag }} -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install --config Release - name: Upload test binaries uses: actions/upload-artifact@v2 with: name: Windows latest - MSVC, ${{ matrix.shared_lib.name }} path: | build/src/Release/* build/test/Release/* build-windows-clang: name: Windows latest - Clang, Static runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -T ClangCL -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install --config Release - name: Upload test binaries uses: actions/upload-artifact@v2 with: name: Windows latest - Clang, Static path: | build/src/Release/* build/test/Release/* build-windows-mingw: name: Windows latest - MinGW, Static runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - name: Checkout uses: actions/checkout@v2 - name: Set up MinGW-w64 uses: msys2/setup-msys2@v2 with: path-type: minimal install: >- base-devel mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -G 'MSYS Makefiles' -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror -pedantic" -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v2 with: name: Windows latest - MinGW, Static path: | build/src/* build/test/*