--- name: 'E2E Distributed Tests' on: pull_request: # The suite's dependency graph is 99 packages, so an allowlist of paths # silently stops guarding the moment code moves. At ~75s the job is cheap # enough to run unless the diff is confined to paths it provably cannot # reach. See .agents/ci-caching.md. paths-ignore: - 'gallery/**' - 'docs/**' - 'examples/**' - '**/*.md' push: branches: - master concurrency: group: ci-tests-e2e-distributed-${{ github.event.pull_request.number || github.sha }}-${{ github.repository }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: tests-e2e-distributed: runs-on: ubuntu-latest # Advisory because it is deliberately not in branch protection, so a failure # is a visible red X rather than a blocked merge. Promoting it to a required # check is a repository-settings change, to be made once it has a track # record; a heavy suite made required on day one gets disabled instead of # fixed. timeout-minutes: 45 steps: - name: Clone uses: actions/checkout@v7 with: submodules: true - name: Configure apt mirror on runner uses: ./.github/actions/configure-apt-mirror - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.26.0' cache: false - name: Dependencies run: | sudo apt-get update sudo apt-get install -y build-essential libopus-dev - name: Proto Dependencies run: | curl -L -s https://github.com/protocolbuffers/protobuf/releases/download/v26.1/protoc-26.1-linux-x86_64.zip -o protoc.zip && \ unzip -j -d /usr/local/bin protoc.zip bin/protoc && \ rm protoc.zip go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.2 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@1958fcbe2ca8bd93af633f11e97d44e567e945af PATH="$PATH:$HOME/go/bin" make protogen-go - name: Pre-pull test images # Pulling here rather than inside the suite keeps container-start timing # out of the spec timeouts and makes a registry outage read as a # setup failure instead of a test failure. These two are the only images # the suite needs once the testcontainers reaper is disabled below. run: | docker pull postgres:16-alpine docker pull nats:2-alpine - name: Distributed E2E # TESTCONTAINERS_RYUK_DISABLED keeps the pre-pull above meaningful. The # reaper exists to clean up leaked containers on a long-lived host, but # this runner is ephemeral and every container dies with the VM. Leaving # it enabled would pull a third, unpinned image (testcontainers/ryuk) # from Docker Hub mid-suite: exactly the registry dependency the # pre-pull step exists to remove. env: TESTCONTAINERS_RYUK_DISABLED: "true" run: | PATH="$PATH:$HOME/go/bin" make test-e2e-distributed - name: Setup tmate session if tests fail if: ${{ failure() }} uses: mxschmitt/action-tmate@v3.23 with: detached: true connect-timeout-seconds: 180 limit-access-to-actor: true