| name: Testing | |
| # Trigger on pushes, PRs (excluding documentation changes), and nightly. | |
| on: | |
| push: | |
| pull_request: | |
| schedule: | |
| - cron: 0 0 * * * # daily at 00:00 | |
| permissions: | |
| contents: read | |
| # Always force the use of Go modules | |
| env: | |
| GO111MODULE: on | |
| jobs: | |
| # Check generated protos match their source repos (optional for PRs). | |
| vet-proto: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| # Setup the environment. | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache-dependency-path: "**/go.sum" | |
| # Run the vet-proto checks. | |
| - name: vet-proto | |
| run: ./scripts/vet-proto.sh -install && ./scripts/vet-proto.sh | |
| # Run the main gRPC-Go tests. | |
| tests: | |
| name: ${{ matrix.display_name }} | |
| # Use the matrix variable to set the runner, with 'ubuntu-latest' as the | |
| # default. | |
| runs-on: ${{ matrix.runner || 'ubuntu-latest' }} | |
| timeout-minutes: 20 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - type: vet | |
| goversion: '1.26' | |
| display_name: 'static checks (latest-1)' | |
| - type: extras | |
| goversion: '1.27' | |
| display_name: 'extras (latest)' | |
| - type: tests | |
| goversion: '1.27' | |
| display_name: 'tests (latest)' | |
| - type: tests | |
| goversion: '1.27' | |
| testflags: -race | |
| display_name: 'tests (-race, latest)' | |
| - type: tests | |
| goversion: '1.27' | |
| goarch: 386 | |
| display_name: 'tests (i386, latest)' | |
| - type: tests | |
| goversion: '1.27' | |
| goarch: arm64 | |
| runner: ubuntu-24.04-arm | |
| display_name: 'tests (arm, latest)' | |
| - type: tests | |
| goversion: '1.26' | |
| display_name: 'tests (latest-1)' | |
| steps: | |
| # Setup the environment. | |
| - name: Setup GOARCH | |
| if: matrix.goarch != '' | |
| run: echo "GOARCH=${{ matrix.goarch }}" >> $GITHUB_ENV | |
| - name: Setup GRPC environment | |
| if: matrix.grpcenv != '' | |
| run: echo "${{ matrix.grpcenv }}" >> $GITHUB_ENV | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ matrix.goversion }} | |
| cache-dependency-path: "**/*go.sum" | |
| # Only run vet for 'vet' runs. | |
| - name: Run vet.sh | |
| if: matrix.type == 'vet' | |
| run: ./scripts/vet.sh -install && ./scripts/vet.sh | |
| # Main tests run for everything except when testing "extras" | |
| # (where we run a reduced set of tests). | |
| - name: Run tests | |
| if: matrix.type == 'tests' | |
| run: | | |
| go version | |
| go test ${{ matrix.testflags }} -cpu 1,4 -timeout 7m ./... | |
| cd "${GITHUB_WORKSPACE}" | |
| for MOD_FILE in $(find . -name 'go.mod' | grep -Ev '^\./go\.mod'); do | |
| pushd "$(dirname ${MOD_FILE})" | |
| go test ${{ matrix.testflags }} -cpu 1,4 -timeout 2m ./... | |
| popd | |
| done | |
| # Non-core gRPC tests (examples, interop, etc) | |
| - name: Run extras tests | |
| if: matrix.type == 'extras' | |
| run: | | |
| export TERM=${TERM:-xterm} | |
| go version | |
| echo -e "\n-- Running Examples --" | |
| examples/examples_test.sh | |
| echo -e "\n-- Running AdvancedTLS Examples --" | |
| security/advancedtls/examples/examples_test.sh | |
| echo -e "\n-- Running Interop Test --" | |
| interop/interop_test.sh | |
| echo -e "\n-- Running xDS E2E Test --" | |
| internal/xds/test/e2e/run.sh | |
| echo -e "\n-- Running protoc-gen-go-grpc test --" | |
| ./scripts/vet-proto.sh -install | |
| cmd/protoc-gen-go-grpc/protoc-gen-go-grpc_test.sh |