name: C/C++ CI on: [push, pull_request] jobs: build-ubuntu: timeout-minutes: 10 runs-on: ${{ matrix.config.os }} strategy: matrix: config: - {os: ubuntu-20.04, c: gcc-11, cpp: g++-11} - {os: ubuntu-22.04, c: gcc-12, cpp: g++-12} steps: - name: Install dependencies run: | sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install -y git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev ${{ matrix.config.c }} ${{ matrix.config.cpp }} - name: Checkout repository uses: actions/checkout@v3 with: submodules: true - name: Build p2pool run: | mkdir build cd build cmake .. -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} make -j$(nproc) - name: Build tests run: | cd tests mkdir build cd build cmake .. -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} make -j$(nproc) - name: Run tests run: | cd tests/build gunzip *.gz ./p2pool_tests - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-${{ matrix.config.os }} path: build/p2pool build-ubuntu-static-libs: timeout-minutes: 15 runs-on: ubuntu-22.04 steps: - name: Install dependencies run: | sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install -y git build-essential cmake autoconf libgss-dev gcc-12 g++-12 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g++ g++ /usr/bin/g++-12 --slave /usr/bin/gcov gcov /usr/bin/gcov-12 - name: Checkout repository uses: actions/checkout@v3 with: submodules: true - name: Build libcurl run: | cd external/src/curl autoreconf -fi ./configure CFLAGS='-Os' --without-ssl --without-hyper --without-zlib --without-brotli --without-zstd --without-default-ssl-backend --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libgsasl --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 --without-ngtcp2 --without-nghttp3 --without-quiche --without-msh3 --without-zsh-functions-dir --without-fish-functions-dir --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-mqtt --disable-manual --disable-ntlm --disable-ntlm-wb --disable-tls-srp --disable-unix-sockets --disable-cookies --disable-socketpair --disable-doh --disable-dateparse --disable-netrc --disable-progress-meter --disable-dnsshuffle --disable-hsts --disable-alt-svc --disable-ares make -j$(nproc) - name: Build libuv run: | cd external/src/libuv mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DBUILD_TESTING=OFF make -j$(nproc) - name: Build libzmq run: | cd external/src/libzmq mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DCMAKE_CXX_FLAGS='-Os' -DWITH_TLS=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DWITH_PERF_TOOL=OFF make -j$(nproc) - name: Build p2pool run: | mkdir build cd build cmake .. -DSTATIC_LIBS=ON make -j$(nproc) - name: Build tests run: | cd tests mkdir build cd build cmake .. -DSTATIC_LIBS=ON make -j$(nproc) - name: Run tests run: | cd tests/build gunzip *.gz ./p2pool_tests - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-ubuntu-static-libs path: build/p2pool build-ubuntu-aarch64: timeout-minutes: 10 runs-on: ${{ matrix.config.os }} strategy: matrix: config: - {os: ubuntu-20.04} - {os: ubuntu-22.04} steps: - name: Install dependencies run: | sudo apt update sudo apt install -y git build-essential cmake autoconf gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Checkout repository uses: actions/checkout@v3 with: submodules: true - name: Build libcurl run: | cd external/src/curl autoreconf -fi ./configure --host=aarch64-linux-gnu CFLAGS='-Os' --without-ssl --without-hyper --without-zlib --without-brotli --without-zstd --without-default-ssl-backend --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libgsasl --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 --without-ngtcp2 --without-nghttp3 --without-quiche --without-msh3 --without-zsh-functions-dir --without-fish-functions-dir --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-mqtt --disable-manual --disable-ntlm --disable-ntlm-wb --disable-tls-srp --disable-unix-sockets --disable-cookies --disable-socketpair --disable-doh --disable-dateparse --disable-netrc --disable-progress-meter --disable-dnsshuffle --disable-hsts --disable-alt-svc --disable-ares make -j$(nproc) - name: Build libuv run: | cd external/src/libuv mkdir build cd build cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_C_FLAGS='-Os' -DBUILD_TESTING=OFF make -j$(nproc) - name: Build libzmq run: | cd external/src/libzmq mkdir build cd build cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_C_FLAGS='-Os' -DCMAKE_CXX_FLAGS='-Os' -DWITH_TLS=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DWITH_PERF_TOOL=OFF make -j$(nproc) - name: Build p2pool run: | mkdir build cd build cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_STRIP=/usr/bin/aarch64-linux-gnu-strip -DSTATIC_LIBS=ON -DARCH_ID=aarch64 make -j$(nproc) - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-${{ matrix.config.os }}-aarch64 path: build/p2pool build-windows-msys2: timeout-minutes: 45 runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive - name: Setup MSYS2 uses: eine/setup-msys2@v2 with: update: true install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake make autoconf libtool automake - name: Build libcurl run: | cd external/src/curl autoreconf -fi ./configure CFLAGS='-Os' --without-ssl --without-hyper --without-zlib --without-brotli --without-zstd --without-default-ssl-backend --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libgsasl --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 --without-ngtcp2 --without-nghttp3 --without-quiche --without-msh3 --without-zsh-functions-dir --without-fish-functions-dir --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-mqtt --disable-manual --disable-ntlm --disable-ntlm-wb --disable-tls-srp --disable-unix-sockets --disable-cookies --disable-socketpair --disable-doh --disable-dateparse --disable-netrc --disable-progress-meter --disable-dnsshuffle --disable-hsts --disable-alt-svc --disable-ares make -j$(nproc) - name: Build libuv run: | cd external/src/libuv mkdir build cd build cmake .. -G "Unix Makefiles" -DCMAKE_C_FLAGS='-Os' -DBUILD_TESTING=OFF make -j$(nproc) - name: Build libzmq run: | cd external/src/libzmq mkdir build cd build cmake .. -G "Unix Makefiles" -DCMAKE_C_FLAGS='-Os' -DCMAKE_CXX_FLAGS='-Os' -DWITH_TLS=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DZMQ_HAVE_IPC=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DWITH_PERF_TOOL=OFF make -j$(nproc) - name: Build p2pool run: | mkdir build cd build cmake .. -G "Unix Makefiles" -DSTATIC_LIBS=ON make -j$(nproc) - name: Build tests run: | cd tests mkdir build cd build cmake .. -G "Unix Makefiles" -DSTATIC_LIBS=ON make -j$(nproc) - name: Run tests run: | cd tests/build gunzip *.gz ./p2pool_tests.exe - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-msys2.exe path: build/p2pool.exe build-windows-msbuild: timeout-minutes: 20 runs-on: windows-${{ matrix.config.os }} strategy: matrix: config: - {vs: Visual Studio 16 2019, os: 2019, msbuild: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\MSBuild\\Current\\Bin\\amd64\\", rx: "ON", upnp: "ON"} - {vs: Visual Studio 16 2019, os: 2019, msbuild: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\MSBuild\\Current\\Bin\\amd64\\", rx: "OFF", upnp: "ON"} - {vs: Visual Studio 16 2019, os: 2019, msbuild: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\MSBuild\\Current\\Bin\\amd64\\", rx: "OFF", upnp: "OFF"} steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive - name: Setup cmake uses: lukka/get-cmake@latest - name: Build p2pool run: | mkdir build cd build cmake .. -G "${{ matrix.config.vs }}" -DWITH_RANDOMX=${{ matrix.config.rx }} -DWITH_UPNP=${{ matrix.config.upnp }} & "${{ matrix.config.msbuild }}msbuild" /m /p:Configuration=Release p2pool.vcxproj - name: Build tests run: | cd tests mkdir build cd build cmake .. -G "${{ matrix.config.vs }}" & "${{ matrix.config.msbuild }}msbuild" /m /p:Configuration=Debug p2pool_tests.vcxproj - name: Run tests run: | cd tests/build/Debug 7z x *.gz ./p2pool_tests.exe - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-msbuild-${{ matrix.config.os }}-randomx-${{ matrix.config.rx }}-upnp-${{ matrix.config.upnp }}.exe path: build/Release/p2pool.exe build-macos: timeout-minutes: 15 runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-11, macos-12] steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive - name: Install dependencies run: HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake autoconf libtool automake - name: Build libcurl run: | cd external/src/curl autoreconf -fi ./configure CFLAGS='-Os' --without-ssl --without-hyper --without-zlib --without-brotli --without-zstd --without-default-ssl-backend --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libgsasl --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 --without-ngtcp2 --without-nghttp3 --without-quiche --without-msh3 --without-zsh-functions-dir --without-fish-functions-dir --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-mqtt --disable-manual --disable-ntlm --disable-ntlm-wb --disable-tls-srp --disable-unix-sockets --disable-cookies --disable-socketpair --disable-doh --disable-dateparse --disable-netrc --disable-progress-meter --disable-dnsshuffle --disable-hsts --disable-alt-svc --disable-ares make -j3 - name: Build libuv run: | cd external/src/libuv mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DBUILD_TESTING=OFF make -j3 - name: Build libzmq run: | cd external/src/libzmq mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DCMAKE_CXX_FLAGS='-Os' -DWITH_TLS=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DWITH_PERF_TOOL=OFF make -j3 - name: Build p2pool run: | mkdir build cd build cmake .. -DSTATIC_BINARY=ON make -j3 - name: Build tests run: | cd tests mkdir build cd build cmake .. -DSTATIC_LIBS=ON make -j3 - name: Run tests run: | cd tests/build gunzip *.gz ./p2pool_tests - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-${{ matrix.os }} path: build/p2pool build-freebsd: timeout-minutes: 75 runs-on: ${{ matrix.os.host }} strategy: matrix: os: - name: freebsd architecture: x86-64 version: '12.4' host: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive - name: Build p2pool uses: cross-platform-actions/action@v0.10.0 with: operating_system: ${{ matrix.os.name }} architecture: ${{ matrix.os.architecture }} version: ${{ matrix.os.version }} shell: bash run: | sudo pkg install -y cmake autoconf automake libtool cd external/src/curl autoreconf -fi ./configure CFLAGS='-Os' --without-ssl --without-hyper --without-zlib --without-brotli --without-zstd --without-default-ssl-backend --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libgsasl --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 --without-ngtcp2 --without-nghttp3 --without-quiche --without-msh3 --without-zsh-functions-dir --without-fish-functions-dir --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-mqtt --disable-manual --disable-ntlm --disable-ntlm-wb --disable-tls-srp --disable-unix-sockets --disable-cookies --disable-socketpair --disable-doh --disable-dateparse --disable-netrc --disable-progress-meter --disable-dnsshuffle --disable-hsts --disable-alt-svc --disable-ares make -j2 cd ../libuv mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DBUILD_TESTING=OFF make -j2 cd ../../libzmq mkdir build cd build cmake .. -DCMAKE_C_FLAGS='-Os' -DCMAKE_CXX_FLAGS='-Os' -DWITH_TLS=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DWITH_PERF_TOOL=OFF make -j2 cd ../../../.. mkdir build cd build cmake .. -DSTATIC_BINARY=ON make -j2 cd ../tests mkdir build cd build cmake .. -DSTATIC_LIBS=ON make -j2 gunzip *.gz ./p2pool_tests - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-${{ matrix.os.name }}-${{ matrix.os.version }} path: build/p2pool build-openbsd: timeout-minutes: 75 runs-on: ${{ matrix.os.host }} strategy: matrix: os: - name: openbsd architecture: x86-64 version: '7.2' host: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v3 with: submodules: recursive - name: Build p2pool uses: cross-platform-actions/action@v0.10.0 with: operating_system: ${{ matrix.os.name }} architecture: ${{ matrix.os.architecture }} version: ${{ matrix.os.version }} shell: bash run: | sudo pkg_add -I cmake libuv zeromq curl mkdir build && cd build cmake .. make -j2 cd ../tests mkdir build && cd build cmake .. make -j2 gunzip *.gz ./p2pool_tests - name: Archive binary uses: actions/upload-artifact@v3 with: name: p2pool-${{ matrix.os.name }}-${{ matrix.os.version }} path: build/p2pool