Skip to content

subscriptions-channels.yml fails on self-hosted Linux runners: no docker.sock (needs DOCKER_HOST env like smoke workflow) #389

Description

@aacruzgon

Summary

subscriptions-channels.yml fails on the current [self-hosted, Linux] runner pool: every testcontainer-based test panics immediately with

Failed to start PostgreSQL container: Client(Init(SocketNotFoundError("/var/run/docker.sock")))

The runners no longer expose a local Docker socket. subscriptions-smoke.yml adapted to this by setting DOCKER_HOST: ${{ secrets.DOCKER_HOST }} (plus DOCKER_HOST_IP) so testcontainers talk to a remote Docker host, but subscriptions-channels.yml never got that env block — its jobs run with no Docker configuration at all, so testcontainers falls back to /var/run/docker.sock and fails.

Evidence

  • Run 30062816042 (dispatched 2026-07-24 against feat/cluster-capable-state): all 15 Unit tests (<matrix>) jobs failed identically — 125 tests failed in 0.02s, every panic at crates/persistence/tests/postgres_tests.rs:761 with the SocketNotFoundError above (1,875 occurrences across the log).
  • A --failed re-run reproduced the exact same failure on all 15 jobs, ruling out a single bad runner.
  • The failing set includes long-standing tests (e.g. postgres_integration_update_resource), not just newly added ones — the branch's code is not the trigger.
  • The same persistence test suites passed in the main CI run (30062676960) on this branch; CI's Test Rust job uses unpinned [self-hosted] runners, so it can land on a machine that still has a Docker socket.

Why this is infra drift, not branch breakage

Proposed fix

Add the same Docker env wiring subscriptions-smoke.yml uses (.github/workflows/subscriptions-smoke.yml:20-21) to subscriptions-channels.yml:

env:
  DOCKER_HOST: ${{ secrets.DOCKER_HOST }}
  DOCKER_HOST_IP: ${{ secrets.DOCKER_HOST_IP }}

testcontainers-rs honors DOCKER_HOST, and get_host() in the tests resolves to the remote Docker host, so the persistence/subscriptions testcontainer suites should work the same way the smoke workflow's do. Alternatively (or additionally), the runner pool could restore a local Docker socket, which would also un-break any other testcontainer consumer that pins [self-hosted, Linux].

Impact

  • subscriptions-channels.yml is workflow_dispatch-only, so this doesn't block PRs, but it makes the channel integration matrix impossible to run — including as a validation gate for subscriptions changes (it was part of the post-merge validation sweep for PR feat(cluster): make HFS cluster-capable behind a load balancer #269, where everything else passed).
  • Any other workflow that pins [self-hosted, Linux] and uses testcontainers without DOCKER_HOST will fail the same way.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions