name: C# Tests on: workflow_call: inputs: safe-checkout: required: true description: "The SHA key for the commit we want to run over" type: string permissions: contents: read jobs: # All C# jobs are currently run on presubmit # If you wish to add continuous-only jobs you will need to import test-type above linux: name: Linux runs-on: ubuntu-22-4core steps: - name: Checkout pending changes uses: protocolbuffers/protobuf-ci/checkout@v5 with: ref: ${{ inputs.safe-checkout }} # TODO Run this with Bazel once codegen is handled properly. - name: Run tests uses: protocolbuffers/protobuf-ci/docker@v5 with: image: us-docker.pkg.dev/protobuf-build/containers/test/linux/csharp:9.0.0-3.1.415-8.0.100-05b57cb3d33f45f689c1dace146b6b9619d78872 credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} entrypoint: /bin/bash command: >- -cex " cd csharp && dotnet restore src/Google.Protobuf.sln && dotnet build -c Release src/Google.Protobuf.sln && dotnet test -c Release -f net8.0 src/Google.Protobuf.Test/Google.Protobuf.Test.csproj" - name: Clear bazel between docker instances run: sudo rm -rf _build .repository-cache - name: Run conformance tests uses: protocolbuffers/protobuf-ci/bazel-docker@v5 with: image: us-docker.pkg.dev/protobuf-build/containers/test/linux/csharp:9.0.0-3.1.415-8.0.100-05b57cb3d33f45f689c1dace146b6b9619d78872 credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} bazel-cache: csharp_linux bazel: test //csharp:conformance_test --action_env=PATH --action_env=DOTNET_CLI_TELEMETRY_OPTOUT=1 --test_env=DOTNET_CLI_HOME=/home/bazel windows: name: Windows runs-on: windows-2022 steps: - name: Checkout pending changes uses: protocolbuffers/protobuf-ci/checkout@v5 with: ref: ${{ inputs.safe-checkout }} - name: Setup dotnet uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0 with: dotnet-version: '8.0.x' - name: Run tests uses: protocolbuffers/protobuf-ci/bash@v5 with: bazel-version: 9.0.0 credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: | dotnet build csharp/src/Google.Protobuf.sln dotnet test csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj linux-aarch64: name: Linux aarch64 runs-on: ubuntu-latest steps: - name: Checkout pending changes uses: protocolbuffers/protobuf-ci/checkout@v5 with: ref: ${{ inputs.safe-checkout }} - name: Build protobuf C# tests under x86_64 docker image # Tests are built "dotnet publish" because we want all the dependencies to the copied to the destination directory # (we want to avoid references to ~/.nuget that won't be available in the subsequent docker run) uses: protocolbuffers/protobuf-ci/docker@v5 with: image: mcr.microsoft.com/dotnet/sdk:8.0.100-bookworm-slim credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: >- /bin/bash -cex ' DOTNET_CLI_TELEMETRY_OPTOUT=true DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true dotnet publish -c Release -f net8.0 /workspace/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj' - name: Use an actual aarch64 docker image to run protobuf C# tests with an emulator # "dotnet vstest" allows running tests from a pre-built project. # * mount the protobuf root as /work to be able to access the crosscompiled files # * to avoid running the process inside docker as root (which can pollute the workspace with files owned by root), we force # running under current user's UID and GID. To be able to do that, we need to provide a home directory for the user # otherwise the UID would be homeless under the docker container and pip install wouldn't work. For simplicity, # we just run map the user's home to a throwaway temporary directory uses: protocolbuffers/protobuf-ci/docker@v5 with: image: mcr.microsoft.com/dotnet/sdk:8.0.100-bookworm-slim-arm64v8 skip-staleness-check: true credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: >- /bin/bash -cex ' DOTNET_CLI_TELEMETRY_OPTOUT=true DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true dotnet vstest /workspace/csharp/src/Google.Protobuf.Test/bin/Release/net8.0/publish/Google.Protobuf.Test.dll'