Problem
There is no CI job for the GCP Pub/Sub transport. Every other transport has a workflow under .github/workflows/ (nats, mqtt, rabbitmq, kafka, pulsar, redis, azure-service-bus, aws, cosmosdb, …) and a matching CI* Nuke target, but GCP Pub/Sub has neither:
- No
.github/workflows/pubsub.yml (or gcp.yml).
- No
CIPubsub / CIGCP target in build/CITargets.cs (it jumps from CINATS to CIPulsar).
…even though the transport is fully built and tested locally:
- Project:
src/Transports/GCP/Wolverine.Pubsub (included in build/build.cs).
- Tests:
src/Transports/GCP/Wolverine.Pubsub.Tests — including InlineSendingAndReceivingCompliance, BufferedSendingAndReceivingCompliance, DurableSendingAndReceivingCompliance.
- Emulator already wired up: the
gcp-pubsub service in docker-compose.yml (Google Cloud CLI Pub/Sub emulator on :8085, project wolverine).
So GCP Pub/Sub regressions ship undetected.
Why this surfaced now
While fixing #3189 (the #3188 "storeless Solo == node 1" change collided NATS/MQTT reply subjects, which are keyed on the node number with no service discriminator), GCP Pub/Sub was found to have the identical pattern:
// PubsubTransport.cs:137
var responseName = $"{ResponseName}.{Math.Abs(runtime.DurabilitySettings.AssignedNodeNumber)}";
Two Solo services on one project now collide on the same response subscription — exactly the bug that broke the NATS/MQTT request/reply compliance suite. It went unnoticed for GCP only because there is no CI job to catch it. (Tracking the GCP code fix separately / alongside #3189; this issue is specifically about the missing CI coverage that let it slip.)
Proposed work
- Add a
CIPubsub target to build/CITargets.cs, modeled on CINATS (build/CITargets.cs:362), pointing at Wolverine.Pubsub.Tests and running --framework net9.0.
- Add
.github/workflows/pubsub.yml, modeled on nats.yml: push/pull_request on main + workflow_dispatch, .NET 8/9/10 setup, ./build.sh CIPubsub --framework net9.0, docker compose down on cleanup. (The gcp-pubsub emulator is started via the compose file the build already brings up; confirm the emulator host/port env — PUBSUB_EMULATOR_HOST=localhost:8085 — is set the way the tests expect.)
- Verify the GCP compliance suite is green against the emulator in CI, then keep it in the required set alongside the other transports.
Acceptance
Related: #3188, #3189.
Problem
There is no CI job for the GCP Pub/Sub transport. Every other transport has a workflow under
.github/workflows/(nats, mqtt, rabbitmq, kafka, pulsar, redis, azure-service-bus, aws, cosmosdb, …) and a matchingCI*Nuke target, but GCP Pub/Sub has neither:.github/workflows/pubsub.yml(orgcp.yml).CIPubsub/CIGCPtarget inbuild/CITargets.cs(it jumps fromCINATStoCIPulsar).…even though the transport is fully built and tested locally:
src/Transports/GCP/Wolverine.Pubsub(included inbuild/build.cs).src/Transports/GCP/Wolverine.Pubsub.Tests— includingInlineSendingAndReceivingCompliance,BufferedSendingAndReceivingCompliance,DurableSendingAndReceivingCompliance.gcp-pubsubservice indocker-compose.yml(Google Cloud CLI Pub/Sub emulator on:8085, projectwolverine).So GCP Pub/Sub regressions ship undetected.
Why this surfaced now
While fixing #3189 (the #3188 "storeless Solo == node 1" change collided NATS/MQTT reply subjects, which are keyed on the node number with no service discriminator), GCP Pub/Sub was found to have the identical pattern:
Two Solo services on one project now collide on the same response subscription — exactly the bug that broke the NATS/MQTT request/reply compliance suite. It went unnoticed for GCP only because there is no CI job to catch it. (Tracking the GCP code fix separately / alongside #3189; this issue is specifically about the missing CI coverage that let it slip.)
Proposed work
CIPubsubtarget tobuild/CITargets.cs, modeled onCINATS(build/CITargets.cs:362), pointing atWolverine.Pubsub.Testsand running--framework net9.0..github/workflows/pubsub.yml, modeled onnats.yml:push/pull_requestonmain+workflow_dispatch, .NET 8/9/10 setup,./build.sh CIPubsub --framework net9.0,docker compose downon cleanup. (Thegcp-pubsubemulator is started via the compose file the build already brings up; confirm the emulator host/port env —PUBSUB_EMULATOR_HOST=localhost:8085— is set the way the tests expect.)Acceptance
pubsubworkflow runsWolverine.Pubsub.Testson every PR tomain.Related: #3188, #3189.