xplorer-io / xplorers-api

API for all things Xplorers
MIT License
1 stars 0 forks source link

Feat/ci enhancements #13

Closed samurato closed 1 week ago

samurato commented 2 weeks ago

Summary by CodeRabbit

coderabbitai[bot] commented 2 weeks ago

Walkthrough

The pull request introduces modifications to the GitHub Actions workflow and the Taskfile. The workflow now triggers on both push and pull_request events, incorporates permissions for contents: write and pull-requests: write, and adds a step to update pull requests with Terraform plan outputs. The Taskfile is updated to include validation and formatting improvements for Terraform commands, ensuring consistent output during execution.

Changes

File Change Summary
.github/workflows/deploy-to-gcp.yaml - Trigger updated to on: push, pull_request
- Permissions updated to include contents: write and pull-requests: write
- New step to update PR with Terraform plan output using actions/github-script
Taskfile.yml - Added terraform validate -no-color command in terraform-init
- Updated terraform plan and terraform apply commands to include -no-color
- Corrected indentation in tasks

Possibly related PRs

🐇 In the meadow, changes bloom,
With workflows that lift and zoom.
Terraform plans now take their flight,
Validations shine, all outputs bright.
Pull requests gleam with comments fair,
A rabbit's joy is in the air! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit , please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
github-actions[bot] commented 2 weeks ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:85ecb15" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request

github-actions[bot] commented 2 weeks ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:b767564" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request

boltdynamics commented 2 weeks ago

Can we format the output of Terraform plan?

image
github-actions[bot] commented 2 weeks ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:606d4ae" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request

github-actions[bot] commented 2 weeks ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:127a05e" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request

github-actions[bot] commented 1 week ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:895c4dc" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request

samurato commented 1 week ago

@boltdynamics Formatting is fixed.

github-actions[bot] commented 1 week ago

TASK Terraform Plan 📖success

