diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 289e46e5370227c375716c3059d7c1a18b3c0a73..c9b78862fd3b258cf643b1d7353cb3fababe69b2 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -1,5 +1,13 @@ name: C/C++ CI +env: + LLHTTP_VERSION: "v9.2.0" + RESTINIO_VERSION: "0.7.3" + 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 autotools-dev autoconf 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" + on: [push, pull_request] jobs: @@ -7,122 +15,142 @@ jobs: name: Ubuntu/GCC Autotools build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Dependencies - run: | - sudo apt update && \ - sudo apt install libncurses5-dev libreadline-dev nettle-dev libasio-dev \ - libgnutls28-dev libuv1-dev python3-pip python3-dev python3-setuptools libcppunit-dev libjsoncpp-dev \ - autotools-dev autoconf libfmt-dev libmsgpack-dev libargon2-dev - - name: Cython - run: sudo pip3 install Cython - - name: llhttp - run: | - mkdir llhttp - wget https://github.com/nodejs/llhttp/archive/refs/tags/release/v9.2.0.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 && sudo make install - cd ../ && rm -rf llhttp* - - name: expected-lite - run: | - sudo mkdir /usr/local/include/nonstd && \ - sudo wget https://raw.githubusercontent.com/martinmoene/expected-lite/master/include/nonstd/expected.hpp \ - -O /usr/local/include/nonstd/expected.hpp - - name: restinio - run: | - mkdir restinio && cd restinio - wget https://github.com/Stiffstream/restinio/releases/download/v.0.7.3/restinio-0.7.3.tar.bz2 - ls -l && tar -xjf restinio-0.7.3.tar.bz2 - cd restinio-0.7.3/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 \ + - uses: actions/checkout@v4 + + - name: Install Dependencies + run: | + echo "Installing Ubuntu full dependencies:" + sudo apt update + sudo apt install -y $UBUNTU_FULL_DEPS + + - name: Install Cython + run: sudo pip3 install Cython + + - 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 && sudo make install + cd ../ && rm -rf llhttp* + + - 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 . - sudo make install - cd ../../ && rm -rf restinio* - - name: Configure - run: | - ./autogen.sh - ./configure --enable-proxy-client - - name: Build - run: make + sudo make install + cd ../../ && rm -rf restinio* + + - name: Configure project + run: | + ./autogen.sh + ./configure --enable-proxy-client + + - name: Build + run: make build-ubuntu-meson: name: Ubuntu/GCC Meson build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Dependencies - run: | - sudo apt update && \ - sudo apt install 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 - - name: Python dependencies - run: sudo pip3 install meson Cython - - name: Configure - run: meson setup build . - - name: Build - run: cd build && ninja + - uses: actions/checkout@v4 + + - 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 steps: - - uses: actions/checkout@v4 - - name: Dependencies - run: | - sudo apt update && \ - sudo apt install libncurses5-dev libreadline-dev nettle-dev libfmt-dev \ - libgnutls28-dev libcppunit-dev libmsgpack-dev libargon2-dev - - name: Configure - run: | - mkdir build && cd build - cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Debug \ - -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: Unit tests - run: cd build && ./opendht_unit_tests + - uses: actions/checkout@v4 + + - name: Install Minimal Dependencies + run: | + echo "Installing Ubuntu minimal dependencies:" + sudo apt update + sudo apt 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 \ + -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: cd build && ./opendht_unit_tests build-macos: name: macOS/Clang build - runs-on: macOS-15 + runs-on: macos-15 steps: - - uses: actions/checkout@v4 - - name: Dependencies - run: | - brew install msgpack-cxx asio gnutls nettle readline fmt jsoncpp argon2 openssl cppunit - - - name: expected-lite - run: | - sudo mkdir -p /usr/local/include/nonstd && \ - sudo wget https://raw.githubusercontent.com/martinmoene/expected-lite/master/include/nonstd/expected.hpp \ - -O /usr/local/include/nonstd/expected.hpp - - - name: restinio - run: | - mkdir restinio && cd restinio - wget https://github.com/Stiffstream/restinio/releases/download/v.0.7.3/restinio-0.7.3.tar.bz2 - ls -l && tar -xjf restinio-0.7.3.tar.bz2 - cd restinio-0.7.3/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 \ + - uses: actions/checkout@v4 + + - 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 - run: | - mkdir build && cd build - 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 -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 -DOPENDHT_PUSH_NOTIFICATIONS=On - - - name: Build - run: cd build && make + 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 \ + -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 -DOPENDHT_PUSH_NOTIFICATIONS=On + - name: Build + run: cd build && make