Skip to content

fix(dmsg): restore proxyproto USE policy (v0.15 REQUIRE default broke dmsg data-plane fleet-wide) #318

fix(dmsg): restore proxyproto USE policy (v0.15 REQUIRE default broke dmsg data-plane fleet-wide)

fix(dmsg): restore proxyproto USE policy (v0.15 REQUIRE default broke dmsg data-plane fleet-wide) #318

Workflow file for this run

# Phase 5 of the #1525 IPv6 plan: a CI lane that BUILDS and RUNS a
# dual-stack dmsg deployment on a docker bridge configured for both
# IPv4 and IPv6, then asserts, at the wire level, that dmsg works over
# IPv6 — the crown jewel being a full dmsg Noise handshake completed
# straight to the server's IPv6 endpoint.
#
# This replaces the earlier compose-syntax-only check: the images are
# built from source via a self-contained Dockerfile (no docker_build.sh
# / image_tag / base_image prerequisite), the stack is brought up, and
# docker/dmsg/scripts/assert-ipv6-e2e.sh runs the v6 assertions.
#
# Runs in addition to the existing Test lane in test.yml; the v4-only
# path there continues to validate the backward-compat case (visor
# with no RemoteAddrV6, server with no AddressV6 — the pre-#1525
# semantics).
#
# Trigger: PRs that touch the IPv6 surface, or anything under
# pkg/dmsg / pkg/address-resolver / pkg/transport/network / the
# v6-aware compose + config + workflow files themselves. Avoids waking
# this lane for changes that can't affect v6 (docs, CI for other lanes).
on:
pull_request:
paths:
- 'pkg/dmsg/**'
- 'pkg/address-resolver/**'
- 'pkg/transport/network/**'
- 'pkg/services/dmsgsrv/**'
- 'pkg/services/dmsgdisc/**'
- 'cmd/dmsg/**'
- 'docker/dmsg/**'
- 'docker/config/dmsg-server-v6.json'
- 'docker/config/services-dmsg-v6.json'
- '.github/workflows/test-ipv6.yml'
workflow_dispatch:
name: Test IPv6 dual-stack
jobs:
ipv6-e2e:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
fetch-tags: true
# Docker has IPv6 support compiled in but daemon-level IPv6 is
# off by default on ubuntu-latest runners. Enable it before the
# compose stack tries to allocate v6 addresses on the bridge.
- name: Enable Docker IPv6
run: |
set -eux
sudo bash -c 'cat > /etc/docker/daemon.json <<EOF
{
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:cafe::/64",
"experimental": false
}
EOF'
sudo systemctl restart docker
docker info | grep -i ipv6 || true
# Build the self-contained image once (skywire + dmsgprobe from
# source). Both compose services reference this tag, so the
# subsequent `up` needs no --build and won't rebuild.
- name: Build dmsg dual-stack image
run: |
set -eux
docker build \
-f docker/dmsg/images/dmsg-e2e/Dockerfile \
-t skywire-dmsg-e2e:local .
- name: Validate dual-stack compose config
working-directory: docker/dmsg
run: |
set -eux
docker compose -f docker-compose.e2e-v6.yml config > /tmp/compose-rendered.yml
# Sanity: rendered output mentions both address families.
grep -q '172.21.0.4' /tmp/compose-rendered.yml
grep -q 'fd00:dead:beef::4' /tmp/compose-rendered.yml
# The v6 server config must exist and set the v6 endpoint.
grep -q '"public_address_v6"' ../config/dmsg-server-v6.json
- name: Bring up the dual-stack dmsg stack
run: |
set -eux
docker compose -f docker/dmsg/docker-compose.e2e-v6.yml up -d --wait
- name: Assert dmsg works over IPv6 (wire-level)
run: |
set -eux
bash docker/dmsg/scripts/assert-ipv6-e2e.sh
- name: Dump logs on failure
if: failure()
run: |
docker compose -f docker/dmsg/docker-compose.e2e-v6.yml ps || true
docker compose -f docker/dmsg/docker-compose.e2e-v6.yml logs --tail=200 || true
- name: Tear down
if: always()
run: |
docker compose -f docker/dmsg/docker-compose.e2e-v6.yml down --remove-orphans -v || true