From a7b395d7484322efb9cb912cf9b393f34a1d52d5 Mon Sep 17 00:00:00 2001 From: filforopen-source <298073343+filforopen-source@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:37:14 -0400 Subject: [PATCH 1/3] Add files via upload --- test_cpp.yml.txt | 591 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 591 insertions(+) create mode 100644 test_cpp.yml.txt diff --git a/test_cpp.yml.txt b/test_cpp.yml.txt new file mode 100644 index 0000000..9c7ab8d --- /dev/null +++ b/test_cpp.yml.txt @@ -0,0 +1,591 @@ +name: C++ Tests + +on: + workflow_call: + inputs: + continuous-run: + required: true + description: "Boolean string denoting whether this run is continuous -- empty string for presubmit, non-empty string for continuous." + type: string + safe-checkout: + required: true + description: "The SHA key for the commit we want to run over" + type: string + continuous-prefix: + required: true + description: "The string continuous-only tests should be prefixed with when displaying test results." + type: string + +permissions: + contents: read + +env: + SCCACHE_CACHE_PREFIX_LINUX_CMAKE: linux-cmake + SCCACHE_CACHE_PREFIX_LINUX_CMAKE_INSTALL: linux-cmake-install + SCCACHE_CACHE_PREFIX_LINUX_CMAKE_GCC: linux-cmake-gcc + SCCACHE_CACHE_PREFIX_LINUX_CMAKE_32BIT: linux-cmake-32-bit + +jobs: + # ============================================================================ + # LINUX JOBS + # ============================================================================ + + linux: + strategy: + fail-fast: false + matrix: + config: + - { name: Optimized, flags: --config=opt } + - { name: Debug, flags: --config=dbg, continuous-only: true } + - { name: ASAN, flags: --config=asan, runner: ubuntu-22-4core } + - { name: MSAN, flags: --config=docker-msan, runner: ubuntu-22-4core, continuous-only: true } + - { name: TSAN, flags: --config=tsan, runner: ubuntu-22-4core, continuous-only: true } + - { name: UBSAN, flags: --config=ubsan, runner: ubuntu-22-4core, continuous-only: true } + - { name: No-RTTI, flags: --cxxopt=-fno-rtti, continuous-only: true } + include: + - image: us-docker.pkg.dev/protobuf-build/containers/test/linux/sanitize:8.0.1-a6ca8ba8e77d63471b4ad05f8643e1fc58b30e12 + - targets: //pkg/... //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests + - config: { name: "Bazel8", flags: --cxxopt="-Wno-self-assign-overloaded" } + cache_key: Bazel8 + image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:8.6.0-9dca0d9417f43f5f1e97e59969fb0f3e6ae3bd9c" + targets: "//src/... //third_party/utf8_range/..." + - config: { name: "Bazel9", flags: "--cxxopt=-Wno-self-assign-overloaded" } + cache_key: Bazel9 + image: "us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:9.0.0-9dca0d9417f43f5f1e97e59969fb0f3e6ae3bd9c" + targets: "//src/... //third_party/utf8_range/..." + - config: { name: "TCMalloc" } + cache_key: TcMalloc + image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/tcmalloc:8.0.1-a6ca8ba8e77d63471b4ad05f8643e1fc58b30e12" + targets: "//src/... //third_party/utf8_range/..." + - config: { name: "aarch64", flags: "--platforms=//build_defs:linux-aarch_64" } + cache_key: aarch64-bazel8 + targets: "//src/... //src/google/protobuf/compiler:protoc_aarch64_test //third_party/utf8_range/..." + image: "us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:8.0.1-aarch64-a6ca8ba8e77d63471b4ad05f8643e1fc58b30e12" + name: ${{ matrix.config.continuous-only && inputs.continuous-prefix || '' }} Linux ${{ matrix.config.name }} + runs-on: ${{ matrix.config.runner || 'ubuntu-latest' }} + steps: + - name: Checkout pending changes + if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Run tests + if: ${{ !matrix.config.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/bazel-docker@v5 + with: + image: ${{ matrix.image }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: cpp_linux/${{ matrix.cache_key }} + bazel: test ${{ matrix.targets }} ${{ matrix.config.flags }} + exclude-targets: ${{ matrix.exclude-targets }} + + linux-gcc: + strategy: + fail-fast: false + matrix: + version: ['10.4', '13.1'] + name: Linux GCC ${{ matrix.version }} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Run tests + uses: protocolbuffers/protobuf-ci/bazel-docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/gcc:8.0.1-${{ matrix.version }}-e78301df86b3e4c46ec9ac4d98be00e19305d8f3 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: cpp_linux/gcc-${{ matrix.version }} + bazel: test //pkg/... //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests + + linux-release: + strategy: + fail-fast: false + matrix: + arch: [x86_64, aarch64] + include: + - arch: aarch64 + continuous-only: true + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux Release ${{ matrix.arch }} + runs-on: ubuntu-22-4core + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Cross compile protoc for ${{ matrix.arch }} + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + id: cross-compile + uses: protocolbuffers/protobuf-ci/cross-compile-protoc@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:8.6.0-9dca0d9417f43f5f1e97e59969fb0f3e6ae3bd9c + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + architecture: linux-${{ matrix.arch }} + - name: Setup sccache + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: linux-release-${{ matrix.arch }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/emulation:8.0.1-${{ matrix.arch }}-a6ca8ba8e77d63471b4ad05f8643e1fc58b30e12 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + entrypoint: bash + command: | + -c "set -ex + sccache -z + cmake . -DWITH_PROTOC=/workspace/${{ steps.cross-compile.outputs.protoc }} \ + -Dprotobuf_BUILD_TESTS=ON \ + -Dprotobuf_BUILD_CONFORMANCE=ON \ + -DCMAKE_CXX_STANDARD=17 \ + -Dprotobuf_WITH_ZLIB=OFF \ + ${{ env.SCCACHE_CMAKE_FLAGS }} + cmake --build . --parallel 20 + ctest --no-tests=error --parallel 20 + sccache -s" + + linux-cmake: + strategy: + fail-fast: false + matrix: + include: + - flags: -Dprotobuf_BUILD_EXAMPLES=ON -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_CONFORMANCE=ON + - name: Ninja + flags: -G Ninja -DCMAKE_CXX_STANDARD=17 + continuous-only: true + - name: Shared + flags: -Dprotobuf_BUILD_SHARED_LIBS=ON -Dprotobuf_BUILD_EXAMPLES=ON -DCMAKE_CXX_STANDARD=17 + continuous-only: true + - name: C++20 + flags: -DCMAKE_CXX_STANDARD=20 + - name: Package + flags: -DCMAKE_CXX_STANDARD=17 -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON + - name: Fetch + flags: -DCMAKE_CXX_STANDARD=17 -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux CMake ${{ matrix.name }} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Setup sccache + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: ${{ env.SCCACHE_CACHE_PREFIX_LINUX_CMAKE }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: >- + /test.sh ${{ matrix.flags }} ${{ env.SCCACHE_CMAKE_FLAGS }} + -Dprotobuf_BUILD_TESTS=ON ${{ matrix.package_flags }} + + linux-cmake-install: + strategy: + fail-fast: false + matrix: + type: [package, static, fetch] + include: + - type: package + name: Install + flags: -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON -Dprotobuf_BUILD_SHARED_LIBS=ON + - type: static + name: Install (static) + flags: -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON -Dprotobuf_BUILD_SHARED_LIBS=OFF + - type: fetch + name: Install (Fetch) + flags: -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON -Dprotobuf_BUILD_SHARED_LIBS=ON + continuous-only: true + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux CMake ${{ matrix.name }} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Setup sccache + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: ${{ env.SCCACHE_CACHE_PREFIX_LINUX_CMAKE_INSTALL }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: >- + /install.sh -DCMAKE_CXX_STANDARD=17 ${{ env.SCCACHE_CMAKE_FLAGS }} + ${{ matrix.flags }} && + cp build/install_manifest.txt . && + /test.sh ${{ env.SCCACHE_CMAKE_FLAGS }} + -Dprotobuf_REMOVE_INSTALLED_HEADERS=ON + -Dprotobuf_BUILD_PROTOBUF_BINARIES=OFF + -Dprotobuf_BUILD_CONFORMANCE=ON + -DCMAKE_CXX_STANDARD=17 + ${{ matrix.flags }} + - name: Clean up install manifest + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + run: | + set -ex + mkdir manifest + cat install_manifest.txt | sort | sed 's:/usr/local/::g' > manifest/all.txt + cat manifest/all.txt | grep -E '^include/' | grep -vE 'internal' | sed 's:^include/::g' > manifest/include.txt + cat manifest/all.txt | grep -E '^bin/' | grep -vE '\-[0-9]+\.[0-9]+\.[0-9]+$' | sed 's:^bin/::g' > manifest/bin.txt + cat manifest/all.txt | grep -E '^lib/' | grep -vE '\.[0-9]+\.[0-9]+\.[0-9]+$' | sed 's:^lib/::g' > manifest/lib.txt + - name: Upload install manifest + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + with: + name: installed_files_${{ matrix.type }} + path: manifest/*.txt + + install-manifests: + strategy: + fail-fast: false + matrix: + type: [include, bin, lib] + build: [static, package] + include: + - type: lib + build: static + golden: 'lib_static' + - type: lib + build: package + golden: 'lib_shared' + name: Check Installed Files + needs: linux-cmake-install + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Download manifest + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: installed_files_${{ matrix.build }} + path: ${{ matrix.build }} + - name: Compare against golden + run: | + set +e + GOLDEN_FILE=cmake/installed_${{ matrix.golden || matrix.type }}_golden.txt + DIFF="$(diff -u ${GOLDEN_FILE} ${{ matrix.build }}/${{ matrix.type }}.txt)" + if [ -n "$DIFF" ]; then + echo "Installed files do not match goldens!" + echo "If this is expected, please update the golden file: ${GOLDEN_FILE}" + echo "The following diffs were found:" + echo "$DIFF" + exit 1 + else + echo "Installed files match goldens." + fi + + linux-cmake-examples: + name: ${{ inputs.continuous-prefix }} Linux CMake Examples + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + if: ${{ inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Setup sccache + if: ${{ inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: linux-cmake-examples + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + if: ${{ inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/cmake:3.16.9-9626718698895971df3953d4aa2321d7425f3c5f + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: >- + /install.sh -DCMAKE_CXX_STANDARD=17 ${{ env.SCCACHE_CMAKE_FLAGS }} + -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=OFF + -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_BUILD_TESTS=ON && + mkdir examples/build && + cd examples/build && + cmake .. -DCMAKE_CXX_STANDARD=17 && + cmake --build . + + linux-cmake-gcc: + strategy: + fail-fast: false + matrix: + include: + - name: C++17 + flags: -DCMAKE_CXX_STANDARD=17 + continuous-only: true + - name: C++20 + flags: -DCMAKE_CXX_STANDARD=20 + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} Linux CMake GCC ${{ matrix.name }} + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Setup sccache + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: ${{ env.SCCACHE_CACHE_PREFIX_LINUX_CMAKE_GCC }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/gcc:8.0.1-12.2-168f9c9d015a0fa16611e1e9eede796fe9bfbb69 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + entrypoint: bash + command: | + -c 'set -ex + cd /workspace + sccache -z + cmake . -Dprotobuf_BUILD_TESTS=ON ${{ matrix.flags }} ${{ env.SCCACHE_CMAKE_FLAGS }} + cmake --build . --parallel 20 + ctest --no-tests=error --verbose --parallel 20 + sccache -s' + + linux-cmake-32-bit: + name: Linux CMake 32-bit + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Setup sccache + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: ${{ env.SCCACHE_CACHE_PREFIX_LINUX_CMAKE_32BIT }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + - name: Run tests + uses: protocolbuffers/protobuf-ci/docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/test/linux/32bit@sha256:d6028ab408c49932836cdc514116f06886d7f6868a4d430630aa52adc5aee2fc + platform: linux/386 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + entrypoint: bash + command: | + -c 'set -ex + cd /workspace + sccache -z + cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON ${{ env.SCCACHE_CMAKE_FLAGS }} + cmake --build . --parallel 20 + ctest --no-tests=error --verbose --parallel 20 + sccache -s' + + linux-abseil-head: + name: ${{ inputs.continuous-prefix }} Linux Abseil HEAD + runs-on: ubuntu-latest + steps: + - name: Checkout pending changes + if: ${{ inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Checkout Abseil HEAD + if: ${{ inputs.continuous-run }} + uses: actions/checkout@v5 + with: + repository: abseil/abseil-cpp + path: abseil-cpp-head + - name: Run tests + if: ${{ inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/bazel-docker@v5 + with: + image: us-docker.pkg.dev/protobuf-build/containers/common/linux/bazel:9.0.0-7932bf8b25fb76a111e7257d151a6a58d5c3c671 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: cpp_linux/abseil_head + bazel: test //src/... --override_module=abseil-cpp=abseil-cpp-head + + # ============================================================================ + # CROSS-PLATFORM JOBS (macOS & Windows) + # ============================================================================ + + non-linux: + strategy: + fail-fast: false + matrix: + include: + - name: MacOS Bazel + os: macos-14 + cache_key: macos-14-bazel8 + bazel: test //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests + - name: MacOS Intel Bazel + os: macos-14 + cache_key: macos-14-intel + bazel: test --cpu=darwin_x86_64 //src/... //third_party/utf8_range/... //conformance:conformance_framework_tests + - name: Windows Bazel + os: windows-2022 + cache_key: windows-2022-msvc-cl + bazel: test //src/... --config=msvc-cl --test_tag_filters=-conformance --build_tag_filters=-conformance + - name: Windows Bazel C++20 + os: windows-2022 + cache_key: windows-2022-msvc-cl + bazel: test //src/... --config=msvc-cl --cxxopt="-std:c++20" --test_tag_filters=-conformance --build_tag_filters=-conformance + - name: Windows Bazel clang-cl + os: windows-2022 + cache_key: windows-2022-clang-cl + bazel: test //src/... --test_tag_filters=-conformance --build_tag_filters=-conformance + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} ${{ matrix.name }} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + - name: Run tests + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/bazel@v5 + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel: ${{ matrix.bazel }} + bazel-cache: cpp_${{ matrix.cache_key }} + version: ${{ matrix.bazel_version || '8.0.1' }} + + non-linux-cmake: + strategy: + fail-fast: false + matrix: + include: + - name: MacOS CMake + os: macos-14 + cache-prefix: macos-cmake + continuous-only: true + - name: Windows CMake + os: windows-2022 + flags: >- + -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF + -Dprotobuf_BUILD_SHARED_LIBS=OFF + -Dprotobuf_BUILD_EXAMPLES=ON + vsversion: '2022' + cache-prefix: windows-2022-cmake + - name: Windows CMake 32-bit + os: windows-2022 + flags: >- + -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF + vsversion: '2022' + windows-arch: 'win32' + cache-prefix: windows-2022-win32-cmake + continuous-only: true + - name: Windows CMake Shared + os: windows-2022 + flags: >- + -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF + -Dprotobuf_BUILD_SHARED_LIBS=ON + vsversion: '2022' + cache-prefix: windows-2022-cmake + - name: Windows CMake Install + os: windows-2022 + install-flags: >- + -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF + flags: >- + -G Ninja -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF + -Dprotobuf_REMOVE_INSTALLED_HEADERS=ON + -Dprotobuf_BUILD_PROTOBUF_BINARIES=OFF + vsversion: '2022' + cache-prefix: windows-2022-cmake + continuous-only: true + name: ${{ matrix.continuous-only && inputs.continuous-prefix || '' }} ${{ matrix.name }} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout pending changes + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/checkout@v5 + with: + ref: ${{ inputs.safe-checkout }} + + - name: Setup MSVC + if: ${{ runner.os == 'Windows' && (!matrix.continuous-only || inputs.continuous-run) }} + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + arch: ${{ matrix.windows-arch || 'x64' }} + vsversion: ${{ matrix.vsversion }} + + - name: Setup sccache + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/sccache@v5 + with: + cache-prefix: ${{ matrix.cache-prefix }} + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + + # Install phase (Windows-specific with proper path handling) + - name: Configure CMake for install + if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} + uses: protocolbuffers/protobuf-ci/bash@v5 + with: + bazel-version: 8.0.1 + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + command: >- + cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON + ${{ matrix.install-flags }} + ${{ env.SCCACHE_CMAKE_FLAGS }} -Dprotobuf_ALLOW_CCACHE=ON + + - name: Build for install + if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} + shell: bash + run: VERBOSE=1 cmake --build . --parallel 20 + + - name: Install + if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} + shell: bash + run: cmake --build . --target install + + - name: Report and clear sccache stats + if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} + shell: bash + run: sccache -s && sccache -z + + - name: Clear CMake cache + if: ${{ matrix.install-flags && (!matrix.continuous-only || inputs.continuous-run) }} + shell: bash + run: | + cmake --build . --target clean + rm -f CMakeCache.txt + + # Standard test phase + - name: Configure CMake + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + uses: protocolbuffers/protobuf-ci/bash@v5 + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-version: 8.0.1 + command: >- + cmake . -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=ON + ${{ matrix.flags }} + ${{ env.SCCACHE_CMAKE_FLAGS }} -Dprotobuf_ALLOW_CCACHE=ON + + - name: Build + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + shell: bash + run: VERBOSE=1 cmake --build . --parallel 20 + + - name: Test + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + shell: bash + run: ctest --no-tests=error --verbose --parallel 20 -C Debug + + - name: Report sccache stats + if: ${{ !matrix.continuous-only || inputs.continuous-run }} + shell: bash + run: sccache -s \ No newline at end of file From 314e186ce91e69ea0f9f70d782af1e2bb58324f5 Mon Sep 17 00:00:00 2001 From: filforopen-source <298073343+filforopen-source@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:39:07 -0400 Subject: [PATCH 2/3] Add GitHub Actions workflow for Cloud Run deployment This workflow automates the deployment of source code to Google Cloud Run when changes are pushed to the main branch. It includes steps for authentication and deployment configuration. --- .../workflows/google-cloudrun-source.yml/from | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/google-cloudrun-source.yml/from diff --git a/.github/workflows/google-cloudrun-source.yml/from b/.github/workflows/google-cloudrun-source.yml/from new file mode 100644 index 0000000..f0191b9 --- /dev/null +++ b/.github/workflows/google-cloudrun-source.yml/from @@ -0,0 +1,75 @@ +# This workflow will deploy source code on Cloud Run when a commit is pushed to +# the "main" branch. +# +# To configure this workflow: +# +# 1. Enable the following Google Cloud APIs: +# +# - Artifact Registry (artifactregistry.googleapis.com) +# - Cloud Build (cloudbuild.googleapis.com) +# - Cloud Run (run.googleapis.com) +# - IAM Credentials API (iamcredentials.googleapis.com) +# +# You can learn more about enabling APIs at +# https://support.google.com/googleapi/answer/6158841. +# +# 2. Create and configure a Workload Identity Provider for GitHub: +# https://github.com/google-github-actions/auth#preferred-direct-workload-identity-federation. +# +# Depending on how you authenticate, you will need to grant an IAM principal +# permissions on Google Cloud: +# +# - Artifact Registry Administrator (roles/artifactregistry.admin) +# - Cloud Run Source Developer (roles/run.sourceDeveloper) +# +# You can learn more about setting IAM permissions at +# https://cloud.google.com/iam/docs/manage-access-other-resources. +# +# 3. Change the values in the "env" block to match your values. + +name: 'Deploy to Cloud Run from Source' + +on: + push: + branches: + - '"main"' + +env: + PROJECT_ID: 'my-project' # TODO: update to your Google Cloud project ID + REGION: 'us-central1' # TODO: update to your region + SERVICE: 'my-service' # TODO: update to your service name + +jobs: + deploy: + runs-on: 'ubuntu-latest' + + permissions: + contents: 'read' + id-token: 'write' + + steps: + - name: 'Checkout' + uses: 'actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332' # actions/checkout@v4 + + # Configure Workload Identity Federation and generate an access token. + # + # See https://github.com/google-github-actions/auth for more options, + # including authenticating via a JSON credentials file. + - id: 'auth' + name: 'Authenticate to Google Cloud' + uses: 'google-github-actions/auth@f112390a2df9932162083945e46d439060d66ec2' # google-github-actions/auth@v2 + with: + workload_identity_provider: 'projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider' # TODO: replace with your workload identity provider + + - name: 'Deploy to Cloud Run' + uses: 'google-github-actions/deploy-cloudrun@33553064113a37d688aa6937bacbdc481580be17' # google-github-actions/deploy-cloudrun@v2 + with: + service: '${{ env.SERVICE }}' + region: '${{ env.REGION }}' + # NOTE: If using a different source folder, update the image name below: + source: './' + + # If required, use the Cloud Run URL output in later steps + - name: 'Show output' + run: |- + echo ${{ steps.deploy.outputs.url }} From d0fdea3b36b43a6465ed1f98277d307971bdfa4f Mon Sep 17 00:00:00 2001 From: filforopen-source <298073343+filforopen-source@users.noreply.github.com> Date: Mon, 20 Jul 2026 09:04:09 -0400 Subject: [PATCH 3/3] Add microservices playground structure --- Niederaussem/Power/Station/World | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Niederaussem/Power/Station/World diff --git a/Niederaussem/Power/Station/World b/Niederaussem/Power/Station/World new file mode 100644 index 0000000..89c423e --- /dev/null +++ b/Niederaussem/Power/Station/World @@ -0,0 +1,9 @@ +microservices-playground/ +├── circuit-breaker/ # Resilience patterns (Hystrix-style) +├── service-mesh/ # Service-to-service communication, retries, timeouts +├── saga-pattern/ # Distributed transactions (orchestration vs. choreography) +├── event-sourcing/ # Event log as source of truth +├── api-gateway/ # Request routing, auth, rate limiting +├── cache-patterns/ # Caching strategies (Cache-Aside, Write-Through) +├── docs/ # Architecture guides +└── docker-compose.yml # Multi-service orchestration