Show Plan ``` terraform google_api_gateway_api.xplorers_api: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev] google_cloud_run_service.xplorers_backend: Refreshing state... [id=locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev] google_api_gateway_api_config.xplorers_api_cfg: Refreshing state... [id=projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510] google_api_gateway_gateway.xplorers_api_gateway: Refreshing state... [id=projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev] google_project_service.xplorers_api_gateway: Refreshing state... [id=pras-sandbox-405410/xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place +/- create replacement and then destroy <= read (data resources) Terraform will perform the following actions: # data.template_file.openapi_spec will be read during apply # (depends on a resource or a module with changes pending) <= data "template_file" "openapi_spec" { + id = (known after apply) + rendered = (known after apply) + template = <<-EOT swagger: "2.0" info: title: XPLORERS API description: Xplorers API - backend for Xplorers Website and other tasks version: 1.0.0 schemes: - https produces: - application/json host: ${api_endpoint_service} x-google-backend: address: ${cloud_run_url} paths: /slack/user: get: description: Fetch a slack user by slack id, name or email operationId: fetchSlackUser security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to fetch Slack info for required: false type: string - name: userName in: query description: name of the user to fetch Slack info for required: false type: string - name: userId in: query description: id of the user to fetch Slack info required: false type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUser" 404: description: User not found 500: description: Internal server error /slack/user/status: get: description: Fetch a slack user status by email operationId: fetchSlackUserStatusByEmail security: - XplorersAPIKey: [] parameters: - name: userEmail in: query description: email of the user to validate in Slack required: true type: string responses: 200: description: Successful response schema: $ref: "#/definitions/SlackUserStatus" 404: description: User not found 500: description: Internal server error definitions: SlackUser: type: object properties: id: type: string first_name: type: string last_name: type: string title: type: string email: type: string SlackUserStatus: type: object properties: isActive: type: boolean securityDefinitions: XplorersAPIKey: type: apiKey in: header name: x-api-key x-google-endpoints: - name: ${api_endpoint_service} allowCors: true EOT + vars = { + "api_endpoint_service" = "xplorers-api-dev-2jatnvy1d4dbq.apigateway.pras-sandbox-405410.cloud.goog" + "cloud_run_url" = "https://xplorers-service-dev-y6r6yntwia-uc.a.run.app" } } # google_api_gateway_api_config.xplorers_api_cfg must be replaced +/- resource "google_api_gateway_api_config" "xplorers_api_cfg" { ~ api_config_id = "xplorers-api-config-240928055510" -> (known after apply) # forces replacement + api_config_id_prefix = (known after apply) ~ display_name = "xplorers-api-config-240928055510" -> (known after apply) ~ id = "projects/pras-sandbox-405410/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) - labels = {} -> null ~ name = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) ~ service_config_id = "xplorers-api-config-240928055510-18zq84p8iccps" -> (known after apply) # (4 unchanged attributes hidden) ~ openapi_documents { ~ document { ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogWFBMT1JFUlMgQVBJCiAgZGVzY3JpcHRpb246IFhwbG9yZXJzIEFQSSAtIGJhY2tlbmQgZm9yIFhwbG9yZXJzIFdlYnNpdGUgYW5kIG90aGVyIHRhc2tzCiAgdmVyc2lvbjogMS4wLjAKc2NoZW1lczoKICAtIGh0dHBzCnByb2R1Y2VzOgogIC0gYXBwbGljYXRpb24vanNvbgpob3N0OiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiBodHRwczovL3hwbG9yZXJzLXNlcnZpY2UtZGV2LXk2cjZ5bnR3aWEtdWMuYS5ydW4uYXBwCnBhdGhzOgogIC9zbGFjay91c2VyOgogICAgZ2V0OgogICAgICBkZXNjcmlwdGlvbjogRmV0Y2ggYSBzbGFjayB1c2VyIGJ5IHNsYWNrIGlkLCBuYW1lIG9yIGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlcgogICAgICBzZWN1cml0eToKICAgICAgICAtIFhwbG9yZXJzQVBJS2V5OiBbXQogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogdXNlckVtYWlsCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbWFpbCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvIGZvcgogICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAtIG5hbWU6IHVzZXJOYW1lCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lIG9mIHRoZSB1c2VyIHRvIGZldGNoIFNsYWNrIGluZm8gZm9yCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgIC0gbmFtZTogdXNlcklkCiAgICAgICAgICBpbjogcXVlcnkKICAgICAgICAgIGRlc2NyaXB0aW9uOiBpZCBvZiB0aGUgdXNlciB0byBmZXRjaCBTbGFjayBpbmZvCiAgICAgICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICByZXNwb25zZXM6CiAgICAgICAgMjAwOgogICAgICAgICAgZGVzY3JpcHRpb246IFN1Y2Nlc3NmdWwgcmVzcG9uc2UKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvU2xhY2tVc2VyIgogICAgICAgIDQwNDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBVc2VyIG5vdCBmb3VuZAogICAgICAgIDUwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKICAvc2xhY2svdXNlci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIGRlc2NyaXB0aW9uOiBGZXRjaCBhIHNsYWNrIHVzZXIgc3RhdHVzIGJ5IGVtYWlsCiAgICAgIG9wZXJhdGlvbklkOiBmZXRjaFNsYWNrVXNlclN0YXR1c0J5RW1haWwKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBYcGxvcmVyc0FQSUtleTogW10KICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6IHVzZXJFbWFpbAogICAgICAgICAgaW46IHF1ZXJ5CiAgICAgICAgICBkZXNjcmlwdGlvbjogZW1haWwgb2YgdGhlIHVzZXIgdG8gdmFsaWRhdGUgaW4gU2xhY2sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgcmVzcG9uc2VzOgogICAgICAgIDIwMDoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTdWNjZXNzZnVsIHJlc3BvbnNlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL1NsYWNrVXNlclN0YXR1cyIKICAgICAgICA0MDQ6CiAgICAgICAgICBkZXNjcmlwdGlvbjogVXNlciBub3QgZm91bmQKICAgICAgICA1MDA6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgc2VydmVyIGVycm9yCmRlZmluaXRpb25zOgogIFNsYWNrVXNlcjoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGZpcnN0X25hbWU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGxhc3RfbmFtZToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgdGl0bGU6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgIGVtYWlsOgogICAgICAgIHR5cGU6IHN0cmluZwogIFNsYWNrVXNlclN0YXR1czoKICAgIHR5cGU6IG9iamVjdAogICAgcHJvcGVydGllczoKICAgICAgaXNBY3RpdmU6CiAgICAgICAgdHlwZTogYm9vbGVhbgpzZWN1cml0eURlZmluaXRpb25zOgogICAgWHBsb3JlcnNBUElLZXk6CiAgICAgIHR5cGU6IGFwaUtleQogICAgICBpbjogaGVhZGVyCiAgICAgIG5hbWU6IHgtYXBpLWtleQp4LWdvb2dsZS1lbmRwb2ludHM6CiAgLSBuYW1lOiB4cGxvcmVycy1hcGktZGV2LTJqYXRudnkxZDRkYnEuYXBpZ2F0ZXdheS5wcmFzLXNhbmRib3gtNDA1NDEwLmNsb3VkLmdvb2cKICAgIGFsbG93Q29yczogdHJ1ZQo=" -> (known after apply) # forces replacement # (1 unchanged attribute hidden) } } } # google_api_gateway_gateway.xplorers_api_gateway will be updated in-place ~ resource "google_api_gateway_gateway" "xplorers_api_gateway" { ~ api_config = "projects/630923649102/locations/global/apis/xplorers-api-dev/configs/xplorers-api-config-240928055510" -> (known after apply) id = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" name = "projects/pras-sandbox-405410/locations/us-central1/gateways/xplorers-api-gateway-dev" # (8 unchanged attributes hidden) } # google_cloud_run_service.xplorers_backend will be updated in-place ~ resource "google_cloud_run_service" "xplorers_backend" { id = "locations/us-central1/namespaces/pras-sandbox-405410/services/xplorers-service-dev" name = "xplorers-service-dev" # (4 unchanged attributes hidden) ~ template { ~ spec { # (4 unchanged attributes hidden) ~ containers { ~ image = "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:36ca926" -> "us-central1-docker.pkg.dev/pras-sandbox-405410/xplorers-artifact-repo/xplorers-backend-service:245a1be" name = null # (3 unchanged attributes hidden) # (4 unchanged blocks hidden) } } # (1 unchanged block hidden) } # (2 unchanged blocks hidden) } Plan: 1 to add, 2 to change, 1 to destroy. ───────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. ```

Pushed by: @samurato, Action: pull_request