name: Test Build on: push: branches: - master - next pull_request: schedule: - cron: '0 0 * * 0' # Every Sunday at 00:00 jobs: distcheck: strategy: matrix: os: [macos-latest, ubuntu-20.04] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install Linux dependencies if: startsWith(matrix.os, 'ubuntu') run: sudo apt-get install -y protobuf-compiler libprotobuf-dev libprotoc-dev - name: Install Mac dependencies if: startsWith(matrix.os, 'macos') run: brew install protobuf automake - name: Run distcheck run: | ./autogen.sh ./configure make -j${nproc} distcheck VERBOSE=1 distcheck-multiarch: runs-on: ubuntu-20.04 strategy: matrix: include: - arch: armv7 - arch: aarch64 - arch: s390x - arch: ppc64le steps: - uses: actions/checkout@v2 - uses: uraimo/run-on-arch-action@v2.0.9 name: Install dependencies and run distcheck id: runcmd with: arch: ${{ matrix.arch }} githubToken: ${{ github.token }} distro: ubuntu20.04 install: | apt-get update -q -y apt-get install -q -y build-essential autoconf automake libtool pkg-config apt-get install -q -y protobuf-compiler libprotobuf-dev libprotoc-dev run: | ./autogen.sh ./configure make -j3 distcheck VERBOSE=1 valgrind: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Install dependencies run: sudo apt-get install -y protobuf-compiler libprotobuf-dev libprotoc-dev valgrind - name: Run distcheck with valgrind run: | ./autogen.sh ./configure --enable-valgrind-tests CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" make -j${nproc} distcheck DISTCHECK_CONFIGURE_FLAGS="--enable-valgrind-tests CFLAGS=\"-fsanitize=undefined -fno-sanitize-recover=undefined\"" VERBOSE=1 coverage: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Install dependencies run: sudo apt-get install -y protobuf-compiler libprotobuf-dev libprotoc-dev lcov - name: Run coverage build run: | ./autogen.sh ./configure --enable-code-coverage make -j${nproc} mkdir coverage lcov --no-external --capture --initial --directory . --output-file ./coverage/lcov.info --include '*protobuf-c.c' make check lcov --no-external --capture --directory . --output-file ./coverage/lcov.info --include '*protobuf-c.c' - uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} cmake: strategy: matrix: build_type: [Debug, Release] os: [macos-latest, ubuntu-20.04] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install Linux dependencies if: startsWith(matrix.os, 'ubuntu') run: sudo apt-get install -y protobuf-compiler libprotobuf-dev libprotoc-dev - name: Install Mac dependencies if: startsWith(matrix.os, 'macos') run: brew install protobuf abseil - name: Run cmake tests run: | mkdir build-cmake/bin cd build-cmake/bin cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DBUILD_TESTS=ON -DCMAKE_INSTALL_PREFIX=protobuf-c-bin ../ make -j3 make test make install cmake-msvc: strategy: matrix: build-type: [Debug, Release] shared-lib: [ON, OFF] name: "MSVC CMake (${{ matrix.build-type }}, DLL: ${{ matrix.shared-lib }})" runs-on: windows-latest env: PROTOBUF_VERSION: 24.3 ABSEIL_VERSION: "20230802.0" steps: - uses: actions/checkout@v2 - uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64 - uses: actions/cache@v2 id: protobuf-cache with: path: ~/protobuf-bin key: ${{ env.PROTOBUF_VERSION }}-${{ matrix.shared-lib }}-${{ matrix.build-type}} - uses: actions/cache@v2 id: abseil-cache with: path: ~/abseil-bin key: ${{ env.ABSEIL_VERSION }}-${{ matrix.shared-lib }}-${{ matrix.build-type}} - name: Build and install abseil if: steps.abseil-cache.outputs.cache-hit != 'true' run: | cd ~ git clone --depth=1 https://github.com/abseil/abseil-cpp.git -b ${{ env.ABSEIL_VERSION }} abseil cd ~/abseil && mkdir build && cd build cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX=~/abseil-bin -DBUILD_SHARED_LIBS=${{ matrix.shared-lib }} -DABSL_PROPAGATE_CXX_STD=ON -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded${{ matrix.build-type == 'Debug' && 'Debug' || '' }}${{ matrix.shared-lib == 'ON' && 'DLL' || '' }} -DCMAKE_CXX_STANDARD=17 .. nmake nmake install - name: Build and install utf8 compression algorithm if: matrix.shared-lib == 'OFF' run: | cd ~ git clone --depth=1 https://github.com/protocolbuffers/utf8_range.git utf8_range cd ~/utf8_range && mkdir build && cd build cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX=~/utf8_range-bin -DCMAKE_CXX_STANDARD=17 -Dutf8_range_ENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -Dabsl_ROOT=~/abseil-bin -DCMAKE_POLICY_DEFAULT_CMP0074=NEW -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_MSVC_RUNTIME_LIBRARY='MultiThreaded${{ matrix.build-type == 'Debug' && 'Debug' || '' }}' .. nmake nmake install - name: Build and install protobuf if: steps.protobuf-cache.outputs.cache-hit != 'true' run: | cd ~ git clone --depth=1 https://github.com/protocolbuffers/protobuf.git -b v${{ env.PROTOBUF_VERSION }} protobuf cd ~/protobuf && mkdir build && cd build cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=~/protobuf-bin -Dprotobuf_BUILD_SHARED_LIBS=${{ matrix.shared-lib }} -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_ABSL_PROVIDER=package -Dabsl_ROOT=~/abseil-bin -DABSL_PROPAGATE_CXX_STD=ON .. nmake nmake install - name: Run cmake tests run: | mkdir build-cmake/bin cd build-cmake/bin cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DBUILD_TESTS=ON -DCMAKE_INSTALL_PREFIX=~/protobuf-c-bin -DBUILD_SHARED_LIBS=${{ matrix.shared-lib }} -DProtobuf_ROOT="~/protobuf-bin" -Dabsl_ROOT="~/abseil-bin" -Dutf8_range_ROOT="~/utf8_range-bin" .. nmake nmake test nmake install