mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
Before this PR, we stored a list internally of tests that must pass on presubmit and tried to keep it up to date. This PR moves that information keeping into GitHub by adding a 'continuous-only' variable to most testing matrices to allow authors to specify which of their tests should be skipped on presubmit. During presubmit, tests that were specified to not run on presubmit will not be run and their names will be prefixed with "[SKIPPED]". All continuous only tests will be suffixed with "(Continuous)". At the end of running all the tests, we have a single "All Blocking Tests" signal that will tell us whether all of the necessary tests have passed (either for presubmit or continuous based on how the test was triggered). I've tested this from a different branch [here](https://github.com/protocolbuffers/protobuf/actions/runs/9602443750?pr=17151) and from a different fork [here](https://github.com/protocolbuffers/protobuf/actions/runs/9602554500?pr=17192). These should be the same and are as far as I can tell. I also have a continuous test run [here](https://github.com/protocolbuffers/protobuf/actions/runs/9603824200) which runs the entire test suite. Closes #17198 PiperOrigin-RevId: 662940724
120 lines
5 KiB
YAML
120 lines
5 KiB
YAML
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-latest
|
|
steps:
|
|
- name: Checkout pending changes
|
|
uses: protocolbuffers/protobuf-ci/checkout@v3
|
|
with:
|
|
ref: ${{ inputs.safe-checkout }}
|
|
|
|
# TODO Run this with Bazel once codegen is handled properly.
|
|
- name: Run tests
|
|
uses: protocolbuffers/protobuf-ci/docker@v3
|
|
with:
|
|
image: us-docker.pkg.dev/protobuf-build/containers/test/linux/csharp:3.1.415-6.0.100-66964dc8b07b6d1fc73a5cc14e59e84c1c534cea
|
|
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
|
|
entrypoint: /bin/bash
|
|
command: >-
|
|
-c "
|
|
cd csharp &&
|
|
dotnet restore src/Google.Protobuf.sln &&
|
|
dotnet build -c Release src/Google.Protobuf.sln &&
|
|
dotnet test -c Release -f net6.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@v3
|
|
with:
|
|
image: us-docker.pkg.dev/protobuf-build/containers/test/linux/csharp:3.1.415-6.0.100-66964dc8b07b6d1fc73a5cc14e59e84c1c534cea
|
|
credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }}
|
|
bazel-cache: csharp_linux
|
|
bazel: test //csharp:conformance_test --action_env=DOTNET_CLI_TELEMETRY_OPTOUT=1 --test_env=DOTNET_CLI_HOME=/home/bazel
|
|
|
|
windows:
|
|
name: Windows
|
|
runs-on: windows-2019
|
|
steps:
|
|
- name: Checkout pending changes
|
|
uses: protocolbuffers/protobuf-ci/checkout@v3
|
|
with:
|
|
ref: ${{ inputs.safe-checkout }}
|
|
|
|
- name: Setup dotnet
|
|
uses: actions/setup-dotnet@3447fd6a9f9e57506b15f895c5b76d3b197dc7c2 # v3.2.0
|
|
with:
|
|
dotnet-version: '6.0.x'
|
|
|
|
# Workaround for incompatibility between gcloud and windows-2019 runners.
|
|
- name: Install Python
|
|
uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
|
|
with:
|
|
python-version: '3.9'
|
|
- name: Use custom python for gcloud
|
|
run: echo "CLOUDSDK_PYTHON=${Python3_ROOT_DIR}\\python3" >> $GITHUB_ENV
|
|
shell: bash
|
|
|
|
- name: Run tests
|
|
uses: protocolbuffers/protobuf-ci/bash@v3
|
|
with:
|
|
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@v3
|
|
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@v3
|
|
with:
|
|
image: mcr.microsoft.com/dotnet/sdk:6.0.100-bullseye-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 net6.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@v3
|
|
with:
|
|
image: mcr.microsoft.com/dotnet/sdk:6.0.100-bullseye-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/net6.0/publish/Google.Protobuf.Test.dll'
|