diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 53775cd8a..bb2595933 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -49,6 +49,52 @@ updates: patterns: - "*" + - package-ecosystem: "docker" + directories: + - "/packages/modules/arangodb" + - "/packages/modules/azurecosmosdb" + - "/packages/modules/azurite" + - "/packages/modules/cassandra" + - "/packages/modules/chromadb" + - "/packages/modules/clickhouse" + - "/packages/modules/cockroachdb" + - "/packages/modules/couchbase" + - "/packages/modules/elasticsearch" + - "/packages/modules/etcd" + - "/packages/modules/gcloud" + - "/packages/modules/hivemq" + - "/packages/modules/k3s" + - "/packages/modules/kafka" + - "/packages/modules/localstack" + - "/packages/modules/mariadb" + - "/packages/modules/minio" + - "/packages/modules/mockserver" + - "/packages/modules/mongodb" + - "/packages/modules/mssqlserver" + - "/packages/modules/mysql" + - "/packages/modules/nats" + - "/packages/modules/neo4j" + - "/packages/modules/ollama" + - "/packages/modules/postgresql" + - "/packages/modules/qdrant" + - "/packages/modules/rabbitmq" + - "/packages/modules/redis" + - "/packages/modules/redpanda" + - "/packages/modules/scylladb" + - "/packages/modules/selenium" + - "/packages/modules/toxiproxy" + - "/packages/modules/valkey" + - "/packages/modules/weaviate" + schedule: + interval: "weekly" + labels: + - "dependencies" + - "docker" + groups: + dependencies: + patterns: + - "*" + - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/packages/modules/arangodb/Dockerfile b/packages/modules/arangodb/Dockerfile new file mode 100644 index 000000000..1bdecdd6f --- /dev/null +++ b/packages/modules/arangodb/Dockerfile @@ -0,0 +1 @@ +FROM arangodb:3.10.0 diff --git a/packages/modules/arangodb/src/arangodb-container.test.ts b/packages/modules/arangodb/src/arangodb-container.test.ts index 8da91947b..2bc2a3052 100755 --- a/packages/modules/arangodb/src/arangodb-container.test.ts +++ b/packages/modules/arangodb/src/arangodb-container.test.ts @@ -1,7 +1,8 @@ import { Database } from "arangojs"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ArangoDBContainer } from "./arangodb-container"; -const IMAGE = "arangodb:3.10.0"; +const IMAGE = getImage(__dirname); describe("ArangoDB", { timeout: 180_000 }, () => { // connect { diff --git a/packages/modules/azurecosmosdb/Dockerfile b/packages/modules/azurecosmosdb/Dockerfile new file mode 100644 index 000000000..46218b94b --- /dev/null +++ b/packages/modules/azurecosmosdb/Dockerfile @@ -0,0 +1 @@ +FROM mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-EN20250228 diff --git a/packages/modules/azurecosmosdb/src/azure-cosmosdb-emulator-container.test.ts b/packages/modules/azurecosmosdb/src/azure-cosmosdb-emulator-container.test.ts index 7ae1e6321..4cf569cc7 100644 --- a/packages/modules/azurecosmosdb/src/azure-cosmosdb-emulator-container.test.ts +++ b/packages/modules/azurecosmosdb/src/azure-cosmosdb-emulator-container.test.ts @@ -1,8 +1,9 @@ import { CosmosClient, PartitionKeyKind } from "@azure/cosmos"; import https from "node:https"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { AzureCosmosDbEmulatorContainer } from "./azure-cosmosdb-emulator-container"; -const IMAGE = "mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-EN20250228"; +const IMAGE = getImage(__dirname); describe("AzureCosmosDbEmulatorContainer", { timeout: 180_000 }, async () => { it("should set https protocol", async () => { diff --git a/packages/modules/azurecosmosdb/tsconfig.build.json b/packages/modules/azurecosmosdb/tsconfig.build.json index b8f2e60e6..e9236a57d 100644 --- a/packages/modules/azurecosmosdb/tsconfig.build.json +++ b/packages/modules/azurecosmosdb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/azurecosmosdb/tsconfig.json b/packages/modules/azurecosmosdb/tsconfig.json index 5b04a1a44..0e863cb02 100644 --- a/packages/modules/azurecosmosdb/tsconfig.json +++ b/packages/modules/azurecosmosdb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/azurite/Dockerfile b/packages/modules/azurite/Dockerfile new file mode 100644 index 000000000..e0ca40b86 --- /dev/null +++ b/packages/modules/azurite/Dockerfile @@ -0,0 +1 @@ +FROM mcr.microsoft.com/azure-storage/azurite:3.34.0 diff --git a/packages/modules/azurite/src/azurite-container.test.ts b/packages/modules/azurite/src/azurite-container.test.ts index 1aacd6e04..a892df646 100644 --- a/packages/modules/azurite/src/azurite-container.test.ts +++ b/packages/modules/azurite/src/azurite-container.test.ts @@ -1,9 +1,10 @@ import { TableClient, TableEntity } from "@azure/data-tables"; import { BlobServiceClient, StorageSharedKeyCredential } from "@azure/storage-blob"; import { QueueServiceClient } from "@azure/storage-queue"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { AzuriteContainer } from "./azurite-container"; -const IMAGE = "mcr.microsoft.com/azure-storage/azurite:3.34.0"; +const IMAGE = getImage(__dirname); describe("Azurite", { timeout: 240_000 }, () => { // uploadAndDownloadBlob { diff --git a/packages/modules/cassandra/Dockerfile b/packages/modules/cassandra/Dockerfile new file mode 100644 index 000000000..b25c4afa0 --- /dev/null +++ b/packages/modules/cassandra/Dockerfile @@ -0,0 +1 @@ +FROM cassandra:5.0.2 diff --git a/packages/modules/cassandra/src/cassandra-container.test.ts b/packages/modules/cassandra/src/cassandra-container.test.ts index 75af283b8..c8a5bf18a 100644 --- a/packages/modules/cassandra/src/cassandra-container.test.ts +++ b/packages/modules/cassandra/src/cassandra-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "cassandra-driver"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { CassandraContainer } from "./cassandra-container"; -const IMAGE = "cassandra:5.0.2"; +const IMAGE = getImage(__dirname); describe("Cassandra", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { diff --git a/packages/modules/chromadb/Dockerfile b/packages/modules/chromadb/Dockerfile new file mode 100644 index 000000000..bf02fd020 --- /dev/null +++ b/packages/modules/chromadb/Dockerfile @@ -0,0 +1 @@ +FROM chromadb/chroma:0.6.3 diff --git a/packages/modules/chromadb/src/chromadb-container.test.ts b/packages/modules/chromadb/src/chromadb-container.test.ts index 49619da6f..53d2577e2 100755 --- a/packages/modules/chromadb/src/chromadb-container.test.ts +++ b/packages/modules/chromadb/src/chromadb-container.test.ts @@ -3,9 +3,10 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { GenericContainer } from "testcontainers"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ChromaDBContainer, StartedChromaDBContainer } from "./chromadb-container"; -const IMAGE = "chromadb/chroma:0.6.3"; +const IMAGE = getImage(__dirname); describe("ChromaDB", { timeout: 360_000 }, () => { // startContainer { diff --git a/packages/modules/clickhouse/Dockerfile b/packages/modules/clickhouse/Dockerfile new file mode 100644 index 000000000..86e1b49cb --- /dev/null +++ b/packages/modules/clickhouse/Dockerfile @@ -0,0 +1 @@ +FROM clickhouse/clickhouse-server:25.3-alpine diff --git a/packages/modules/clickhouse/src/clickhouse-container.test.ts b/packages/modules/clickhouse/src/clickhouse-container.test.ts index 290435fcb..b2773b073 100644 --- a/packages/modules/clickhouse/src/clickhouse-container.test.ts +++ b/packages/modules/clickhouse/src/clickhouse-container.test.ts @@ -1,7 +1,8 @@ import { createClient } from "@clickhouse/client"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ClickHouseContainer } from "./clickhouse-container"; -const IMAGE = "clickhouse/clickhouse-server:25.3-alpine"; +const IMAGE = getImage(__dirname); interface ClickHouseQueryResponse { data: T[]; diff --git a/packages/modules/clickhouse/tsconfig.build.json b/packages/modules/clickhouse/tsconfig.build.json index e5121688c..e9236a57d 100644 --- a/packages/modules/clickhouse/tsconfig.build.json +++ b/packages/modules/clickhouse/tsconfig.build.json @@ -9,4 +9,4 @@ "path": "../../testcontainers" } ] -} \ No newline at end of file +} diff --git a/packages/modules/clickhouse/tsconfig.json b/packages/modules/clickhouse/tsconfig.json index 1c0258e13..0e863cb02 100644 --- a/packages/modules/clickhouse/tsconfig.json +++ b/packages/modules/clickhouse/tsconfig.json @@ -1,8 +1,20 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { + "rootDir": "src", "outDir": "build", - "rootDir": "src" + "paths": { + "testcontainers": [ + "../../testcontainers/src" + ] + } }, - "include": ["src/**/*"] -} \ No newline at end of file + "exclude": [ + "build" + ], + "references": [ + { + "path": "../../testcontainers" + } + ] +} diff --git a/packages/modules/cockroachdb/Dockerfile b/packages/modules/cockroachdb/Dockerfile new file mode 100644 index 000000000..2fa829971 --- /dev/null +++ b/packages/modules/cockroachdb/Dockerfile @@ -0,0 +1 @@ +FROM cockroachdb/cockroach:v24.3.5 diff --git a/packages/modules/cockroachdb/src/cockroachdb-container.test.ts b/packages/modules/cockroachdb/src/cockroachdb-container.test.ts index 2152211ea..5dbbe7f8a 100644 --- a/packages/modules/cockroachdb/src/cockroachdb-container.test.ts +++ b/packages/modules/cockroachdb/src/cockroachdb-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { CockroachDbContainer } from "./cockroachdb-container"; -const IMAGE = "cockroachdb/cockroach:v24.3.5"; +const IMAGE = getImage(__dirname); describe("CockroachDbContainer", { timeout: 180_000 }, () => { // connect { diff --git a/packages/modules/couchbase/Dockerfile b/packages/modules/couchbase/Dockerfile new file mode 100644 index 000000000..8a236788c --- /dev/null +++ b/packages/modules/couchbase/Dockerfile @@ -0,0 +1 @@ +FROM couchbase/server:6.5.1 diff --git a/packages/modules/elasticsearch/Dockerfile b/packages/modules/elasticsearch/Dockerfile new file mode 100644 index 000000000..0f98a170f --- /dev/null +++ b/packages/modules/elasticsearch/Dockerfile @@ -0,0 +1 @@ +FROM elasticsearch:7.17.7 diff --git a/packages/modules/elasticsearch/src/elasticsearch-container.test.ts b/packages/modules/elasticsearch/src/elasticsearch-container.test.ts index f51170686..e53b47636 100644 --- a/packages/modules/elasticsearch/src/elasticsearch-container.test.ts +++ b/packages/modules/elasticsearch/src/elasticsearch-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "@elastic/elasticsearch"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ElasticsearchContainer } from "./elasticsearch-container"; -const IMAGE = "elasticsearch:7.17.7"; +const IMAGE = getImage(__dirname); describe("ElasticsearchContainer", { timeout: 180_000 }, () => { // createIndex { diff --git a/packages/modules/etcd/Dockerfile b/packages/modules/etcd/Dockerfile new file mode 100644 index 000000000..b93d89586 --- /dev/null +++ b/packages/modules/etcd/Dockerfile @@ -0,0 +1 @@ +FROM quay.io/coreos/etcd:v3.6.0 diff --git a/packages/modules/etcd/src/etcd-container.test.ts b/packages/modules/etcd/src/etcd-container.test.ts index cc1d7bb6a..f8fbf333d 100644 --- a/packages/modules/etcd/src/etcd-container.test.ts +++ b/packages/modules/etcd/src/etcd-container.test.ts @@ -1,8 +1,9 @@ import { Etcd3 } from "etcd3"; import { setTimeout } from "node:timers/promises"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { EtcdContainer, StartedEtcdContainer } from "./etcd-container"; -const IMAGE = "quay.io/coreos/etcd:v3.6.0"; +const IMAGE = getImage(__dirname); describe("etcd", () => { it("should construct a container", { timeout: 30_000 }, async () => { diff --git a/packages/modules/gcloud/Dockerfile b/packages/modules/gcloud/Dockerfile new file mode 100644 index 000000000..b6bea9b0e --- /dev/null +++ b/packages/modules/gcloud/Dockerfile @@ -0,0 +1,3 @@ +FROM gcr.io/google.com/cloudsdktool/cloud-sdk:517.0.0-emulators +FROM fsouza/fake-gcs-server:1.52.2 +FROM ghcr.io/goccy/bigquery-emulator:0.6.6 \ No newline at end of file diff --git a/packages/modules/gcloud/src/bigquery-emulator-container.test.ts b/packages/modules/gcloud/src/bigquery-emulator-container.test.ts index 18cda4aea..e5c16e6b7 100644 --- a/packages/modules/gcloud/src/bigquery-emulator-container.test.ts +++ b/packages/modules/gcloud/src/bigquery-emulator-container.test.ts @@ -1,7 +1,8 @@ import { BigQuery, TableSchema } from "@google-cloud/bigquery"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { BigQueryEmulatorContainer, StartedBigQueryEmulatorContainer } from "./bigquery-emulator-container"; -const IMAGE = "ghcr.io/goccy/bigquery-emulator:0.6.6"; +const IMAGE = getImage(__dirname, 2); describe("BigQueryEmulatorContainer", { timeout: 240_000 }, () => { it("should work using default version", async () => { diff --git a/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts b/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts index 4f50d1016..8ffd6a581 100644 --- a/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts +++ b/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts @@ -1,9 +1,10 @@ import { Storage } from "@google-cloud/storage"; import { setupServer } from "msw/node"; import { ReadableStream } from "node:stream/web"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { CloudStorageEmulatorContainer, StartedCloudStorageEmulatorContainer } from "./cloudstorage-emulator-container"; -const IMAGE = "fsouza/fake-gcs-server:1.52.2"; +const IMAGE = getImage(__dirname, 1); async function getRequestBodyFromReadableStream(stream: ReadableStream): Promise { const decoder = new TextDecoder(); diff --git a/packages/modules/gcloud/src/datastore-emulator-container.test.ts b/packages/modules/gcloud/src/datastore-emulator-container.test.ts index 48de3db2a..d3c03c1b0 100644 --- a/packages/modules/gcloud/src/datastore-emulator-container.test.ts +++ b/packages/modules/gcloud/src/datastore-emulator-container.test.ts @@ -1,7 +1,8 @@ import { Datastore } from "@google-cloud/datastore"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { DatastoreEmulatorContainer, StartedDatastoreEmulatorContainer } from "./datastore-emulator-container"; -const IMAGE = "gcr.io/google.com/cloudsdktool/cloud-sdk:517.0.0-emulators"; +const IMAGE = getImage(__dirname); describe("DatastoreEmulatorContainer", { timeout: 240_000 }, () => { // datastore4 { diff --git a/packages/modules/gcloud/src/firestore-emulator-container.test.ts b/packages/modules/gcloud/src/firestore-emulator-container.test.ts index 3aedf5392..6f8796c60 100644 --- a/packages/modules/gcloud/src/firestore-emulator-container.test.ts +++ b/packages/modules/gcloud/src/firestore-emulator-container.test.ts @@ -1,7 +1,8 @@ import admin from "firebase-admin"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { FirestoreEmulatorContainer, StartedFirestoreEmulatorContainer } from "./firestore-emulator-container"; -const IMAGE = "gcr.io/google.com/cloudsdktool/cloud-sdk:517.0.0-emulators"; +const IMAGE = getImage(__dirname); describe("FirestoreEmulatorContainer", { timeout: 240_000 }, () => { afterEach(async () => { diff --git a/packages/modules/gcloud/src/pubsub-emulator-container.test.ts b/packages/modules/gcloud/src/pubsub-emulator-container.test.ts index e53507431..2d3fcb67f 100644 --- a/packages/modules/gcloud/src/pubsub-emulator-container.test.ts +++ b/packages/modules/gcloud/src/pubsub-emulator-container.test.ts @@ -1,7 +1,8 @@ import { PubSub } from "@google-cloud/pubsub"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PubSubEmulatorContainer, StartedPubSubEmulatorContainer } from "./pubsub-emulator-container"; -const IMAGE = "gcr.io/google.com/cloudsdktool/google-cloud-cli:517.0.0-emulators"; +const IMAGE = getImage(__dirname); describe("PubSubEmulatorContainer", { timeout: 240_000 }, () => { it("should work using default version", async () => { diff --git a/packages/modules/hivemq/Dockerfile b/packages/modules/hivemq/Dockerfile new file mode 100644 index 000000000..22df0a970 --- /dev/null +++ b/packages/modules/hivemq/Dockerfile @@ -0,0 +1 @@ +FROM hivemq/hivemq-ce:2023.5 diff --git a/packages/modules/hivemq/src/hivemq-container.test.ts b/packages/modules/hivemq/src/hivemq-container.test.ts index 65860cb19..b88c63f8b 100644 --- a/packages/modules/hivemq/src/hivemq-container.test.ts +++ b/packages/modules/hivemq/src/hivemq-container.test.ts @@ -1,8 +1,8 @@ import mqtt from "mqtt"; import { expect } from "vitest"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { HiveMQContainer } from "./hivemq-container"; - -const IMAGE = "hivemq/hivemq-ce:2023.5"; +const IMAGE = getImage(__dirname); describe("HiveMQContainer", { timeout: 240_000 }, () => { // connect { diff --git a/packages/modules/k3s/Dockerfile b/packages/modules/k3s/Dockerfile new file mode 100644 index 000000000..8607a0b97 --- /dev/null +++ b/packages/modules/k3s/Dockerfile @@ -0,0 +1 @@ +FROM rancher/k3s:v1.31.2-k3s1 diff --git a/packages/modules/kafka/Dockerfile b/packages/modules/kafka/Dockerfile new file mode 100644 index 000000000..595d60366 --- /dev/null +++ b/packages/modules/kafka/Dockerfile @@ -0,0 +1 @@ +FROM confluentinc/cp-kafka:7.2.2 diff --git a/packages/modules/kafka/src/kafka-container.test.ts b/packages/modules/kafka/src/kafka-container.test.ts index 39c886578..658b6c1d4 100644 --- a/packages/modules/kafka/src/kafka-container.test.ts +++ b/packages/modules/kafka/src/kafka-container.test.ts @@ -2,9 +2,10 @@ import fs from "fs"; import { Kafka, KafkaConfig, logLevel } from "kafkajs"; import path from "path"; import { GenericContainer, Network, StartedTestContainer } from "testcontainers"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { KafkaContainer } from "./kafka-container"; -const IMAGE = "confluentinc/cp-kafka:7.2.2"; +const IMAGE = getImage(__dirname); describe("KafkaContainer", { timeout: 240_000 }, () => { // connectBuiltInZK { diff --git a/packages/modules/kurrentdb/Dockerfile b/packages/modules/kurrentdb/Dockerfile new file mode 100644 index 000000000..d9d4f0007 --- /dev/null +++ b/packages/modules/kurrentdb/Dockerfile @@ -0,0 +1 @@ +FROM kurrentplatform/kurrentdb:25.0 diff --git a/packages/modules/kurrentdb/src/kurrentdb-container.test.ts b/packages/modules/kurrentdb/src/kurrentdb-container.test.ts index 0fff3c557..f8cf0d10a 100644 --- a/packages/modules/kurrentdb/src/kurrentdb-container.test.ts +++ b/packages/modules/kurrentdb/src/kurrentdb-container.test.ts @@ -1,7 +1,8 @@ import { KurrentDBClient, StreamSubscription } from "@kurrent/kurrentdb-client"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { KurrentDbContainer } from "./kurrentdb-container"; -const IMAGE = "kurrentplatform/kurrentdb:25.0"; +const IMAGE = getImage(__dirname); describe("KurrentDbContainer", { timeout: 240_000 }, () => { // startContainer { diff --git a/packages/modules/localstack/Dockerfile b/packages/modules/localstack/Dockerfile new file mode 100644 index 000000000..0b46b528c --- /dev/null +++ b/packages/modules/localstack/Dockerfile @@ -0,0 +1 @@ +FROM localstack/localstack:2.2.0 diff --git a/packages/modules/localstack/src/localstack-container.test.ts b/packages/modules/localstack/src/localstack-container.test.ts index 0968e6e48..69d9e5837 100644 --- a/packages/modules/localstack/src/localstack-container.test.ts +++ b/packages/modules/localstack/src/localstack-container.test.ts @@ -1,8 +1,9 @@ import { CreateBucketCommand, HeadBucketCommand, S3Client } from "@aws-sdk/client-s3"; import { GenericContainer, LABEL_TESTCONTAINERS_SESSION_ID, log, Network, StartedTestContainer } from "testcontainers"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { LOCALSTACK_PORT, LocalstackContainer } from "./localstack-container"; -const IMAGE = "localstack/localstack:2.2.0"; +const IMAGE = getImage(__dirname); const runAwsCliAgainstDockerNetworkContainer = async ( command: string, diff --git a/packages/modules/mariadb/Dockerfile b/packages/modules/mariadb/Dockerfile new file mode 100644 index 000000000..c7b504ef2 --- /dev/null +++ b/packages/modules/mariadb/Dockerfile @@ -0,0 +1 @@ +FROM mariadb:11.5.2 diff --git a/packages/modules/mariadb/src/mariadb-container.test.ts b/packages/modules/mariadb/src/mariadb-container.test.ts index 6b53eb605..21078a817 100644 --- a/packages/modules/mariadb/src/mariadb-container.test.ts +++ b/packages/modules/mariadb/src/mariadb-container.test.ts @@ -1,7 +1,8 @@ import mariadb from "mariadb"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MariaDbContainer } from "./mariadb-container"; -const IMAGE = "mariadb:11.5.2"; +const IMAGE = getImage(__dirname); describe("MariaDb", { timeout: 240_000 }, () => { // connect { diff --git a/packages/modules/minio/Dockerfile b/packages/modules/minio/Dockerfile new file mode 100644 index 000000000..57b24ba5d --- /dev/null +++ b/packages/modules/minio/Dockerfile @@ -0,0 +1 @@ +FROM minio/minio:RELEASE.2024-12-13T22-19-12Z diff --git a/packages/modules/minio/src/minio-container.test.ts b/packages/modules/minio/src/minio-container.test.ts index 9b36df195..b636a444e 100644 --- a/packages/modules/minio/src/minio-container.test.ts +++ b/packages/modules/minio/src/minio-container.test.ts @@ -1,7 +1,8 @@ import * as minio from "minio"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MinioContainer } from "./minio-container"; -const IMAGE = "minio/minio:RELEASE.2024-12-13T22-19-12Z"; +const IMAGE = getImage(__dirname); describe("MinIO", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { diff --git a/packages/modules/mockserver/Dockerfile b/packages/modules/mockserver/Dockerfile new file mode 100644 index 000000000..b33ecc065 --- /dev/null +++ b/packages/modules/mockserver/Dockerfile @@ -0,0 +1 @@ +FROM mockserver/mockserver:5.15.0 diff --git a/packages/modules/mockserver/src/mockserver-container.test.ts b/packages/modules/mockserver/src/mockserver-container.test.ts index fd31ec01f..a379b95a9 100644 --- a/packages/modules/mockserver/src/mockserver-container.test.ts +++ b/packages/modules/mockserver/src/mockserver-container.test.ts @@ -1,8 +1,9 @@ import { mockServerClient } from "mockserver-client"; import superagent from "superagent"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MockserverContainer } from "./mockserver-container"; -const IMAGE = "mockserver/mockserver:5.15.0"; +const IMAGE = getImage(__dirname); describe("MockserverContainer", { timeout: 240_000 }, () => { // startContainer { diff --git a/packages/modules/mongodb/Dockerfile b/packages/modules/mongodb/Dockerfile new file mode 100644 index 000000000..1670b8066 --- /dev/null +++ b/packages/modules/mongodb/Dockerfile @@ -0,0 +1 @@ +FROM mongo:4.0.1 diff --git a/packages/modules/mongodb/src/mongodb-container.test.ts b/packages/modules/mongodb/src/mongodb-container.test.ts index da3df698f..b038a64dd 100644 --- a/packages/modules/mongodb/src/mongodb-container.test.ts +++ b/packages/modules/mongodb/src/mongodb-container.test.ts @@ -1,7 +1,8 @@ import mongoose from "mongoose"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MongoDBContainer } from "./mongodb-container"; -const IMAGE = "mongo:4.0.1"; +const IMAGE = getImage(__dirname); describe("MongodbContainer", { timeout: 240_000 }, () => { // connect4 { diff --git a/packages/modules/mssqlserver/Dockerfile b/packages/modules/mssqlserver/Dockerfile new file mode 100644 index 000000000..19d735d48 --- /dev/null +++ b/packages/modules/mssqlserver/Dockerfile @@ -0,0 +1 @@ +FROM mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04 diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 2da637b39..813493854 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -1,7 +1,8 @@ import sql, { config } from "mssql"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MSSQLServerContainer } from "./mssqlserver-container"; -const IMAGE = "mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04"; +const IMAGE = getImage(__dirname); describe("MSSqlServerContainer", { timeout: 180_000 }, () => { // connect { diff --git a/packages/modules/mysql/Dockerfile b/packages/modules/mysql/Dockerfile new file mode 100644 index 000000000..cf7d17f9f --- /dev/null +++ b/packages/modules/mysql/Dockerfile @@ -0,0 +1 @@ +FROM mysql:8.0.31 diff --git a/packages/modules/mysql/src/mysql-container.test.ts b/packages/modules/mysql/src/mysql-container.test.ts index 3ff3b9fc0..cc6b80484 100644 --- a/packages/modules/mysql/src/mysql-container.test.ts +++ b/packages/modules/mysql/src/mysql-container.test.ts @@ -1,7 +1,8 @@ import { createConnection } from "mysql2/promise"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MySqlContainer } from "./mysql-container"; -const IMAGE = "mysql:8.0.31"; +const IMAGE = getImage(__dirname); describe("MySqlContainer", { timeout: 240_000 }, () => { // connect { diff --git a/packages/modules/nats/Dockerfile b/packages/modules/nats/Dockerfile new file mode 100644 index 000000000..a9b07b60a --- /dev/null +++ b/packages/modules/nats/Dockerfile @@ -0,0 +1 @@ +FROM nats:2.8.4-alpine diff --git a/packages/modules/nats/src/nats-container.test.ts b/packages/modules/nats/src/nats-container.test.ts index b5686113c..ef73b2a5a 100644 --- a/packages/modules/nats/src/nats-container.test.ts +++ b/packages/modules/nats/src/nats-container.test.ts @@ -1,8 +1,9 @@ import { jetstreamManager } from "@nats-io/jetstream"; import { connect } from "@nats-io/transport-node"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { NatsContainer } from "./nats-container"; -const IMAGE = "nats:2.8.4-alpine"; +const IMAGE = getImage(__dirname); describe("NatsContainer", { timeout: 180_000 }, () => { // connect { diff --git a/packages/modules/neo4j/Dockerfile b/packages/modules/neo4j/Dockerfile new file mode 100644 index 000000000..237faf0b9 --- /dev/null +++ b/packages/modules/neo4j/Dockerfile @@ -0,0 +1 @@ +FROM neo4j:4.4.12 diff --git a/packages/modules/neo4j/src/neo4j-container.test.ts b/packages/modules/neo4j/src/neo4j-container.test.ts index 7da604b53..63d6894c4 100755 --- a/packages/modules/neo4j/src/neo4j-container.test.ts +++ b/packages/modules/neo4j/src/neo4j-container.test.ts @@ -1,7 +1,8 @@ import neo4j from "neo4j-driver"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { Neo4jContainer, Neo4jPlugin } from "./neo4j-container"; -const IMAGE = "neo4j:4.4.12"; +const IMAGE = getImage(__dirname); describe("Neo4jContainer", { timeout: 180_000 }, () => { // createNode { diff --git a/packages/modules/ollama/Dockerfile b/packages/modules/ollama/Dockerfile new file mode 100644 index 000000000..a5e8dd75d --- /dev/null +++ b/packages/modules/ollama/Dockerfile @@ -0,0 +1 @@ +FROM ollama/ollama:0.1.44 diff --git a/packages/modules/ollama/src/ollama-container.test.ts b/packages/modules/ollama/src/ollama-container.test.ts index 6ff7d6baa..67670b963 100644 --- a/packages/modules/ollama/src/ollama-container.test.ts +++ b/packages/modules/ollama/src/ollama-container.test.ts @@ -1,6 +1,7 @@ +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { OllamaContainer } from "./ollama-container"; -const IMAGE = "ollama/ollama:0.1.44"; +const IMAGE = getImage(__dirname); describe("OllamaContainer", { timeout: 180_000 }, () => { it("should run ollama with default config", async () => { diff --git a/packages/modules/postgresql/Dockerfile b/packages/modules/postgresql/Dockerfile new file mode 100644 index 000000000..ad09aabce --- /dev/null +++ b/packages/modules/postgresql/Dockerfile @@ -0,0 +1 @@ +FROM postgres:13.3-alpine diff --git a/packages/modules/postgresql/src/pgvector-container.test.ts b/packages/modules/postgresql/src/pgvector-container.test.ts index c7c972961..9b3960fa4 100644 --- a/packages/modules/postgresql/src/pgvector-container.test.ts +++ b/packages/modules/postgresql/src/pgvector-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PostgreSqlContainer } from "./postgresql-container"; -const IMAGE = "pgvector/pgvector:pg16"; +const IMAGE = getImage(__dirname); describe("PgvectorContainer", { timeout: 180_000 }, () => { it("should work", async () => { diff --git a/packages/modules/postgresql/src/postgis-container.test.ts b/packages/modules/postgresql/src/postgis-container.test.ts index db86cbcac..8b40e5a7e 100644 --- a/packages/modules/postgresql/src/postgis-container.test.ts +++ b/packages/modules/postgresql/src/postgis-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PostgreSqlContainer } from "./postgresql-container"; -const IMAGE = "postgis/postgis:16-3.4"; +const IMAGE = getImage(__dirname); describe("PostgisContainer", { timeout: 180_000 }, () => { it("should work", async () => { diff --git a/packages/modules/postgresql/src/postgresql-container-snapshot.test.ts b/packages/modules/postgresql/src/postgresql-container-snapshot.test.ts index a1e2b309d..4636c7c03 100644 --- a/packages/modules/postgresql/src/postgresql-container-snapshot.test.ts +++ b/packages/modules/postgresql/src/postgresql-container-snapshot.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PostgreSqlContainer } from "./postgresql-container"; -const IMAGE = "postgres:13.3-alpine"; +const IMAGE = getImage(__dirname); describe("PostgreSqlContainer snapshot and restore", { timeout: 180_000 }, () => { // createAndRestoreFromSnapshot { diff --git a/packages/modules/postgresql/src/postgresql-container.test.ts b/packages/modules/postgresql/src/postgresql-container.test.ts index c1cd9e258..826324e56 100644 --- a/packages/modules/postgresql/src/postgresql-container.test.ts +++ b/packages/modules/postgresql/src/postgresql-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PostgreSqlContainer } from "./postgresql-container"; -const IMAGE = "postgres:13.3-alpine"; +const IMAGE = getImage(__dirname); describe("PostgreSqlContainer", { timeout: 180_000 }, () => { // connect { diff --git a/packages/modules/postgresql/src/timescale-container.test.ts b/packages/modules/postgresql/src/timescale-container.test.ts index c66a4ba15..988115a2b 100644 --- a/packages/modules/postgresql/src/timescale-container.test.ts +++ b/packages/modules/postgresql/src/timescale-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "pg"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { PostgreSqlContainer } from "./postgresql-container"; -const IMAGE = "timescale/timescaledb:2.1.0-pg11"; +const IMAGE = getImage(__dirname); describe("TimescaleContainer", { timeout: 180_000 }, () => { it("should work", async () => { diff --git a/packages/modules/qdrant/Dockerfile b/packages/modules/qdrant/Dockerfile new file mode 100644 index 000000000..f454bfec0 --- /dev/null +++ b/packages/modules/qdrant/Dockerfile @@ -0,0 +1 @@ +FROM qdrant/qdrant:v1.13.4 diff --git a/packages/modules/qdrant/src/qdrant-container.test.ts b/packages/modules/qdrant/src/qdrant-container.test.ts index 34c6d5a10..0908b5ee5 100644 --- a/packages/modules/qdrant/src/qdrant-container.test.ts +++ b/packages/modules/qdrant/src/qdrant-container.test.ts @@ -1,9 +1,10 @@ import { QdrantClient } from "@qdrant/js-client-rest"; import crypto from "crypto"; import path from "path"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { QdrantContainer } from "./qdrant-container"; -const IMAGE = "qdrant/qdrant:v1.13.4"; +const IMAGE = getImage(__dirname); describe("QdrantContainer", { timeout: 100_000 }, () => { // connectQdrantSimple { diff --git a/packages/modules/rabbitmq/Dockerfile b/packages/modules/rabbitmq/Dockerfile new file mode 100644 index 000000000..6ddc90357 --- /dev/null +++ b/packages/modules/rabbitmq/Dockerfile @@ -0,0 +1 @@ +FROM rabbitmq:3.12.11-management-alpine diff --git a/packages/modules/rabbitmq/src/rabbitmq-container.test.ts b/packages/modules/rabbitmq/src/rabbitmq-container.test.ts index 371691f10..51048cc23 100644 --- a/packages/modules/rabbitmq/src/rabbitmq-container.test.ts +++ b/packages/modules/rabbitmq/src/rabbitmq-container.test.ts @@ -1,7 +1,8 @@ import amqp from "amqplib"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { RabbitMQContainer } from "./rabbitmq-container"; -const IMAGE = "rabbitmq:3.12.11-management-alpine"; +const IMAGE = getImage(__dirname); describe("RabbitMQContainer", { timeout: 240_000 }, () => { // start { diff --git a/packages/modules/redis/Dockerfile b/packages/modules/redis/Dockerfile new file mode 100644 index 000000000..1c61a6e31 --- /dev/null +++ b/packages/modules/redis/Dockerfile @@ -0,0 +1 @@ +FROM redis:7.2 diff --git a/packages/modules/redis/src/redis-container.test.ts b/packages/modules/redis/src/redis-container.test.ts index ebe966b18..bb8df58a8 100644 --- a/packages/modules/redis/src/redis-container.test.ts +++ b/packages/modules/redis/src/redis-container.test.ts @@ -2,9 +2,10 @@ import fs from "fs"; import os from "os"; import path from "path"; import { createClient } from "redis"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { RedisContainer, StartedRedisContainer } from "./redis-container"; -const IMAGE = "redis:7.2"; +const IMAGE = getImage(__dirname); describe("RedisContainer", { timeout: 240_000 }, () => { // startContainer { diff --git a/packages/modules/redpanda/Dockerfile b/packages/modules/redpanda/Dockerfile new file mode 100644 index 000000000..ce089db54 --- /dev/null +++ b/packages/modules/redpanda/Dockerfile @@ -0,0 +1 @@ +FROM docker.redpanda.com/redpandadata/redpanda:v23.3.10 diff --git a/packages/modules/redpanda/src/redpanda-container.test.ts b/packages/modules/redpanda/src/redpanda-container.test.ts index 7c1b6a292..ab0621980 100644 --- a/packages/modules/redpanda/src/redpanda-container.test.ts +++ b/packages/modules/redpanda/src/redpanda-container.test.ts @@ -1,7 +1,7 @@ import { Kafka, KafkaConfig, logLevel } from "kafkajs"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { RedpandaContainer, StartedRedpandaContainer } from "./redpanda-container"; - -const IMAGE = "docker.redpanda.com/redpandadata/redpanda:v23.3.10"; +const IMAGE = getImage(__dirname); describe("RedpandaContainer", { timeout: 240_000 }, () => { // connectToKafka { diff --git a/packages/modules/scylladb/Dockerfile b/packages/modules/scylladb/Dockerfile new file mode 100644 index 000000000..3244e3834 --- /dev/null +++ b/packages/modules/scylladb/Dockerfile @@ -0,0 +1 @@ +FROM scylladb/scylla:6.2.0 diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index 1b403cee0..0b9d177f7 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -1,7 +1,8 @@ import { Client } from "cassandra-driver"; // Scylla uses Cassandra's driver in Node.js +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ScyllaContainer } from "./scylladb-container"; -const IMAGE = "scylladb/scylla:6.2.0"; +const IMAGE = getImage(__dirname); describe("ScyllaDB", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { diff --git a/packages/modules/selenium/Dockerfile b/packages/modules/selenium/Dockerfile new file mode 100644 index 000000000..712c57b46 --- /dev/null +++ b/packages/modules/selenium/Dockerfile @@ -0,0 +1 @@ +FROM selenium/standalone-chrome:112.0 diff --git a/packages/modules/toxiproxy/Dockerfile b/packages/modules/toxiproxy/Dockerfile new file mode 100644 index 000000000..90cbc632e --- /dev/null +++ b/packages/modules/toxiproxy/Dockerfile @@ -0,0 +1 @@ +FROM ghcr.io/shopify/toxiproxy:2.11.0 diff --git a/packages/modules/toxiproxy/src/toxiproxy-container.test.ts b/packages/modules/toxiproxy/src/toxiproxy-container.test.ts index 01ea6f4d2..f63f79691 100644 --- a/packages/modules/toxiproxy/src/toxiproxy-container.test.ts +++ b/packages/modules/toxiproxy/src/toxiproxy-container.test.ts @@ -1,8 +1,9 @@ import { createClient } from "redis"; import { GenericContainer, Network } from "testcontainers"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ToxiProxyContainer, TPClient } from "./toxiproxy-container"; -const IMAGE = "ghcr.io/shopify/toxiproxy:2.11.0"; +const IMAGE = getImage(__dirname); describe("ToxiProxyContainer", { timeout: 240_000 }, () => { // Helper to connect to redis diff --git a/packages/modules/valkey/Dockerfile b/packages/modules/valkey/Dockerfile new file mode 100644 index 000000000..c687473f8 --- /dev/null +++ b/packages/modules/valkey/Dockerfile @@ -0,0 +1 @@ +FROM valkey/valkey:8.0 diff --git a/packages/modules/valkey/src/valkey-container.test.ts b/packages/modules/valkey/src/valkey-container.test.ts index e1d54f3f9..12e642d68 100644 --- a/packages/modules/valkey/src/valkey-container.test.ts +++ b/packages/modules/valkey/src/valkey-container.test.ts @@ -2,9 +2,10 @@ import fs from "fs"; import os from "os"; import path from "path"; import { createClient } from "redis"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { StartedValkeyContainer, ValkeyContainer } from "./valkey-container"; -const IMAGE = "valkey/valkey:8.0"; +const IMAGE = getImage(__dirname); describe("ValkeyContainer", { timeout: 240_000 }, () => { it("should connect and execute set-get", async () => { diff --git a/packages/modules/weaviate/Dockerfile b/packages/modules/weaviate/Dockerfile new file mode 100644 index 000000000..1f4d0ad7a --- /dev/null +++ b/packages/modules/weaviate/Dockerfile @@ -0,0 +1 @@ +FROM semitechnologies/weaviate:1.24.5 diff --git a/packages/modules/weaviate/src/weaviate-container.test.ts b/packages/modules/weaviate/src/weaviate-container.test.ts index 23cbde5ba..1e31ffcad 100644 --- a/packages/modules/weaviate/src/weaviate-container.test.ts +++ b/packages/modules/weaviate/src/weaviate-container.test.ts @@ -1,8 +1,9 @@ import { Environment } from "testcontainers/src/types"; import weaviate from "weaviate-ts-client"; +import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { WeaviateContainer } from "./weaviate-container"; -const IMAGE = "semitechnologies/weaviate:1.24.5"; +const IMAGE = getImage(__dirname); describe("WeaviateContainer", { timeout: 100_000 }, () => { // connectWeaviate { diff --git a/packages/testcontainers/src/utils/test-helper.ts b/packages/testcontainers/src/utils/test-helper.ts index 82592c981..f3a4ae3cf 100644 --- a/packages/testcontainers/src/utils/test-helper.ts +++ b/packages/testcontainers/src/utils/test-helper.ts @@ -1,5 +1,7 @@ import { GetEventsOptions, ImageInspectInfo } from "dockerode"; import { createServer, Server } from "http"; +import fs from "node:fs"; +import path from "node:path"; import { Readable } from "stream"; import { Agent, request } from "undici"; import { IntervalRetry } from "../common"; @@ -8,6 +10,13 @@ import { StartedDockerComposeEnvironment } from "../docker-compose-environment/s import { GenericContainer } from "../generic-container/generic-container"; import { StartedTestContainer } from "../test-container"; +export const getImage = (dirname: string, index = 0): string => { + return fs + .readFileSync(path.resolve(dirname, "..", "Dockerfile"), "utf-8") + .split("\n") + [index].split(" ")[1]; +}; + export const checkContainerIsHealthy = async (container: StartedTestContainer): Promise => { const url = `http://${container.getHost()}:${container.getMappedPort(8080)}`; const response = await fetch(`${url}/hello-world`);