Skip to content

Add cross-language Testcontainers support - #23

Merged
damianh merged 2 commits into
mainfrom
dh/testcontainers-compatibility
Sep 13, 2026
Merged

damianh merged 2 commits into
mainfrom
dh/testcontainers-compatibility

Conversation

@damianh

@damianh damianh commented Sep 13, 2026

Copy link
Copy Markdown
Owner

MicroStack's fixed SQS URL generation made dynamically mapped container ports unusable without client-side URL rewriting. This change establishes a language-independent Testcontainers contract so consumers can use returned AWS resource URLs directly.

What changed

  • Derive SQS queue URLs from the incoming request authority by default while keeping queue identity independent of host and port.
  • Preserve the previous configured-address behavior through MICROSTACK_SQS_ENDPOINT_STRATEGY=legacy.
  • Keep persistence, SNS fanout, Lambda event-source mappings, CloudFormation, and account isolation working with stable queue identity.
  • Replace the manual WSL/Docker smoke test with a production-image Testcontainers contract suite.
  • Add runnable .NET, Java, Go, Python, and TypeScript examples covering dynamic-port SQS and path-style S3.
  • Run the contract suite and all five examples in CI and before release image publication.
  • Document dynamic port mapping, image selection, networking constraints, and the legacy compatibility mode.

Validation

  • 153 affected .NET integration tests passed.
  • Production-image contract suite passed.
  • .NET, Go, Python, and TypeScript examples passed locally against microstack:test.
  • Java example passed its isolated Maven validation.
  • Documentation build and git diff --check passed.

The full existing suite still has 15 unrelated S3 date-header failures on this Windows host because its locale formats September as Sept, which the AWS SDK rejects. This change does not modify that pre-existing date-formatting behavior.

Derive SQS queue URLs from the reachable request authority so random container port mappings work without client-side rewriting. Add cross-language contract examples and gate container publication on them.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@coldtea-pr-lens

coldtea-pr-lens Bot commented Sep 13, 2026

Copy link
Copy Markdown

◈ PR Lens

🟢 +1 new · 🟠 ~6 changed · 🔴 -0 removed · 1 flow · 18 files · commit 98a89da


Architecture

Architecture diagram for damianh/microstack at 98a89da

7 components touched across 6 lanes.

Open the interactive canvas


Inside the changed components — 2 views

Component view — Request-derived SQS endpoint strategy

Architecture view of Component view — Request-derived SQS endpoint strategy in damianh/microstack

Component view — Testcontainers verification harness

Architecture view of Component view — Testcontainers verification harness in damianh/microstack

Data flow

Data flow diagram for damianh/microstack at 98a89da

Dynamic SQS queue URL resolution and dispatch

Open the interactive canvas


View

  • Architecture lens
  • Data flow lens
  • Expand every detail

Tip

Push a commit and the comment redraws for the new head. A slow older run never overwrites a newer one.

🪧 More tips
  • Run npx skills add coldteadotai/pr-lens, then tell your coding agent: "Diagram the change you just made with PR Lens and attach it to the pull request."
  • Run npx @coldtea/pr-lens-cli analyze --base origin/main on a branch, then npx @coldtea/pr-lens-cli render .pr-lens/graph.json. Same lenses, your own model key, before the pull request exists.
  • Untick Architecture lens or Data flow lens under View to hide a diagram, or tick Expand every detail to open every section. The comment redraws in a few seconds.
  • Click the link under each diagram to open it on a canvas you can zoom, pan and step through.
  • The diagrams are links. Click one to open it on the canvas, then press W or click play to walk through the change.
  • Open a diagram on the canvas, then press W or click play to walk through the change one step at a time.
  • The CLI's render reads .github/pr-lens.yml and applies your renames, exclusions and lane pins at draw time.
  • Set github.comment.collapsed: true in .github/pr-lens.yml to fold the comment behind one View architecture and data flow row. Drawing still runs on every push.
  • Add .github/workflows/pr-lens.yml with coldteadotai/pr-lens/packages/action@v0 and your model provider's key as its api-key to run PR Lens from your own CI. Any /chat/completions endpoint works.
  • Switch GitHub to dark mode and the diagrams follow. The moving dots are this pull request's data in motion.

Thanks for using PR Lens! It's built by Coldtea, free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Preserve pywin32's Windows-only environment marker so Linux CI does not attempt to install an unavailable Windows wheel.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@damianh
damianh merged commit ec93495 into main Sep 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant