testcontainers/testcontainers-dotnet
A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.
π₯ β οΈ Breaking Changes
- chore(deps): Bump Docker.DotNet from 3.131.1 to 4.0.2 (#1665) @HofmeisterAn
β¨ π Features
- feat: Add Floci module (#1690) @object
- feat: Ignore port-forwarding extra host in reuse hash (#1689) @HofmeisterAn
- feat: Allow devs to override the reuse hash calculation (#1688) @HofmeisterAn
- feat: Add connect to network API (#1672) @HofmeisterAn
- feat(LocalStack): Require auth token for 4.15 and onwards (#1667) @HofmeisterAn
- chore(deps): Bump Docker.DotNet from 3.131.1 to 4.0.2 (#1665) @HofmeisterAn
π π Bug Fixes
- fix: Trim tar record padding to avoid broken-pipe failure on Podman (#1684) @artiomchi
- fix(Nats): Use healthz API for readiness probe (#1679) @eriblo01
- fix: Remove KeepAlive socket option (#1671) @Angelinsky7
π π Documentation
- docs: Extend WithCommand(params string[]) documentation (#1685) @HofmeisterAn
π¦ π§Ή Housekeeping
- feat: Prepare next release cycle (4.12.0) (#1664) @HofmeisterAn
π¦ π¦ Dependency Updates
- chore(deps): Bump the actions group with 5 updates (#1687) @[dependabot[bot]](https://github.com/apps/dependabot)
- chore(deps): Bump Docker.DotNet from 4.1.0 to 4.2.0 (#1686) @HofmeisterAn
- chore(deps): Bump the actions group with 5 updates (#1676) @[dependabot[bot]](https://github.com/apps/dependabot)
- chore(deps): Bump Docker.DotNet from 4.0.2 to 4.1.0 (#1674) @HofmeisterAn
- chore(deps): Bump Docker.DotNet from 3.131.1 to 4.0.2 (#1665) @HofmeisterAn
π₯ β οΈ Breaking Changes
- feat(CosmosDb): Update base image from latest to vnext-preview (#1324) @NelsonBN
β¨ π Features
- feat(CosmosDb): Update base image from latest to vnext-preview (#1324) @NelsonBN
- feat: Add typed WithResourceMapping(...) overloads (#1497) @cimnine
- feat: Add Seq module (#1276) @montanehamilton
- feat(PostgreSql): Add WithSsl builder API (#1529) @ozkanpakdil
- feat: Add Temporal module (#1635) @bgener
- feat: Add module connection string provider (#1632) @HofmeisterAn
- fead: Add default container connection string provider (#1630) @HofmeisterAn
- feat(ServiceBus): Add method to get HTTP connection string (#1622) @NelsonBN
π π Bug Fixes
- fix(MongoDb): Wait for post-init startup readiness before replica set initiation (#1656) @HofmeisterAn
- fix(Seq): Assert connection string provider (#1645) @HofmeisterAn
- fix(EventHubs): Ignore runtime property to support reuse (#1644) @franciscosamuel
- fix(ServiceBus): Ignore runtime property to support reuse (#1643) @franciscosamuel
- fix(ResourceReaper): Set wait strategy (#1634) @HofmeisterAn
- fix(ServiceBus): Workaround health API timeout (#1625) @HofmeisterAn
- fix: Do not set console buffer width (ConsoleLogger) (#1623) @HofmeisterAn
- fix(EventHubs): Workaround health API timeout (#1624) @HofmeisterAn
π π Documentation
- docs(CosmosDb): Replace unsupported tag 'latest' with 'vnext-preview' (#1660) @HofmeisterAn
- docs(Redis): Add example (#1641) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore(examples): Enable NuGet restore lock mode (#1659) @HofmeisterAn
- chore: Pin image digest (#1658) @HofmeisterAn
- fix: Run OpenSSF Scorecard only on default branch (#1657) @HofmeisterAn
- chore: Remove Git LFS tracking for .snk (#1655) @HofmeisterAn
- feat: Enable Dependabot for NuGet (repo) (#1654) @HofmeisterAn
- feat: Enable Dependabot for NuGet (src) (#1653) @HofmeisterAn
- fix: Replace branch protection with ruleset (#1652) @HofmeisterAn
- fix: Do not enforce policies for admins (#1651) @HofmeisterAn
- + 6 more
π¦ π¦ Dependency Updates
- chore(deps): Bump Elastic.Clients.Elasticsearch from 8.16.3 to 8.19.15 (#1647) @flobernd
π₯ β οΈ Breaking Changes
- feat: Add Docker Engine v29 support (#1609) @HofmeisterAn
- chore: Remove EventStoreDb module (#1599) @HofmeisterAn
β¨ π Features
- feat: Require explicit container image in Testcontainers.Xunit (#1612) @0xced
- feat: Add Platform property to IImage interface (#1610) @HofmeisterAn
- feat: Add Docker Engine v29 support (#1609) @HofmeisterAn
- feat: Require explicit container image when creating container builder (#1584) @digital88
- feat: Add connection string provider (#1588) @HofmeisterAn
π π Bug Fixes
- fix(Kafka): Bump image version to prevent container crash on startup (#1604) @HofmeisterAn
- fix(Elasticsearch): Use HTTP wait strategy (#1593) @digital88
- fix(Milvus): Use healthcheck wait strategy (#1585) @verdie-g
π π Documentation
- docs: Pin the image version explicitly (#1605) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Remove Sonar findings (#1611) @HofmeisterAn
- chore: Pin Docker Engine API for GH workflow to 1.47 (#1608) @HofmeisterAn
- chore: Set remaining container image explicit (#1606) @digital88
- fix(Kafka): Bump image version to prevent container crash on startup (#1604) @HofmeisterAn
- chore: Remove EventStoreDb test project from SLNX file (#1603) @0xced
- chore: Skip unnecessary work for empty or null sequences (#1601) @HofmeisterAn
- chore: Delegate container builder ctor string to IImage (#1600) @HofmeisterAn
- chore: Remove EventStoreDb module (#1599) @HofmeisterAn
- + 1 more
π₯ β οΈ Breaking Changes
- feat: Add KurrentDb module (#1583) @diegosasw
β¨ π Features
- feat: Add KurrentDb module (#1583) @diegosasw
- chore: Bump NuGet dependencies (#1578) @HofmeisterAn
- feat: Add .NET 10 support (#1572) @HofmeisterAn
- feat: Support configuring Docker API version (#1576) @HofmeisterAn
- feat: Add Mosquitto module (#1522) @EtherZa
- feat: Add Toxiproxy module (#1454) @iltertaha
- feat: Add Grafana module (#1509) @thomhurst
- feat: Add Playwright module (#1288) @alimahboubi
π π Bug Fixes
- fix(Milvus): Set DEPLOY_MODE=STANDALONE (necessary for v2.6+) (#1569) @verdie-g
- fix: Set Kusto wait strategy encoding to UTF-8 (#1567) @MattKotsenas
- fix: Split ALL_CHANGED_FILES on any whitespace (#1566) @HofmeisterAn
π π Documentation
- docs: Use correct comment characters for C# language (#1564) @HofmeisterAn
π¦ π§Ή Housekeeping
- feat: Add SLNX file (#1579) @HofmeisterAn
- chore: Update Toxiproxy NuGet dependency to a .NET compatible version (#1568) @HofmeisterAn
- chore: Add script to detect which tests to run in CI (#1563) @HofmeisterAn
- chore: Make the continuous delivery job fork-friendly (#1559) @0xced
- feat: Prepare next release cycle (4.9.0) (#1561) @HofmeisterAn
π π Bug Fixes
- fix: Compute correct relative Dockerfile file path (#1558) @HofmeisterAn
π₯ β οΈ Breaking Changes
- fix: Generate consistent reuse hashes by sorting dictionary keys (#1554) @0xced
- feat: Throw if container not running (#1550) @HofmeisterAn
- feat: Add startup callback overload with configuration type (#1547) @HofmeisterAn
- feat: Support UID/GID when copying files (#1531) @HofmeisterAn
β¨ π Features
- feat: Throw if container not running (#1550) @HofmeisterAn
- feat: Add startup callback overload with configuration type (#1547) @HofmeisterAn
- feat: Add Docker build context (#1536) @HofmeisterAn
- feat: Add `WithTarget(string)` to image builder (#1534) @HofmeisterAn
- feat: Resolve Dockerfile ARGs pulling base images (#1532) @HofmeisterAn
- feat: Support UID/GID when copying files (#1531) @HofmeisterAn
- feat(Keycloak): Add API to import a realm configuration file (#1526) @VladislavAntonyuk
π π Bug Fixes
- fix: Generate consistent reuse hashes by sorting dictionary keys (#1554) @0xced
- fix(MongoDb): Use `db.runCommand({hello:1})` do detect readiness (#1548) @HofmeisterAn
- fix(Papercut): Pin version 7.0 and set new HTTP and SMTP ports (#1549) @HofmeisterAn
- fix(Pulsar): Wait for default namespace (#1539) @HofmeisterAn
- fix(Keycloak): Wait until user created (#1535) @HofmeisterAn
π π Documentation
- docs: Remove obsolete UntilOperationIsSucceeded wait strategy example (#1551) @ascott18
- docs: Fix link to Ryuk in `IContainerBuilder.WithAutoRemove` code comment (#1546) @hojmark
π¦ π§Ή Housekeeping
- chore: Don't create a static field in a generic class (#1555) @HofmeisterAn
- chore: Add test certificates to common project (#1545) @HofmeisterAn
- chore: Update CI workflow to ubuntu-24.04 (#1544) @HofmeisterAn
- chore: Collect test projects at CI runtime (#1543) @HofmeisterAn
- chore: Fix grammar (#1542) @Smoothengineer
- chore: Bump Ryuk (#1537) @HofmeisterAn
- chore: Remove obsolete wait strategy: `UntilPortIsAvailable(int)` (#1528) @HofmeisterAn
- feat: Prepare next release cycle (4.8.0) (#1523) @HofmeisterAn
π₯ β οΈ Breaking Changes
- feat(Kafka): Add KRaft support (#1353) @SukharevAndrey
- feat: Add ability to override enumerable builder values (#1506) @HofmeisterAn
β¨ π Features
- feat: Add wait strategy to check external (TCP) port availability (#1495) @WhiteTomX
- feat(Kafka): Add KRaft support (#1353) @SukharevAndrey
- feat: Relax Base64 auth provider and ignore path segments in Docker registry URLs (#1516) @HofmeisterAn
- feat: Add ability to override enumerable builder values (#1506) @HofmeisterAn
- feat(Elasticsearch): Return HTTP connection string if security is disabled (#1494) @HofmeisterAn
- fix: Add tooling to inherit XML docs (#1493) @HofmeisterAn
- feat: Resolve `.slnx` (solution) file in common directory paths (#1492) @alexander-jesner-AP
- feat: Support getting all mapped ports (#1485) @HofmeisterAn
- + 1 more
π π Bug Fixes
- feat(Kafka): Add KRaft support (#1353) @SukharevAndrey
- fix: Send valid HTTP test responses (#1505) @HofmeisterAn
- fix: Use null-conditional operator to access FinishedAt (#1499) @HofmeisterAn
- fix: Remove timeout that kills PID 1 when stopping a container (#1481) @HofmeisterAn
- fix(Pulsar): Wait until the consumer becomes connected (#1467) @HofmeisterAn
- fix(ServiceBus): Remove container lifecycle overrides (#1465) @HofmeisterAn
π π Documentation
- docs: Explain how to substitute the Docker Hub registry (#1503) @HofmeisterAn
- docs: Extend example copying files to a container (#1487) @cimnine
π¦ π§Ή Housekeeping
- chore: Change Kafka vendor configuration from class to interface (#1519) @HofmeisterAn
- chore: Bump Docker.DotNet version to 3.128.5 (#1511) @HofmeisterAn
- chore: Build a single project instead of the whole solution (#1502) @HofmeisterAn
π π Bug Fixes
- chore: Bump Docker.DotNet version to 3.128.3 (#1462) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Bump Docker.DotNet version to 3.128.3 (#1462) @HofmeisterAn
β¨ π Features
- feat: Add OpenSearch module (#1395) @digital88
- feat: Add Typesense module (#1446) @brainded
- feat: Add `Task<ExecResult>` extension method `ThrowOnFailure` (#1448) @HofmeisterAn
- feat: Throw `DockerUnavailableException` when Docker is not available (#1308) @0xced
- feat: Improve error reporting when loading the Docker configuration file (#1263) @0xced
- feat: Add a wait strategy that waits until the ADO.NET database is available (#1401) @0xced
- feat: Add Ollama module (#1099) @frankhaugen
- feat: Allow canceling container start in xUnit.net v3 fixtures (#1431) @TheConstructor
- + 3 more
π π Bug Fixes
- fix: Set container created, started, stopped time from inspect response (#1455) @HofmeisterAn
- fix(EventHubs): Change predicate that it does not always evaluate to true (#1433) @HofmeisterAn
- fix(EventHubs): Support default consumer group name (#1432) @scrocquesel-ml150
π π Documentation
- docs(ClickHouse): Add example (#1421) @digital88
- docs: Mention the xUnit.net v3 module (package) (#1442) @TheConstructor
π¦ π§Ή Housekeeping
- chore: Add ExecResult serializable test data (#1456) @HofmeisterAn
- chore: Remove Sonar findings (#1450) @HofmeisterAn
- chore: Replace Cake .NET Tool with Cake Frosting (#1437) @0xced
- chore: Update test-framework to xUnit.net v3 (#1441) @TheConstructor
- chore: Bump Docker.DotNet version to `3.128.1` (#1443) @HofmeisterAn
- chore: Add xUnit.net v3 tests (#1430) @TheConstructor
- chore: Bump CI .NET SDK and Cake version (#1434) @HofmeisterAn
β¨ π Features
- feat: Add Socat container implementation (#1416) @eddumelendez
- feat(Keycloak): Support admin bootstrapping for version 26 onwards (#1400) @paulomorgado
- feat: Add Qdrant module (#1149) @russcam
- feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#1398) @scrocquesel-ml150
- fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#1397) @kfarnung
π π Bug Fixes
- fix(Pulsar): Set memory limits (#1420) @HofmeisterAn
- fix: Add Docker Hub image name prefix to image builder API `WithName(IImage)` (#1413) @HofmeisterAn
- fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#1397) @kfarnung
- fix: Retrieve logs since `CreatedTime` for `UntilMessageIsLogged` wait strategy (#1384) @0xced
π π Documentation
- docs: Bump `testcontainers/helloworld` image in docs to version `1.2.0` (#1419) @VishnuJin
- docs(ActiveMq): Add example (#1415) @digital88
- docs: Add binding redirects doc for .NET framework (#1414) @HofmeisterAn
- docs: Add Bitbucket Pipelines configuration (#1402) @boeckie-xenopz
- docs(EventHubs, ServiceBus): Add example (#1396) @HofmeisterAn
- docs(Cassandra): Add example (#1382) @gavindekock
π¦ π§Ή Housekeeping
- fix(Pulsar): Set memory limits (#1420) @HofmeisterAn
- chore: Add wrapper module for Google Cloud modules (#1411) @digital88
- chore: Use Docker Compose to host documentation locally (#1410) @digital88
- feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#1398) @scrocquesel-ml150
β¨ π Features
- feat: Add Apache Cassandra module (#1367) @gavindekock
- feat(Oracle): Add support for WithDatabase(string) for Oracle 18 and onwards (#1321) @0xced
- feat: Add EventHubs module (#1373) @HofmeisterAn
- feat: Add Db2 module (#1237) @kevin0x90
π π Bug Fixes
- fix(MongoDb): Evaluate replica set status in wait strategy (#1369) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Update examples implementations (#1379) @HofmeisterAn
- chore: Remove `SharedContainerInstance` and use `ContainerFixture` instead (#1378) @0xced
- chore: Remove code smells and bumpΒ dependencies (#1374) @HofmeisterAn
- chore: Add support for macOS in Testcontainers.Db2.Tests (#1371) @0xced
- chore: Add WithAcceptLicenseAgreement(bool) to container builder (#1370) @HofmeisterAn
- chore: Set PackageLicenseExpression property to MIT (#1368) @ax-meyer
β¨ π Features
- feat: Add SFTP module (#1362) @wim07101993
- feat(ServiceBus): Add support to use existing MSSQL container instances (#1335) @lgcmotta
- feat: Add Weaviate module (#1356) @roji
- fix(Pulsar): Support Apache Pulsar 4 (#1355) @entvex
- feat: Add network support to the Kafka container (#1316) @SebastienDegodez
- feat: Add pausing and unpausing container (#1315) @stefannikolei
- feat: Add NAT driver network configuration (#1328) @HofmeisterAn
π π Bug Fixes
- fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#1364) @RobotechUSA
- chore: Remove binding of ports to IPv4 only (#1363) @daviian
- feat: Add network support to the Kafka container (#1316) @SebastienDegodez
- fix: Load PKCS#12 correctly for mTLS on Windows in .NET 9 (#1320) @jvmdc
π¦ π§Ή Housekeeping
- fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#1364) @RobotechUSA
- chore: Remove binding of ports to IPv4 only (#1363) @daviian
- chore: Algin module configurations (#1357) @HofmeisterAn
- fix: Make Testcontainers.XunitV3 publishable (#1317) @0xced
β¨ π Features
- feat: Add Azure Service Bus module (#1309) @HofmeisterAn
- feat: Set ryuk.container.privileged default value to true (#1313) @HofmeisterAn
- feat: Remove `net6.0` and add `net9.0` TFM (#1311) @HofmeisterAn
- feat: Introduce a new Testcontainers.Xunit package (#1165) @0xced
π π Bug Fixes
- fix: Postpone exception in `DbContainerFixture` to match the behavior of `ContainerFixture` (#1310) @0xced
- fix: Do not pre-pull scratch image (#1304) @HofmeisterAn
- fix: Add HTTP wait strategy to prevent race-condition in WaitUntilHttpRequestIsSucceededTest (#1299) @HofmeisterAn
- fix: Add HTTP wait strategy to prevent race-condition in TarOutputMemoryStreamTest (#1297) @HofmeisterAn
- fix: Prepend Docker Hub namespace to repository (#1287) @HofmeisterAn
π π Documentation
- docs: Add low level API access (#1300) @HofmeisterAn
π¦ π§Ή Housekeeping
- feat: Add Respawn example (#1307) @HofmeisterAn
- chore: Add test to ensure that all test projects are configured for CI (#1305) @0xced
- chore: Run each test project on a separate runner (#1295) @HofmeisterAn
- chore: Replace Docker.DotNet with the Testcontainers organization's build (#1292) @HofmeisterAn
π₯ β οΈ Breaking Changes
- fix: Bump MSSQL image version, remove Azure SQL Edge ~~and Papercut~~ module (#1265) @HofmeisterAn
- feat: Align `IImage` properties with Docker DSL (#1256) @HofmeisterAn
β¨ π Features
- feat: Use `exec` to replace current shell with the Kafka process (as ENTRYPOINT) (#1282) @jasoncouture
- feat: Add getter for Azurite blob, queue and table endpoint (#1278) @pregress
- feat: Reintroduce Papercut module (#1268) @TechLiam
- feat: Add Neo4j Enterprise Edition support (`WithEnterpriseEdition(bool)`) (#1269) @Sossenbinder
- feat: Support digest in `IImage`, `DockerImage` and in the `WithImage(string)` implementation (#1249) @Kielek
- feat: Align `IImage` properties with Docker DSL (#1256) @HofmeisterAn
- feat: Change visibility of `AccountName` and `AccountKey` to public, move to `AzuriteBuilder` (#1258) @mikecole
- feat: Get Docker endpoint from Docker context (#1235) @0xced
π π Bug Fixes
- fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#1265) @HofmeisterAn
- fix: Throw exception if Docker resource does not exist instead of silently ignoring it (#1254) @0xced
π¦ π§Ή Housekeeping
- fix: Do not run reusable resource tests in parallel (#1267) @HofmeisterAn
β¨ π Features
- feat: Add MongoDB replica set support (#1196) @artiomchi
- feat: Detect CSharp, FSharp and Visual Basic projects (#1234) @HofmeisterAn
- feat: Improve parsing of Docker image tag version `MatchVersion(Predicate<Version>)` (#1231) @0xced
- feat: Log Docker daemon labels if present (#1226) @eddumelendez
π π Bug Fixes
- fix: Get sqlcmd utility file path from container instead of const file path (#1221) @outofrange-consulting
- fix: Add Keycloak health port 9000 starting from major version 25 (#1213) @paulomorgado
- fix: Allow specifying the protocol (TCP, UDP, SCTP) to resolve the public assigned host port (#1219) @wolfman42
- fix: Trim relative path indicators from Dockerfile path (#1203) @HofmeisterAn
π π Documentation
- chore: Replace codeinclude with snippets (#1251) @HofmeisterAn
- docs: Use codeinclude in module examples (#1245) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Apply fix for github.com/apache/pulsar/issues/22811 only for affected versions (#1232) @entvex
- chore: Replace codeinclude with snippets (#1251) @HofmeisterAn
- chore: Change global.json roll-forward policy from `latestPatch` to `latestMinor` (#1230) @0xced
- chore: Remove obsolete UntilOperationIsSucceeded wait strategy (#1202) @HofmeisterAn
π₯ β οΈ Breaking Changes
- feat: Add wait strategy options (#1168) @HofmeisterAn
- feat: Include the container name in the reuse hash (#1162) @0xced
β¨ π Features
- feat: Add Apache Pulsar module (#1103) @entvex
- feat: Add custom configuration for retries, interval and timeout (#1169) @HofmeisterAn
- feat: Add wait strategy options (#1168) @HofmeisterAn
- feat: Include the container name in the reuse hash (#1162) @0xced
π π Bug Fixes
- fix: Add default file permission (755 for image build) (#1176) @HofmeisterAn
- fix(MySql): Create an empty `/var/lib/mysql-files` directory to prevent older versions from failing to start (#1144) @0xced
π π Documentation
- docs: Add reading file from a container (#1151) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Remove PulsarContainer.CreateAuthenticationTokenAsync(TimeSpan) default arg (#1195) @entvex
- chore : Do not block async context on acquire lock (#1188) @HofmeisterAn
- chore: PreventΒ ReusableResourceTest from leaking resources (#1164) @0xced
- refactor: Replace Azure SQL Edge with PostgreSQL (#1156) @HofmeisterAn
- chore: Remove obsolete members (#1146) @HofmeisterAn
π¦ π¦ Dependency Updates
- chore: Bump BouncyCastle.Cryptography (#1179) @marco-carvalho
- chore: Use new sshd:1.2.0 image (#1160) @mdelapenya
π₯ β οΈ Breaking Changes
- feat: Add `WithLogger(ILogger)` builder API (#1100) @0xced
β¨ π Features
- feat: Use built-in PEM certificate import on .NET 6 and onwards (#1139) @0xced
- feat: Add `WithLogger(ILogger)` builder API (#1100) @0xced
- feat: Add support for the target frameworks net6.0 and net8.0 (#1133) @HofmeisterAn
- feat: Add Milvus module (#1131) @roji
- feat: Embed symbols and enable continuous integration builds (deterministic source paths) (#1129) @tom-englert
- feat: Add remote container registry identity token support (#1124) @HofmeisterAn
- feat: Add URL-based resource mapping container builder API (#1118) @0xced
- feat: Add CockroachDB module (#1077) @rafaumlemos
- + 1 more
π π Bug Fixes
- fix: Prevent a `NullReferenceException` when pulling uncached base images to build an image (#1126) @tom-englert
- fix: Prevent .dockerignore entry from matching everything if it ends with globstart (#1122) @HofmeisterAn
- fix: Consider the timestamp in the log message wait strategy (read the correct log message chunk) (#1110) @HofmeisterAn
- fix(CosmosDb): SSL connection could not be established (#1109) @WakaToa
π¦ π§Ή Housekeeping
- chore: Ensure that stderr is empty after executing scripts (#1116) @0xced
- chore: Use the `pg_isready` command to assess whether PostgreSQL is ready or not (#1111) @0xced
- chore: Switch to the SDK's included Central Package Management (#1106) @HofmeisterAn
- chore: Use relative ProjectReference paths instead of $(SolutionDir) (#1094) @0xced
- chore: Update xUnit.net (#1087) @HofmeisterAn
π¦ π¦ Dependency Updates
- chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.SqlEdge.Tests (#1088) @dependabot
- chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.MsSql.Tests (#1089) @dependabot
β¨ π Features
- feat: Add Firebird SQL module (#1073) @park-jasper
- feat(Azurite): Add in-memory support (#1063) @Xzelsius
- feat: Add ArangoDB module (#1058) @ShirAvneri
- feat: Add ActiveMQ Artemis module (#1055) @ShirAvneri
- feat: Add Bigtable module (#1046) @peroyhav
- feat: Add BigQuery module (#1034) @dejandjenic
- feat: Add JanusGraph module (#837) @rngcntr
- feat: Add Papercut module (#1044) @TechLiam
- + 1 more
π π Bug Fixes
- fix: Retry configuring Couchbase on HttpIOException (#1064) @mgroves
π π Documentation
- docs: Add ASP.NET integration test example (#1061) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Update Ryuk image from version 0.5.1 to 0.6.0 (#1084) @HofmeisterAn
- chore: Improve the Base64Provider resilience to malformed configuration files (#1081) @0xced
- chore: Invert #if NETSTANDARD* conditional compilation conditions (#1079) @0xced
- chore: Rename the file CouchDbContainerTest.cs to CouchbaseContainerTest.cs (#1067) @mgroves
- chore: Replace custom wait strategy with default strategies (#1059) @ShirAvneri
- chore: Remove Microsoft.SourceLink.GitHub (#1057) @HofmeisterAn
- chore: Update .NET SDK to version 8 (LTS) (#1054) @HofmeisterAn
π₯ β οΈ Breaking Changes
- feat: Use Docker's inspect API to get resource information (#1018) @HofmeisterAn
β¨ π Features
- feat: Extend the "wait until file exists" API to distinguish between the test host and container filesystem (#1009) @maaex
- chore: Do not pre-pull cached images (#1032) @HofmeisterAn
- feat: Add Consul module (#1028) @witskeeper
- feat: Add Google Cloud Storage API (fake-gcs-server) module (#1023) @KSemenenko
- feat: Add PubSub module (#1005) @dejandjenic
- feat: Share common interface (IDatabaseContainer) for ADO.NET compatible containers (#920) @0xced
- feat: Use Docker's inspect API to get resource information (#1018) @HofmeisterAn
- feat: Ignore FROM args when pre-pulling images (#1016) @HofmeisterAn
- + 2 more
π π Bug Fixes
- fix: Retain the internal Couchbase builder configuration if the user overrides the default configuration (#1040) @HofmeisterAn
- fix: Prevent invalid negative timestamps getting container logs (#1038) @mausch
π π Documentation
- docs: Add Neo4j example (#1013) @khalidabuhakmeh
- docs: Add MongoDB example (#1012) @khalidabuhakmeh
- docs: Add Elasticsearch example (#1010) @khalidabuhakmeh
- docs: Add Microsoft SQL Server example (#1008) @khalidabuhakmeh
- docs: Add Flyway example (#1002) @HofmeisterAn
π¦ π§Ή Housekeeping
- refactor: Cache Docker image full and host name (#1043) @HofmeisterAn
- chore: Remove unnecessary internal APIs (#1020) @HofmeisterAn
- chore: Update SSH.NET to version 2023.0.0 (#1019) @WojciechNagorski
β¨ π Features
- feat: Allow MongoDb module configuration without credentials (#983) @the-avid-engineer
- feat: Add support for RSA private key (RsaPrivateCrtKeyParameters) TLS authentication with protected Docker daemon sockets (#978) @zuntio
- feat: Add InfluxDb module (#975) @MelomanG
π π Bug Fixes
- fix: Do not pre pull Dockerfile build stages that do not correspond to base images (#979) @HofmeisterAn
π π Documentation
- docs: Add documentation on enabling debug log messages for the default logger (#991) @HofmeisterAn
- docs: Add global Testcontainers header (#967) @leocross
π¦ π§Ή Housekeeping
- chore: Improve error message when Docker is not running (#987) @0xced
- chore: Update BouncyCastle.Cryptography to 2.2.1 (previous Portable.BouncyCastle) (#985) @jcmrva
- chore: Add User-Agent HTTP header to Docker.DotNet client (#970) @eddumelendez
- chore: Remove `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` env var (#971) @eddumelendez
π₯ β οΈ Breaking Changes
- chore: Remove WithResourceMapping(string, string, UnixFileModes) obsolete flag (#964) @HofmeisterAn
- chore: Remove obsolete member CopyFileAsync (#937) @HofmeisterAn
β¨ π Features
- feat: Add Azure Data Explorer Kusto emulator module (#963) @JonasBenz
- feat: Restore output consumer support (#959) @jacobjmarks
- feat: Pull dependent images from private registries while building an image (#951) @benjaminangerer
- feat: Add ClickHouse module (#944) @smbecker
- chore: Disable Elasticsearch GeoIP2 downloads (#945) @HofmeisterAn
π π Bug Fixes
- fix(CosmosDb): Wait until all partitions are started (#961) @jacobjmarks
- fix: Do not dispose a custom HTTP message handler in an HTTP wait strategy (#958) @jacobjmarks
- fix(MySql): Rename default database to test (do not use MySQL system schema) (#949) @benjaminoerskovtryg
- fix: ReplaceΒ mysql withΒ mariadb binary inΒ MariaDBΒ module (#942) @FlorianHockmann
- fix: Copy files to container without removing first character from filename (#938) @HofmeisterAn
π π Documentation
- docs: Provide instructions for copying directories or files to the container (#939) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Disable signing NuGet dependencies (#968) @HofmeisterAn
- chore: Add test coverage to unbound port bindings (#966) @HofmeisterAn
- chore: Bump Azurite from 3.23.0 to 3.24.0 (#947) @Xzelsius
- chore: Remove obsolete member CopyFileAsync (#937) @HofmeisterAn
β¨ π Features
- feat: Add support for copying directories and files to a container (#913) @HofmeisterAn
- feat: Change access modifier of OracleBuilder.WithUsername(string) to public (#923) @0xced
- feat: Add UsingHttpMessageHandler(HttpMessageHandler) to HttpWaitStrategy (#910) @mkstephenson
π π Bug Fixes
- fix: Use the actual Docker endpoint to extract the socket path for the Resource Reaper (#930) @HofmeisterAn
- fix: Ensure site_url is set in the MkDocs config to prevent <loc>None</loc> in sitemap generation (#927) @leocross
- fix: Remove cref from inheritdoc (#922) @HofmeisterAn
- fix: Add Docker Desktop (for Linux / macOS) authentication provider (#911) @HofmeisterAn
π π Documentation
- docs: Fix typo in Testcontainers properties file path (#935) @HofmeisterAn
- docs: Update Testcontainers for Java docs url (#916) @leocross
- docs: Add RabbitMQ module documentation incl. an example (#918) @AnnaErdi
- docs: ReplaceΒ "mess up" with "clutter up" in the best practices (#905) @gurry
π¦ π§Ή Housekeeping
- chore: Add DebugLogLevelEnabled property to default logger implementation (#928) @HofmeisterAn
- chore: Set ContinuousIntegrationBuild and EmbedUntrackedSources MSBuild propery (#926) @HofmeisterAn
- fix: Prefer indexing instead of Enumerable methods (#912) @HofmeisterAn
- fix: Refactor tests to support Podman container runtime (#906) @HofmeisterAn
- chore: Update WeatherForecast example (#904) @HofmeisterAn
- chore: Refactor legacy TestcontainersContainerTest class (#901) @HofmeisterAn
β¨ π Features
- feat: Add TC host strategy (#885) @HofmeisterAn
- feat: Add Keycloak module (#880) @VMelnalksnis
- feat: Add Docker image build policy (#882) @HofmeisterAn
π π Bug Fixes
- fix: Do not create a Port Forwarding Container instance if auto-discovery does not detect Docker host (#900) @HofmeisterAn
- fix: Replace CLI command to detect open ports in Linux containers (#883) @HofmeisterAn
- fix: Remove trailing slash from rootless Docker socket path (#881) @HofmeisterAn
π π Documentation
- docs: Add information about running Testcontainers in specific CI environments (#895) @HofmeisterAn
- fix: Typo in Selenium (#893) @dotkarl
- docs: Link to Wikipedia to explain the .properties file format (#889) @HofmeisterAn
- docs: Add Docker remote host configuration (#888) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Favor custom environment variable configurations over properties file (#899) @HofmeisterAn
- chore: Update Docker.DotNet from version 3.125.13 to 3.125.15 (#898) @HofmeisterAn
- chore: Update Ryuk image from version 0.4.0 to 0.5.1 (#896) @HofmeisterAn
- chore: Build image with ITestcontainersClient implementation (#884) @HofmeisterAn
π₯ β οΈ Breaking Changes
- As mentioned in the two previous releases, we replaced the legacy extension method modules with a dedicated API. We recommend moving forward to the new API. In this release, all classes and interfaces related to the legacy extension method approach have been removed.
β¨ π Features
- feat: Add default session-id label to Docker resources (#878) @HofmeisterAn
- feat: Expose host ports (#873) @HofmeisterAn
- feat: Automatically detect Docker Desktop for Linux rootless socket (#872) @HofmeisterAn
- feat: Replace Azurite module (#871) @HofmeisterAn
- feat: Add .NET Source Link to modules (#870) @HofmeisterAn
- feat: Detect rootless Docker endpoint configurations (#868) @HofmeisterAn
- feat: Always use Docker's assigned random host port (Ryuk) (#852) @HofmeisterAn
- feat: Add container builder member to depend on other Docker resources (#832) @HofmeisterAn
- + 3 more
π π Bug Fixes
- fix: KafkaException (timeout) while creating a topic (#849) @HofmeisterAn
- fix: Log Docker image build progress messages (#839) @HofmeisterAn
π π Documentation
- docs: Explain how to delete multi-stage intermediate layers (#867) @HofmeisterAn
- docs: Explain the Docker build context (building a Docker image) (#861) @HofmeisterAn
- docs: Update ASP.NET Core Blazor out-off-process example (#838) @HofmeisterAn
- docs: Update the documentation and WeatherForecast example (#823) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Update Ryuk image from version 0.3.4 to 0.4.0 (#854) @HofmeisterAn
- chore: Update LocalStack image from version 1.4 to 2.0 (#864) @HofmeisterAn
- chore: Update Redpanda image (#840) @eddumelendez
- feat: Prepare next release cycle (3.1.0) (#822) @HofmeisterAn
π₯ β οΈ Breaking Changes
- chore!: Remove legacy WithCreateContainerParametersModifier(Action<CreateContainerParameters>) (#809) @HofmeisterAn
- chore!: Remove legacy IDockerImage (#808) @HofmeisterAn
- chore!: Remove legacy TestcontainersVolumeBuilder, IDockerVolume (#805) @HofmeisterAn
- chore!: Remove legacy TestcontainersNetworkBuilder, IDockerNetwork (#804) @HofmeisterAn
- | Old name | New name |
- |---------------------------------------------------------------------------|-------------------------------|
- | `ITestcontainersContainer`, `IDockerContainer`, `IRunningDockerContainer` | `IContainer` |
- | `IDockerImage` | `IImage` |
- + 7 more
β¨ π Features
- feat: Sign assemblies with a strong name (#815) @HofmeisterAn
- feat: Add SQL Edge module (#812) @HofmeisterAn
- feat: Replace Kafka module (#802) @HofmeisterAn
- feat: Replace Couchbase module (#798) @HofmeisterAn
- feat: Add Redpanda module (#796) @eddumelendez
- fix: Wait until container ports are mapped, removed generated credentials (#791) @HofmeisterAn
- feat: Replace output consumer with `IContainer.GetLogsAsync(DateTime, DateTime, bool, CancellationToken)` (#793) @HofmeisterAn
- feat: Add EventStoreDb module (#778) @meysamhadeli
- + 14 more
π π Bug Fixes
- fix: InvalidOperationException when adding future volume (#817) @HofmeisterAn
- fix: Wait until container ports are mapped, removed generated credentials (#791) @HofmeisterAn
- fix(#783): Dispose container while Resource Reaper is disabled (#789) @HofmeisterAn
π π Documentation
- docs: Add best practices (#816) @HofmeisterAn
- docs: Add community links (#807) @HofmeisterAn
- docs: Update Testcontainers for Node docs link (#806) @cristianrgreco
- docs: Add section 'Implement a module' (#771) @HofmeisterAn
- docs: Replace obsolete builders (#756) @HofmeisterAn
π¦ π§Ή Housekeeping
- fix: Coverlet 'Unable to read beyond end of stream' IOException (#800) @HofmeisterAn
- chore: Clean up EventStoreDb module (#792) @HofmeisterAn
- chore: Clean up LocalStack module (#781) @HofmeisterAn
- chore: Clean up DynamoDB module (#774) @HofmeisterAn
- chore: Clean up MinIO module (#766) @HofmeisterAn
- fix: Use TCP to connect to the MySQL module (#765) @HofmeisterAn
- fix: Use sqlcmd utility to detect readiness of the container (#759) @HofmeisterAn
- fix: Move MsSqlContainerTest class to namespace (#758) @HofmeisterAn
- + 3 more
π₯ β οΈ Breaking Changes
- 1. The interface member `IWaitUntil.Until(ITestcontainersContainer, ILogger)` has been changed to `IWaitUntil.UntilAsync(IContainer)`. The container instance now holds the instance of `ILogger`.
- 4. Following interfaces and classes has been renamed (the old interfaces and classes are still supported in 2.4.0):
- | Old name | New name |
- |---------------------------------------------------------------------------|--------------------|
- | `ITestcontainersContainer`, `IDockerContainer`, `IRunningDockerContainer` | `IContainer` |
- | `IDockerImage` | `IImage` |
- | `IDockerNetwork` | `INetwork` |
- | `IDockerVolume` | `IVolume` |
- + 6 more
β¨ π Features
- feat: Invoke create parameter modifier for image, network, volume build or create (#746) @HofmeisterAn
- feat(#493): Add .NET module template (#742) @HofmeisterAn
- feat(#493): Add container lifecycle events (#743) @HofmeisterAn
- feat(#493): Add low level modifications API for all resources (#741) @HofmeisterAn
- refactor(#493): Replace module extension methods with module API (#729) @HofmeisterAn
- feat: Add GitHub Codespaces configuration (Dev Container) (#735) @HofmeisterAn
- feat(#725): Do not return JSON auth config for partial Docker registry matches (#726) @HofmeisterAn
- chore: Replace SharpZipLib TarArchive helper class with TarOutputStream (#724) @HofmeisterAn
- + 2 more
π π Bug Fixes
- fix: Wait until LocalStack writes ready message (#738) @HofmeisterAn
π π Documentation
- chore: Add link Open in GitHub Codespaces (#739) @eddumelendez
- docs: Add Docker Desktop Compose example (#731) @HofmeisterAn
π¦ π§Ή Housekeeping
- chore: Rename release branch to main (#748) @HofmeisterAn
- feat(#493): Prepare module NuGet support, sign NuGet (#744) @HofmeisterAn
- chore: Replace host port 0 with an empty string (#727) @HofmeisterAn
- fix: Remove Sonar finding csharpsquid:S6444 (#721) @HofmeisterAn
- chore: Increase HttpWaitStrategy test coverage (#719) @HofmeisterAn
- fix: Remove Sonar finding csharpsquid:S1006 (#718) @HofmeisterAn
- chore: Reduce concurrent builds (#714) @HofmeisterAn
- feat: Prepare next release cycle (2.4.0) (#711) @HofmeisterAn
β¨ Added
- #531 Add Docker health status wait strategy (@kfrajtak)
- #640 Add `ITestcontainersBuilder<TDockerContainer>.WithResourceMapping` to copy files or any binary contents into the created container before it is started
- #654 Add `ITestcontainersNetworkBuilder.WithOption` (@vlaskal)
- #678 Add support of custom configuration `TESTCONTAINERS_HOST_OVERRIDE` and `TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE`
- #694 Add Resource Reaper (Ryuk) privileged mode support (`TESTCONTAINERS_RYUK_CONTAINER_PRIVILEGED`)
π Changed
- #642 Expose container port bindings automatically
- #603 Add default logger that forwards messages to the console (does not support every test environment)
- #683 Return the gateway address (`IDockerContainer.Hostname`) of a network if one is assigned
- #703 `ResourceReaper.GetAndStartDefaultAsync` no longer support optional arguments, it is necessary to set the Resource Reaper configuration immediately
π Fixed
- #610 Trim traling slashes in Dockerfile directory path (otherwise, it cuts the first character of the relative path), Normalize paths to forward slashes
- #648 Always include `.dockerignore` and `Dockerfile` files in tarball (`docker build`)
- #650 Update SharpZipLib to version 1.4.1 to prevent a deadlock in the Docker container image build
- #666 DockerImageNotFoundException when logged in with Docker Desktop instead of the CLI
- ThanksΒ for your contributionsΒ π
- [1]: https://github.com/testcontainers/testcontainers-dotnet/milestone/18?closed=1
β¨ Added
- #370 Add protected Docker daemon socket support (@vlaskal)
- #421 Add Azurite module (@vlaskal)
- #421 Add Cosmos DB Linux Emulator (@Yeseh, @ktjn)
- #504 Add Elasticsearch module (@chertby)
- #516 Add `ITestcontainersBuilder<TDockerContainer>.WithTmpfsMount` (@chrisbbe)
- #520 Add MariaDB module (@renemadsen)
- #528 Do not require the Docker host configuration (`DockerEndpointAuthConfig`) on `TestcontainersSettings` initialization
- #538 Support optional username and password in MongoDB connection string (@the-avid-engineer)
- + 12 more
π Changed
- #571 Update `wnameless/oracle-xe-11g-r2` to `gvenzl/oracle-xe:21-slim`
π Fixed
- #525 Read ServerURL, Username and Secret field from CredsStore response to pull private Docker images
- #595 Implement `TestcontainersContainer.DisposeAsync` thread safe (rename `TestcontainersState` to `TestcontainersStates`)
- #604 Do not deny all files in the Docker image tarball when a `.dockerignore` entry ends with `/`
- #610 Do not deny all files in the Docker image tarball when a `.dockerignore` entry ends with `/*`
- #632 Execute local database scripts (inside the container) against `localhost`
- #634 JsonReaderException in Docker.DotNet with Docker Desktop 4.13.0 (https://github.com/dotnet/Docker.DotNet/issues/595)
- ThanksΒ for your contributionsΒ π
- [1]: https://github.com/testcontainers/testcontainers-dotnet/milestone/17?closed=1
β¨ Added
- #481 Add builder access to the `CreateContainerParameters` instance (@Xitric)
- #483 Support custom resource reaper image via `TestcontainersSettings.ResourceReaperImage` (@vlaskal)
- #495 Add CHANGELOG.md
- #496 Support `~/.testcontainers.properties` custom configuration
- #500 Add trace output while building or pulling a Docker image (@michal-korniak)
- #501 Throw an exception when Docker image has not been built (@michal-korniak)
- #509 Check if the authentication provider can establish a Docker endpoint connection
- #510 Add `IImageFromDockerfileBuilder.WithBuildArgument` (@michal-korniak)
- + 2 more
ποΈ Removed
- #497 Remove `ResourceReaperDiagnostics`
π Fixed
- #431 Fix `System.InvalidOperationException : cannot hijack chunked or content length stream` (update `Docker.DotNet` dependency)
- #449 Fix wrong mapped public host port
- #484 Fix unit tests that fail on Windows hosts (@vlaskal)
- #507 Fix `ITestcontainersConfiguration` duplication, such as `DockerApiException : [...] Duplicate mount point [...]` (@alesandrino)
- ThanksΒ for your contributionsΒ π
- [1]: https://github.com/testcontainers/testcontainers-dotnet/milestone/10?closed=1
π Changes
- #449 Fixes `ResourceReaperException`, Testcontainers couldn't establish a connection to the resource reaper (public host port wasn't set)
- #485 Fixes `ArgumentNullException` while mapping the network configurations in `TestcontainersConfigurationConverter` (@pellared)
