From 56d6239e20a291fc1014cf69caf43b5d3fc14481 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 01:01:48 +0000 Subject: [PATCH 1/3] Bump the dependencies group across 12 directories with 14 updates Bumps the dependencies group with 1 update in the /packages/modules/clickhouse directory: clickhouse/clickhouse-server. Bumps the dependencies group with 2 updates in the /packages/modules/gcloud directory: google.com/cloudsdktool/google-cloud-cli and [goccy/bigquery-emulator](https://github.com/goccy/bigquery-emulator). Bumps the dependencies group with 1 update in the /packages/modules/k3s directory: rancher/k3s. Bumps the dependencies group with 1 update in the /packages/modules/localstack directory: amazon/aws-cli. Bumps the dependencies group with 1 update in the /packages/modules/mockserver directory: mockserver/mockserver. Bumps the dependencies group with 1 update in the /packages/modules/nats directory: nats. Bumps the dependencies group with 1 update in the /packages/modules/qdrant directory: qdrant/qdrant. Bumps the dependencies group with 1 update in the /packages/modules/redpanda directory: redpandadata/redpanda. Bumps the dependencies group with 2 updates in the /packages/modules/selenium directory: selenium/standalone-chrome and selenium/standalone-firefox. Bumps the dependencies group with 1 update in the /packages/modules/valkey directory: valkey/valkey. Bumps the dependencies group with 1 update in the /packages/modules/vault directory: hashicorp/vault. Bumps the dependencies group with 1 update in the /packages/modules/weaviate directory: semitechnologies/weaviate. Updates `clickhouse/clickhouse-server` from 26.4-alpine to 26.5-alpine Updates `google.com/cloudsdktool/google-cloud-cli` from 568.0.0-emulators to 569.0.0-emulators Updates `goccy/bigquery-emulator` from 0.6.6 to 0.7.2 - [Release notes](https://github.com/goccy/bigquery-emulator/releases) - [Commits](https://github.com/goccy/bigquery-emulator/compare/v0.6.6...v0.7.2) Updates `rancher/k3s` from v1.36.0-k3s1 to v1.36.1-k3s1 Updates `amazon/aws-cli` from 2.34.48 to 2.34.53 Updates `mockserver/mockserver` from 5.15.0 to 6.0.0 Updates `nats` from 2.14.0-alpine to 2.14.1-alpine Updates `qdrant/qdrant` from v1.18.0 to v1.18.1 Updates `redpandadata/redpanda` from v26.1.8 to v26.1.9 Updates `selenium/standalone-chrome` from 147.0 to 148.0 Updates `selenium/standalone-firefox` from 149.0 to 151.0 Updates `valkey/valkey` from 9.0 to 9.1 Updates `hashicorp/vault` from 1.21.4 to 2.0.1 Updates `semitechnologies/weaviate` from 1.37.4 to 1.37.4-5853989.arm64 --- updated-dependencies: - dependency-name: clickhouse/clickhouse-server dependency-version: 26.5-alpine dependency-type: direct:production dependency-group: dependencies - dependency-name: google.com/cloudsdktool/google-cloud-cli dependency-version: 569.0.0-emulators dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: goccy/bigquery-emulator dependency-version: 0.7.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: rancher/k3s dependency-version: v1.36.1-k3s1 dependency-type: direct:production dependency-group: dependencies - dependency-name: amazon/aws-cli dependency-version: 2.34.53 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: mockserver/mockserver dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: nats dependency-version: 2.14.1-alpine dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: qdrant/qdrant dependency-version: v1.18.1 dependency-type: direct:production dependency-group: dependencies - dependency-name: redpandadata/redpanda dependency-version: v26.1.9 dependency-type: direct:production dependency-group: dependencies - dependency-name: selenium/standalone-chrome dependency-version: '148.0' dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: selenium/standalone-firefox dependency-version: '151.0' dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: valkey/valkey dependency-version: '9.1' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: hashicorp/vault dependency-version: 2.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: semitechnologies/weaviate dependency-version: 1.37.4-5853989.arm64 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- packages/modules/clickhouse/Dockerfile | 2 +- packages/modules/gcloud/Dockerfile | 4 ++-- packages/modules/k3s/Dockerfile | 2 +- packages/modules/localstack/Dockerfile | 2 +- packages/modules/mockserver/Dockerfile | 2 +- packages/modules/nats/Dockerfile | 2 +- packages/modules/qdrant/Dockerfile | 2 +- packages/modules/redpanda/Dockerfile | 2 +- packages/modules/selenium/Dockerfile | 4 ++-- packages/modules/valkey/Dockerfile | 2 +- packages/modules/vault/Dockerfile | 2 +- packages/modules/weaviate/Dockerfile | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/modules/clickhouse/Dockerfile b/packages/modules/clickhouse/Dockerfile index 961d22e10..91ffd9e03 100644 --- a/packages/modules/clickhouse/Dockerfile +++ b/packages/modules/clickhouse/Dockerfile @@ -1 +1 @@ -FROM clickhouse/clickhouse-server:26.4-alpine +FROM clickhouse/clickhouse-server:26.5-alpine diff --git a/packages/modules/gcloud/Dockerfile b/packages/modules/gcloud/Dockerfile index 2f9918a86..7b3ae8738 100644 --- a/packages/modules/gcloud/Dockerfile +++ b/packages/modules/gcloud/Dockerfile @@ -1,4 +1,4 @@ -FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:568.0.0-emulators +FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:569.0.0-emulators FROM fsouza/fake-gcs-server:1.54.0 -FROM ghcr.io/goccy/bigquery-emulator:0.6.6 +FROM ghcr.io/goccy/bigquery-emulator:0.7.2 FROM gcr.io/cloud-spanner-emulator/emulator:1.5.53 \ No newline at end of file diff --git a/packages/modules/k3s/Dockerfile b/packages/modules/k3s/Dockerfile index cce56993d..0a875d268 100644 --- a/packages/modules/k3s/Dockerfile +++ b/packages/modules/k3s/Dockerfile @@ -1,2 +1,2 @@ -FROM rancher/k3s:v1.36.0-k3s1 +FROM rancher/k3s:v1.36.1-k3s1 FROM rancher/kubectl:v1.36.0 \ No newline at end of file diff --git a/packages/modules/localstack/Dockerfile b/packages/modules/localstack/Dockerfile index 6eb9d848f..5d6560bff 100644 --- a/packages/modules/localstack/Dockerfile +++ b/packages/modules/localstack/Dockerfile @@ -1,2 +1,2 @@ FROM localstack/localstack:4.14.0 -FROM amazon/aws-cli:2.34.48 \ No newline at end of file +FROM amazon/aws-cli:2.34.53 \ No newline at end of file diff --git a/packages/modules/mockserver/Dockerfile b/packages/modules/mockserver/Dockerfile index b33ecc065..f24cc6866 100644 --- a/packages/modules/mockserver/Dockerfile +++ b/packages/modules/mockserver/Dockerfile @@ -1 +1 @@ -FROM mockserver/mockserver:5.15.0 +FROM mockserver/mockserver:6.0.0 diff --git a/packages/modules/nats/Dockerfile b/packages/modules/nats/Dockerfile index 2034ed00c..c41f8cfb3 100644 --- a/packages/modules/nats/Dockerfile +++ b/packages/modules/nats/Dockerfile @@ -1 +1 @@ -FROM nats:2.14.0-alpine +FROM nats:2.14.1-alpine diff --git a/packages/modules/qdrant/Dockerfile b/packages/modules/qdrant/Dockerfile index 4b8175133..b664ea4bb 100644 --- a/packages/modules/qdrant/Dockerfile +++ b/packages/modules/qdrant/Dockerfile @@ -1 +1 @@ -FROM qdrant/qdrant:v1.18.0 +FROM qdrant/qdrant:v1.18.1 diff --git a/packages/modules/redpanda/Dockerfile b/packages/modules/redpanda/Dockerfile index b1eadfacc..1ee278308 100644 --- a/packages/modules/redpanda/Dockerfile +++ b/packages/modules/redpanda/Dockerfile @@ -1 +1 @@ -FROM docker.redpanda.com/redpandadata/redpanda:v26.1.8 +FROM docker.redpanda.com/redpandadata/redpanda:v26.1.9 diff --git a/packages/modules/selenium/Dockerfile b/packages/modules/selenium/Dockerfile index a183f8ad3..82c6e5660 100644 --- a/packages/modules/selenium/Dockerfile +++ b/packages/modules/selenium/Dockerfile @@ -1,4 +1,4 @@ -FROM selenium/standalone-chrome:147.0 +FROM selenium/standalone-chrome:148.0 FROM seleniarm/standalone-chromium:124.0 -FROM selenium/standalone-firefox:149.0 +FROM selenium/standalone-firefox:151.0 FROM seleniarm/standalone-firefox:125.0 \ No newline at end of file diff --git a/packages/modules/valkey/Dockerfile b/packages/modules/valkey/Dockerfile index c57ea1e6f..e33efdc9e 100644 --- a/packages/modules/valkey/Dockerfile +++ b/packages/modules/valkey/Dockerfile @@ -1 +1 @@ -FROM valkey/valkey:9.0 +FROM valkey/valkey:9.1 diff --git a/packages/modules/vault/Dockerfile b/packages/modules/vault/Dockerfile index 2f294e19d..95ddae837 100644 --- a/packages/modules/vault/Dockerfile +++ b/packages/modules/vault/Dockerfile @@ -1 +1 @@ -FROM hashicorp/vault:1.21.4 +FROM hashicorp/vault:2.0.1 diff --git a/packages/modules/weaviate/Dockerfile b/packages/modules/weaviate/Dockerfile index eb239b197..545f0d467 100644 --- a/packages/modules/weaviate/Dockerfile +++ b/packages/modules/weaviate/Dockerfile @@ -1 +1 @@ -FROM semitechnologies/weaviate:1.37.4 +FROM semitechnologies/weaviate:1.37.4-5853989.arm64 From 7cc5451f6f0ca7752ba6edcf626ffc1fe988c18f Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 26 May 2026 10:38:56 +0100 Subject: [PATCH 2/3] Fix MockServer 6 readiness handling --- AGENTS.md | 2 ++ .../mockserver/src/mockserver-5.test.ts | 30 +++++++++++++++++++ .../mockserver/src/mockserver-container.ts | 8 +++-- packages/modules/weaviate/Dockerfile | 2 +- .../generic-container/generic-container.ts | 3 ++ .../utils/wait-strategy-selector.test.ts | 13 ++++++++ .../utils/wait-strategy-selector.ts | 4 ++- 7 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 packages/modules/mockserver/src/mockserver-5.test.ts diff --git a/AGENTS.md b/AGENTS.md index 3e36dfe94..3c3bb6977 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,7 @@ It captures practical rules that prevent avoidable CI and PR churn. - Tests should verify observable behavior changes, not only internal/config state. - Example: for a security option, assert a real secure/insecure behavior difference. - Test-only helper files under `src` (for example `*-test-utils.ts`) must be explicitly excluded from package `tsconfig.build.json` so they are not emitted into `build` and accidentally published. +- Compatibility tests for older major versions should live in separate version-specific test files (for example `-5.test.ts`), instead of being mixed into the latest-image test file. - For substantial changes to GitHub Actions, runner images, Node/npm versions, or release/publish automation, consider running the manual `Node.js Package` workflow as a dry-run publish sanity check. - Select the PR branch as the workflow ref to test publish workflow changes before merging. - Use a representative version input, for example the next planned semver. @@ -55,6 +56,7 @@ It captures practical rules that prevent avoidable CI and PR churn. 4. Run required checks: `npm run format`, `npm run lint`, `npm run check-compiles` when touching `packages/testcontainers` APIs consumed by modules, and targeted tests. 5. Verify git diff only contains intended files. 6. Never commit, push, or post on GitHub (issues, PRs, or comments) without first sharing the proposed diff/message and getting explicit user approval. + - If `gh auth status` reports or times out on unrelated hosts/accounts, do not treat that as blocking. Confirm the GitHub host needed for the current repository is authenticated and has the required scopes. 7. Commit with focused message(s), using `git commit --no-verify`. - Never bypass signing (for example, do not use `--no-gpg-sign`). - If signing fails (for example, passphrase/key issues), stop and ask the user to resolve signing, then retry. diff --git a/packages/modules/mockserver/src/mockserver-5.test.ts b/packages/modules/mockserver/src/mockserver-5.test.ts new file mode 100644 index 000000000..832601141 --- /dev/null +++ b/packages/modules/mockserver/src/mockserver-5.test.ts @@ -0,0 +1,30 @@ +import { mockServerClient } from "mockserver-client"; +import superagent from "superagent"; +import { MockserverContainer } from "./mockserver-container"; + +const IMAGE = "mockserver/mockserver:5.15.0"; + +describe("MockserverContainer 5", { timeout: 240_000 }, () => { + it("should start and accept mocks", async () => { + await using container = await new MockserverContainer(IMAGE).start(); + + const client = mockServerClient(container.getHost(), container.getMockserverPort()); + await client.mockAnyResponse({ + httpRequest: { + method: "GET", + path: "/foo", + }, + httpResponse: { + body: { + string: "bar", + }, + statusCode: 200, + }, + }); + + const response = await superagent.get(`${container.getUrl()}/foo`); + + expect(response.statusCode).toBe(200); + expect(response.text).toBe("bar"); + }); +}); diff --git a/packages/modules/mockserver/src/mockserver-container.ts b/packages/modules/mockserver/src/mockserver-container.ts index 5b31becf8..b21f00c0b 100644 --- a/packages/modules/mockserver/src/mockserver-container.ts +++ b/packages/modules/mockserver/src/mockserver-container.ts @@ -1,4 +1,4 @@ -import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; +import { AbstractStartedContainer, GenericContainer, Wait, WaitStrategy } from "testcontainers"; export class StartedMockserverContainer extends AbstractStartedContainer { getMockserverPort(): number { @@ -20,7 +20,7 @@ export class MockserverContainer extends GenericContainer { constructor(image: string) { super(image); - this.withWaitStrategy(Wait.forAll([Wait.forLogMessage(/started on port: 1080/)])).withStartupTimeout(120_000); + this.withStartupTimeout(120_000); } override async start(): Promise { @@ -28,4 +28,8 @@ export class MockserverContainer extends GenericContainer { return new StartedMockserverContainer(await super.start()); } + + protected override getDefaultWaitStrategy(): WaitStrategy { + return Wait.forLogMessage(/started on port: 1080/); + } } diff --git a/packages/modules/weaviate/Dockerfile b/packages/modules/weaviate/Dockerfile index 545f0d467..eb239b197 100644 --- a/packages/modules/weaviate/Dockerfile +++ b/packages/modules/weaviate/Dockerfile @@ -1 +1 @@ -FROM semitechnologies/weaviate:1.37.4-5853989.arm64 +FROM semitechnologies/weaviate:1.37.4 diff --git a/packages/testcontainers/src/generic-container/generic-container.ts b/packages/testcontainers/src/generic-container/generic-container.ts index d9699aea1..6334e7e13 100644 --- a/packages/testcontainers/src/generic-container/generic-container.ts +++ b/packages/testcontainers/src/generic-container/generic-container.ts @@ -87,6 +87,8 @@ export class GenericContainer implements TestContainer { protected containerStarting?(inspectResult: InspectResult, reused: boolean): Promise; + protected getDefaultWaitStrategy?(): WaitStrategy; + public async start(): Promise { const client = await getContainerRuntimeClient(); await client.image.pull(this.imageName, { @@ -132,6 +134,7 @@ export class GenericContainer implements TestContainer { waitStrategy, healthCheck: this.healthCheck, imageNames: [this.imageName.string], + defaultWaitStrategy: this.getDefaultWaitStrategy?.(), }); } diff --git a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts index 8fe99894e..60552c271 100644 --- a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts +++ b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts @@ -136,6 +136,19 @@ describe("wait strategy selector", () => { ).resolves.toBeInstanceOf(HostPortWaitStrategy); }); + it("should select the default wait strategy when no healthcheck is configured", async () => { + const defaultWaitStrategy = Wait.forLogMessage("ready"); + + await expect( + selectWaitStrategy({ + client: client({} as ImageInspectInfo), + inspectResult: containerInspectResult(), + imageNames: ["image:latest"], + defaultWaitStrategy, + }) + ).resolves.toBe(defaultWaitStrategy); + }); + it("should select image healthcheck when container inspect omits healthcheck config", async () => { await expect( selectWaitStrategy({ diff --git a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.ts b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.ts index 20b97718f..57d74bff8 100644 --- a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.ts +++ b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.ts @@ -17,6 +17,7 @@ type WaitStrategySelectorOptions = { waitStrategy?: WaitStrategy; healthCheck?: HealthCheck; imageNames?: string[]; + defaultWaitStrategy?: WaitStrategy; }; export const selectWaitStrategy = async ({ @@ -25,13 +26,14 @@ export const selectWaitStrategy = async ({ waitStrategy, healthCheck, imageNames = getImageNames(inspectResult), + defaultWaitStrategy = Wait.forListeningPorts(), }: WaitStrategySelectorOptions): Promise => { if (waitStrategy) return waitStrategy; if (hasHealthCheck(healthCheck)) return Wait.forHealthCheck(); if (hasDisabledHealthCheckConfig(inspectResult)) return Wait.forListeningPorts(); if (hasHealthCheckConfig(inspectResult) || hasHealthCheckStatus(inspectResult)) return Wait.forHealthCheck(); if (await imageHasHealthCheck(client, imageNames)) return Wait.forHealthCheck(); - return Wait.forListeningPorts(); + return defaultWaitStrategy; }; const getImageNames = (inspectResult: ContainerInspectInfo): string[] => { From 49ce1f274f933cdbc9e309d3d0859cb06e19e33a Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 26 May 2026 11:08:58 +0100 Subject: [PATCH 3/3] Fix Podman image healthcheck detection --- .../wait-strategies/utils/health-check.test.ts | 10 ++++++++++ .../src/wait-strategies/utils/health-check.ts | 8 +++++++- .../utils/wait-strategy-selector.test.ts | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/testcontainers/src/wait-strategies/utils/health-check.test.ts b/packages/testcontainers/src/wait-strategies/utils/health-check.test.ts index fcdf422eb..3b8fa7a2f 100644 --- a/packages/testcontainers/src/wait-strategies/utils/health-check.test.ts +++ b/packages/testcontainers/src/wait-strategies/utils/health-check.test.ts @@ -24,6 +24,16 @@ describe("health check utils", () => { expect(hasHealthCheckConfig(inspectResult)).toBe(true); }); + it("should detect Podman image health check config from HealthCheck field", () => { + const inspectResult = { + HealthCheck: { + Test: ["CMD-SHELL", "test -f /tmp/ready"], + }, + } as unknown as ImageInspectInfo; + + expect(hasHealthCheckConfig(inspectResult)).toBe(true); + }); + it("should ignore disabled health check config", () => { const inspectResult = { Config: { diff --git a/packages/testcontainers/src/wait-strategies/utils/health-check.ts b/packages/testcontainers/src/wait-strategies/utils/health-check.ts index 93382b00e..b58fb23d9 100644 --- a/packages/testcontainers/src/wait-strategies/utils/health-check.ts +++ b/packages/testcontainers/src/wait-strategies/utils/health-check.ts @@ -8,11 +8,14 @@ type HealthCheckInspectInfo = ContainerInspectInfo | ImageInspectInfo; type InspectWithHealthCheckConfig = { Config?: { Healthcheck?: HealthConfig; + HealthCheck?: HealthConfig; }; ContainerConfig?: { Healthcheck?: HealthConfig; + HealthCheck?: HealthConfig; }; Healthcheck?: HealthConfig; + HealthCheck?: HealthConfig; }; type InspectWithHealthCheckState = { State: ContainerInspectInfo["State"] & { @@ -64,8 +67,11 @@ export const getHealthCheckConfig = (inspectResult: HealthCheckInspectInfo): Hea return ( inspectWithHealthCheckConfig.Config?.Healthcheck ?? + inspectWithHealthCheckConfig.Config?.HealthCheck ?? inspectWithHealthCheckConfig.ContainerConfig?.Healthcheck ?? - inspectWithHealthCheckConfig.Healthcheck + inspectWithHealthCheckConfig.ContainerConfig?.HealthCheck ?? + inspectWithHealthCheckConfig.Healthcheck ?? + inspectWithHealthCheckConfig.HealthCheck ); }; diff --git a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts index 60552c271..72bc7cd01 100644 --- a/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts +++ b/packages/testcontainers/src/wait-strategies/utils/wait-strategy-selector.test.ts @@ -43,6 +43,13 @@ const imageInspectResultWithHealthCheck = (): ImageInspectInfo => }, }) as unknown as ImageInspectInfo; +const imageInspectResultWithPodmanHealthCheck = (): ImageInspectInfo => + ({ + HealthCheck: { + Test: ["CMD-SHELL", "test -f /tmp/ready"], + }, + }) as unknown as ImageInspectInfo; + const client = (imageInspectResult: ImageInspectInfo): ContainerRuntimeClient => ({ image: { @@ -159,6 +166,16 @@ describe("wait strategy selector", () => { ).resolves.toBeInstanceOf(HealthCheckWaitStrategy); }); + it("should select Podman image healthcheck when container inspect omits healthcheck config", async () => { + await expect( + selectWaitStrategy({ + client: client(imageInspectResultWithPodmanHealthCheck()), + inspectResult: containerInspectResult(), + imageNames: ["image:latest"], + }) + ).resolves.toBeInstanceOf(HealthCheckWaitStrategy); + }); + it("should select listening ports when image inspect fails", async () => { await expect( selectWaitStrategy({