feat: add more functional options to the modules API#3070
Merged
mdelapenya merged 19 commits intotestcontainers:mainfrom Apr 11, 2025
Merged
feat: add more functional options to the modules API#3070mdelapenya merged 19 commits intotestcontainers:mainfrom
mdelapenya merged 19 commits intotestcontainers:mainfrom
Conversation
They will be added to all modules, to avoid causing confusion
✅ Deploy Preview for testcontainers-go ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
This was referenced Mar 31, 2025
mdelapenya
commented
Apr 1, 2025
| return nil | ||
| } | ||
| } | ||
|
|
Member
Author
There was a problem hiding this comment.
In case there is a discussion about variadic Vs single arguments in the new options, I left a comment here: #3071 (comment)
stevenh
requested changes
Apr 1, 2025
Contributor
stevenh
left a comment
There was a problem hiding this comment.
Like the consistency improvement, just a few suggestions
* main: chore(deps): bump docker/setup-docker-action from 4.2.0 to 4.3.0 (testcontainers#3077) chore(deps): bump github/codeql-action from 3.28.12 to 3.28.13 (testcontainers#3078) chore(deps): bump tj-actions/changed-files from 45.0.4 to 46.0.3 (testcontainers#3076) docs: add dependabot configuration (testcontainers#3074) chore(deps): replace `golang.org/x/exp/slices` with stdlib (testcontainers#3075) fix(dind): use docker image load (testcontainers#3073)
* main: fix(mssql): reduce flakiness in tests (testcontainers#3084) chore: bump golangci-lint to v2 (testcontainers#3082) chore(gcloud): deprecate old gcp containers, creating subpackages for them (testcontainers#3063) fix(mongodb): replica set initialization & connection handling (testcontainers#2984)
mdelapenya
commented
Apr 9, 2025
stevenh
requested changes
Apr 9, 2025
Contributor
stevenh
left a comment
There was a problem hiding this comment.
Looking good, concerned about a few which are appending when I would expect to replace due to how they work.
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 11, 2025
* main: security(compose): upgrade github.com/docker/compose/v2 to fix security vulnerability (testcontainers#3095) feat: add more functional options to the modules API (testcontainers#3070)
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 14, 2025
* main: (91 commits) chore(deps): bump github/codeql-action from 3.28.13 to 3.28.15 (testcontainers#3097) chore(deps): bump golang.org/x/crypto from 0.31.0 to 0.37.0 (testcontainers#3098) feat(aerospike): add Aerospike module (testcontainers#3094) security(compose): upgrade github.com/docker/compose/v2 to fix security vulnerability (testcontainers#3095) feat: add more functional options to the modules API (testcontainers#3070) chore(deps): bump golang.org/x/net in /modules/arangodb (testcontainers#3087) feat: add arangodb module (testcontainers#3083) chore(deps): bump actions/upload-artifact from 4.6.0 to 4.6.2 (testcontainers#3086) chore(deps): bump SonarSource/sonarqube-scan-action from 5.0.0 to 5.1.0 (testcontainers#3085) feat: add socat container (testcontainers#3071) fix(mssql): reduce flakiness in tests (testcontainers#3084) chore: bump golangci-lint to v2 (testcontainers#3082) chore(gcloud): deprecate old gcp containers, creating subpackages for them (testcontainers#3063) fix(mongodb): replica set initialization & connection handling (testcontainers#2984) chore(deps): bump docker/setup-docker-action from 4.2.0 to 4.3.0 (testcontainers#3077) chore(deps): bump github/codeql-action from 3.28.12 to 3.28.13 (testcontainers#3078) chore(deps): bump tj-actions/changed-files from 45.0.4 to 46.0.3 (testcontainers#3076) docs: add dependabot configuration (testcontainers#3074) chore(deps): replace `golang.org/x/exp/slices` with stdlib (testcontainers#3075) fix(dind): use docker image load (testcontainers#3073) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
This PR adds the missing functional options to the modules API:
testcontainers.WithExposedPort(ports ...string)testcontainers.WithEntrypoint(entrypoint ...string)testcontainers.WithCmd(cmd ...string)testcontainers.WithLabels(labels map[string]string)testcontainers.WithFiles(files ...testcontainers.ContainerFile)testcontainers.WithMounts(mounts ...testcontainers.ContainerMount)testcontainers.WithTmpfs(tmpfs map[string]string)At the same time, it deprecates some fields of the ContainerRequest that won't be used anymore, but instead should be configured using the proper ConfigModifier:
req.ConfigModifierinsteadreq.ConfigModifierinsteadreq.HostConfigModifierinsteadreq.ConfigModifierinsteadreq.HostConfigModifierinsteadThe usage of those fields has been updated across the library, and the default config modifiers has been updated to support passing those values in the case the client code stil uses the deprecated fields.
All options has been added to the docs.
Why is it important?
Keep the basic creation of containers simple, delegating advanced features to the modifiers. Also adding all supported fields as functional options makes the modules API feature complete in terms of customisation, making the override container request option not needed for common use cases.
Follow-ups
I'm thinking about creating a
GenericContainernew module, which is able to consume all the options as any other module, therefore, the core library would just be the foundation for intearacting with the docker engine, and the modules would be the real meat for Testcontainers users.