name: C/C++ CI env: LLHTTP_VERSION: "v9.2.1" RESTINIO_VERSION: "0.7.8.1" EXPECTED_LITE_URL: "https://raw.githubusercontent.com/martinmoene/expected-lite/master/include/nonstd/expected.hpp" UBUNTU_FULL_DEPS: "libncurses5-dev libreadline-dev nettle-dev libasio-dev libgnutls28-dev libuv1-dev python3-pip python3-dev python3-setuptools libcppunit-dev libjsoncpp-dev libfmt-dev libmsgpack-dev libargon2-dev" UBUNTU_MESON_DEPS: "ninja-build libncurses5-dev libreadline-dev nettle-dev libasio-dev libgnutls28-dev libuv1-dev python3-dev python3-setuptools python3-pip libcppunit-dev libjsoncpp-dev libfmt-dev libmsgpack-dev libargon2-dev" UBUNTU_MINIMAL_DEPS: "libncurses5-dev libreadline-dev nettle-dev libfmt-dev libgnutls28-dev libcppunit-dev libmsgpack-dev libargon2-dev" DEBIAN13_DEPS: "git libtool pkg-config wget cmake libncurses5-dev libreadline-dev nettle-dev libasio-dev libgnutls28-dev libuv1-dev python3-pip python3-dev python3-setuptools libcppunit-dev libjsoncpp-dev libfmt-dev libmsgpack-dev libargon2-dev" on: [push, pull_request] jobs: build-ubuntu-meson: name: Ubuntu/GCC Meson build runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Install Dependencies run: | echo "Installing Ubuntu meson dependencies:" sudo apt update sudo apt install -y $UBUNTU_MESON_DEPS - name: Install Python dependencies run: sudo pip3 install meson Cython - name: Configure with Meson run: meson setup build . - name: Build with Ninja run: cd build && ninja build-ubuntu-minimal: name: Ubuntu/GCC minimal build runs-on: ubuntu-latest strategy: matrix: cxx_standard: [17, 20, 23] steps: - uses: actions/checkout@v7 - name: Install Minimal Dependencies run: | echo "Installing Ubuntu minimal dependencies:" sudo apt-get update sudo apt-get install -y $UBUNTU_MINIMAL_DEPS - name: Configure project with CMake run: | mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=${{ matrix.cxx_standard }} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DOPENDHT_C=Off -DBUILD_TESTING=On \ -DOPENDHT_PEER_DISCOVERY=Off -DOPENDHT_PYTHON=Off \ -DOPENDHT_TOOLS=On -DOPENDHT_PROXY_SERVER=Off -DOPENDHT_PROXY_CLIENT=Off - name: Build run: cd build && make - name: Run Unit tests run: ctest --output-on-failure --test-dir build build-debian13: name: Debian 13/GCC build runs-on: ubuntu-latest container: image: debian:13 volumes: - .:/workspace options: --workdir /workspace env: DEBIAN_FRONTEND: noninteractive steps: - uses: actions/checkout@v7 - name: Install Dependencies run: | apt-get update apt-get install -y $DEBIAN13_DEPS - name: Build llhttp dependency run: | mkdir llhttp wget "https://github.com/nodejs/llhttp/archive/refs/tags/release/${LLHTTP_VERSION}.tar.gz" -O llhttp.tar.gz tar -xzf llhttp.tar.gz -C llhttp --strip-components=1 cd llhttp && cmake -DCMAKE_INSTALL_PREFIX=/usr . && make -j2 && make install cd ../ && rm -rf llhttp* - name: Install expected-lite header run: | mkdir -p /usr/local/include/nonstd wget "${EXPECTED_LITE_URL}" -O /usr/local/include/nonstd/expected.hpp - name: Build restinio dependency run: | mkdir restinio && cd restinio wget "https://github.com/Stiffstream/restinio/releases/download/v${RESTINIO_VERSION}/restinio-${RESTINIO_VERSION}.tar.bz2" tar -xjf restinio-${RESTINIO_VERSION}.tar.bz2 cd restinio-${RESTINIO_VERSION}/dev cmake -DCMAKE_INSTALL_PREFIX=/usr/local \ -DRESTINIO_TEST=Off -DRESTINIO_SAMPLE=Off -DRESTINIO_BENCHMARK=Off \ -DRESTINIO_WITH_SOBJECTIZER=Off \ -DRESTINIO_DEP_STANDALONE_ASIO=system -DRESTINIO_DEP_LLHTTP=system \ -DRESTINIO_DEP_FMT=system -DRESTINIO_DEP_EXPECTED_LITE=system . make install cd ../../ && rm -rf restinio* - name: Configure project with CMake run: | mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Debug \ -DOPENDHT_C=On -DBUILD_TESTING=On \ -DOPENDHT_PEER_DISCOVERY=On -DOPENDHT_PYTHON=Off \ -DOPENDHT_TOOLS=On -DOPENDHT_PROXY_SERVER=On \ -DOPENDHT_PROXY_CLIENT=On - name: Build run: cd build && make build-macos: name: macOS/Clang build runs-on: macos-15 strategy: matrix: cxx_standard: [17, 20, 23] steps: - uses: actions/checkout@v7 - name: Install Homebrew Dependencies run: brew install msgpack-cxx asio gnutls nettle readline fmt jsoncpp argon2 openssl cppunit - name: Install expected-lite header run: | sudo mkdir -p /usr/local/include/nonstd sudo wget "${EXPECTED_LITE_URL}" -O /usr/local/include/nonstd/expected.hpp - name: Build restinio dependency run: | mkdir restinio && cd restinio wget "https://github.com/Stiffstream/restinio/releases/download/v${RESTINIO_VERSION}/restinio-${RESTINIO_VERSION}.tar.bz2" tar -xjf restinio-${RESTINIO_VERSION}.tar.bz2 cd restinio-${RESTINIO_VERSION}/dev cmake -DCMAKE_INSTALL_PREFIX=/usr/local \ -DRESTINIO_TEST=Off -DRESTINIO_SAMPLE=Off -DRESTINIO_BENCHMARK=Off \ -DRESTINIO_WITH_SOBJECTIZER=Off \ -DRESTINIO_DEP_STANDALONE_ASIO=system -DRESTINIO_DEP_LLHTTP=system \ -DRESTINIO_DEP_FMT=system -DRESTINIO_DEP_EXPECTED_LITE=system . make -j2 && sudo make install cd ../../ && rm -rf restinio* - name: Configure project with CMake run: | mkdir build && cd build # Set Homebrew OpenSSL paths export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl@3/lib" export CPPFLAGS="-I/usr/local/opt/openssl@3/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig" cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \ -DOPENDHT_DOWNLOAD_DEPS=ON \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=${{ matrix.cxx_standard }} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DOPENDHT_C=On -DBUILD_TESTING=On \ -DOPENDHT_PEER_DISCOVERY=On -DOPENDHT_PYTHON=Off \ -DOPENDHT_TOOLS=On -DOPENDHT_PROXY_SERVER=On \ -DOPENDHT_PROXY_CLIENT=On -DOPENDHT_PUSH_NOTIFICATIONS=On - name: Build run: cd build && make