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@v4 - name: Format code run: find src/ test/ -iname '*.c' -or -iname '*.cpp' -or -iname '*.m' -or -iname '*.mm' -or -iname '*.h' -or -iname '*.hpp' | xargs clang-format -i -style=file - name: Check diff run: git diff --exit-code line-endings: name: Line endings check runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install Dependencies run: sudo apt-get update && sudo apt-get install dos2unix - name: Convert to Unix line endings run: dos2unix */* - 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.casesensitive.name }}, ${{ matrix.shared_lib.name }}, C++${{ matrix.cppstd }} runs-on: ${{ matrix.os.label }} strategy: matrix: os: [ {label: ubuntu-latest, name: latest}, {label: ubuntu-22.04, name: 22.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 casesensitive: [ {flag: OFF, name: CaseInsensitive} ] # Case insensitive or case sensitive file filtering 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} casesensitive: {flag: OFF, name: CaseInsensitive} 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} casesensitive: {flag: OFF, name: CaseInsensitive} 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: OFF, name: NoAppendExtn} casesensitive: {flag: OFF, name: CaseInsensitive} compiler: {c: gcc, cpp: g++, name: GCC} cppstd: 11 shared_lib: {flag: ON, name: Shared} - os: {label: ubuntu-latest, name: latest} portal: {flag: OFF, dep: libgtk-3-dev, name: GTK} autoappend: {flag: OFF, name: NoAppendExtn} casesensitive: {flag: ON, name: CaseSensitive} 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: OFF, name: NoAppendExtn} casesensitive: {flag: ON, name: CaseSensitive} compiler: {c: gcc, cpp: g++, name: GCC} cppstd: 11 shared_lib: {flag: OFF, name: Static} steps: - name: Checkout uses: actions/checkout@v4 - name: Install 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 -Wshadow -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DNFD_PORTAL=${{ matrix.portal.flag }} -DNFD_APPEND_EXTENSION=${{ matrix.autoappend.flag }} -DNFD_CASE_SENSITIVE_FILTER=${{ matrix.casesensitive.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@v4 with: name: Ubuntu ${{ matrix.os.name }} - ${{ matrix.compiler.name }}, ${{ matrix.portal.name }}, ${{ matrix.autoappend.name }}, ${{ matrix.casesensitive.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} ] shared_lib: [ {flag: OFF, name: Static}, {flag: ON, name: Shared} ] steps: - name: Checkout uses: actions/checkout@v4 - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wshadow -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@v4 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@v4 - 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@v4 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@v4 - name: Downgrade CMake # force downgrade CMake as later versions try to use the C++ standard flag to compile C programs, which cause an error. run: choco install cmake --version 3.30.6 --allow-downgrade - 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@v4 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@v4 - 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 -Wshadow -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DNFD_BUILD_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v4 with: name: Windows latest - MinGW, Static path: | build/src/* build/test/* build-ubuntu-sdl2: name: Ubuntu latest - GCC, ${{ matrix.portal.name }}, Static, SDL2 runs-on: ubuntu-latest strategy: matrix: 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) steps: - name: Checkout uses: actions/checkout@v4 - name: Install Dependencies run: sudo apt-get update && sudo apt-get install ${{ matrix.portal.dep }} libsdl2-dev libsdl2-ttf-dev - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DNFD_PORTAL=${{ matrix.portal.flag }} -DNFD_APPEND_EXTENSION=OFF -DNFD_BUILD_TESTS=OFF -DNFD_BUILD_SDL2_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v4 with: name: Ubuntu latest - GCC, ${{ matrix.portal.name }}, Static, SDL2 path: | build/src/* build/test/* build-macos-sdl2: name: MacOS latest - Clang, Static, SDL2 runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install Dependencies run: brew install sdl2 sdl2_ttf - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wshadow -Werror -pedantic" -DNFD_BUILD_TESTS=OFF -DNFD_BUILD_SDL2_TESTS=ON .. - name: Build run: cmake --build build --target install - name: Upload test binaries uses: actions/upload-artifact@v4 with: name: MacOS latest - Clang, Static, SDL2 path: | build/src/* build/test/* build-windows-sdl2: name: Windows latest - MSVC, Static, SDL2 runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install pkgconfiglite run: choco install pkgconfiglite - name: Install Dependencies run: vcpkg integrate install && vcpkg install sdl2 sdl2-ttf --triplet=x64-windows-release - name: Configure run: mkdir build && mkdir install && cd build && cmake -DCMAKE_INSTALL_PREFIX="../install" -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-release" -DNFD_BUILD_TESTS=OFF -DNFD_BUILD_SDL2_TESTS=ON .. - name: Build run: cmake --build build --target install --config Release - name: Upload test binaries uses: actions/upload-artifact@v4 with: name: Windows latest - MSVC, Static, SDL2 path: | build/src/Release/* build/test/Release/*