-
-
Notifications
You must be signed in to change notification settings - Fork 584
feat: added firebase module #2954
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
base: main
Are you sure you want to change the base?
Changes from 5 commits
29b1bba
6a88123
4105b0a
cc2bfa4
7c24032
bc68bb3
bc33438
1a72008
c2b8e2b
ba0bdc0
80298e5
4e271db
34409eb
fb2c0aa
88cb16d
aa4c29c
458cc7c
ae27c74
ae49941
cff37d9
9fe4988
3ed1839
d578817
72c1f45
fd6035e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| # Firebase | ||
|
|
||
| Not available until the next release of testcontainers-go <a href="https://github.com/testcontainers/testcontainers-go"><span class="tc-version">:material-tag: main</span></a> | ||
|
|
||
| ## Introduction | ||
|
|
||
| The Testcontainers module for Firebase. | ||
|
|
||
| ## Adding this module to your project dependencies | ||
|
|
||
| Please run the following command to add the Firebase module to your Go dependencies: | ||
|
|
||
| ``` | ||
| go get github.com/testcontainers/testcontainers-go/modules/firebase | ||
| ``` | ||
|
|
||
| ## Usage example | ||
|
|
||
| <!--codeinclude--> | ||
| [Creating a Firebase container](../../modules/firebase/examples_test.go) inside_block:ExampleRun | ||
| <!--/codeinclude--> | ||
|
|
||
| ## Module Reference | ||
|
|
||
| ### Run function | ||
|
|
||
| - Not available until the next release of testcontainers-go <a href="https://github.com/testcontainers/testcontainers-go"><span class="tc-version">:material-tag: main</span></a> | ||
|
|
||
| !!!info | ||
| The `RunContainer(ctx, opts...)` function is deprecated and will be removed in the next major release of _Testcontainers for Go_. | ||
mdelapenya marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| The Firebase module exposes one entrypoint function to create the Firebase container, and this function receives three parameters: | ||
|
|
||
| ```golang | ||
| func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*FirebaseContainer, error) | ||
| ``` | ||
|
|
||
| - `context.Context`, the Go context. | ||
| - `string`, the Docker image to use. | ||
| - `testcontainers.ContainerCustomizer`, a variadic argument for passing options. | ||
|
|
||
| ### Container Options | ||
|
|
||
| When starting the Firebase container, you can pass options in a variadic way to configure it. | ||
|
|
||
| #### Image | ||
|
|
||
| If you need to set a different Firebase Docker image, you can set a valid Docker image as the second argument in the `Run` function. | ||
| E.g. `Run(context.Background(), "ghcr.io/u-health/docker-firebase-emulator:13.29.2")`. | ||
mdelapenya marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| {% include "../features/common_functional_options.md" %} | ||
|
|
||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. docsd: we need to add here all the functional options for the module. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @xytis let's not forget adding the WithData option here 🙏 |
||
| ### Container Methods | ||
|
|
||
| The Firebase container exposes the following methods: | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. docs: we probably need to append here the new methods the container expose There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @xytis let's not forget adding here |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| include ../../commons-test.mk | ||
|
|
||
| .PHONY: test | ||
| test: | ||
| $(MAKE) test-firebase |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| package firebase | ||
|
|
||
| // Based on https://github.com/firebase/firebase-tools/blob/master/src/firebaseConfig.ts | ||
|
|
||
| type emulatorsConfig struct { | ||
| SingleProjectMode bool `json:"singleProjectMode,omitempty"` | ||
|
|
||
| Auth struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"auth,omitempty"` | ||
|
|
||
| Database struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"database,omitempty"` | ||
|
|
||
| Firestore struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| WebsocketPort uint16 `json:"websocketPort,omitempty"` | ||
| } `json:"firestore,omitempty"` | ||
|
|
||
| Functions struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"functions,omitempty"` | ||
|
|
||
| Hosting struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"hosting,omitempty"` | ||
|
|
||
| AppHosting struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| StartCommand string `json:"startCommand,omitempty"` | ||
| RootDirectory string `json:"rootDirectory,omitempty"` | ||
| } `json:"apphosting,omitempty"` | ||
|
|
||
| PubSub struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"pubsub,omitempty"` | ||
|
|
||
| Storage struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"storage,omitempty"` | ||
|
|
||
| Logging struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"logging,omitempty"` | ||
|
|
||
| Hub struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"hub,omitempty"` | ||
|
|
||
| UI struct { | ||
| Enabled bool `json:"enabled,omitempty"` | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"ui,omitempty"` | ||
|
|
||
| EventArc struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"eventarc,omitempty"` | ||
|
|
||
| DataConnect struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| PostgresHost string `json:"postgresHost,omitempty"` | ||
| PostgresPort uint16 `json:"postgresPort,omitempty"` | ||
| DataDir string `json:"dataDir,omitempty"` | ||
| } `json:"dataconnect,omitempty"` | ||
|
|
||
| Tasks struct { | ||
| Host string `json:"host,omitempty"` | ||
| Port uint16 `json:"port,omitempty"` | ||
| } `json:"tasks,omitempty"` | ||
| } | ||
| type partialFirebaseConfig struct { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: add a blank line between types, suspect it will fail linting without. |
||
| Emulators emulatorsConfig `json:"emulators,omitempty"` | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| package firebase_test | ||
|
|
||
| import ( | ||
| "context" | ||
| "fmt" | ||
| "log" | ||
| "path/filepath" | ||
|
|
||
| "github.com/testcontainers/testcontainers-go" | ||
| "github.com/testcontainers/testcontainers-go/modules/firebase" | ||
| ) | ||
|
|
||
| func ExampleRun() { | ||
| ctx := context.Background() | ||
|
|
||
| firebaseContainer, err := firebase.Run(ctx, "ghcr.io/u-health/docker-firebase-emulator:13.29.2", | ||
| firebase.WithRoot(filepath.Join(".", "firebase")), | ||
| firebase.WithCache(), | ||
| ) | ||
| defer func() { | ||
| if err := testcontainers.TerminateContainer(firebaseContainer); err != nil { | ||
| log.Printf("failed to terminate container: %s", err) | ||
| } | ||
| }() | ||
| if err != nil { | ||
| log.Printf("failed to start container: %s", err) | ||
| return | ||
| } | ||
|
|
||
| state, err := firebaseContainer.State(ctx) | ||
| if err != nil { | ||
| log.Printf("failed to get container state: %s", err) | ||
| return | ||
| } | ||
|
|
||
| fmt.Println(state.Running) | ||
|
|
||
| // Output: | ||
| // true | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| { | ||
mdelapenya marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| "projects": { | ||
| "default": "test" | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| { | ||
| "emulators": { | ||
| "ui": { | ||
| "//": "UI will only partially work in the container. Because ports get mangled, some of the features will be broken. A solution is to run UI externally and provide the mangled ports as inputs.", | ||
| "enabled": true, | ||
| "port": 4000, | ||
| "host": "0.0.0.0" | ||
| }, | ||
| "hub": { | ||
| "port": 4400, | ||
| "host": "0.0.0.0" | ||
| }, | ||
| "logging": { | ||
| "port": 4600, | ||
| "host": "0.0.0.0" | ||
| }, | ||
| "firestore": { | ||
| "port": 8080, | ||
| "host": "0.0.0.0", | ||
| "websocketPort": 8081 | ||
| }, | ||
| "auth": { | ||
| "port": 9099, | ||
| "host": "0.0.0.0" | ||
| }, | ||
| "storage": { | ||
| "port": 9199, | ||
| "host": "0.0.0.0" | ||
| }, | ||
| "singleProjectMode": true | ||
| }, | ||
| "firestore": { | ||
| "rules": "firestore.rules", | ||
| "indexes": "firestore.indexes.json" | ||
| }, | ||
| "storage": { | ||
| "rules": "storage.rules" | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "indexes": [], | ||
| "fieldOverrides": [] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| rules_version = '2'; | ||
| service cloud.firestore { | ||
| match /databases/{database}/documents { | ||
| match /{document=**} { | ||
| allow read, write: if false; | ||
| } | ||
| } | ||
| } | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| rules_version = '2'; | ||
| service firebase.storage { | ||
| match /b/{bucket}/o { | ||
| match /{allPaths=**} { | ||
| allow read, write: if true; | ||
| } | ||
| } | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.