-
-
Notifications
You must be signed in to change notification settings - Fork 591
feat: add more functional options to the modules API #3070
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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. |
| return nil | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In case there is a discussion about variadic Vs single arguments in the new options, I left a comment here: #3071 (comment)
stevenh
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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)
stevenh
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good, concerned about a few which are appending when I would expect to replace due to how they work.
stevenh
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* 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)
* 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) ...
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.