Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@abnegate
Copy link
Member

What does this PR do?

(Provide a description of what this PR does and why it's needed.)

Test Plan

(Write your test plan here. If you changed any code, please provide us with clear instructions on how you verified your changes work. Screenshots may also be helpful.)

Related PRs and Issues

  • (Related PR or issue)

Checklist

  • Have you read the Contributing Guidelines on issues?
  • If the PR includes a change to an API's metadata (desc, label, params, etc.), does it also include updated API specs and example docs?

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 30, 2025

📝 Walkthrough

Walkthrough

This pull request adds new VCS repository sources to composer.json, updates email template styling to use a dynamic accent color variable, introduces a new email template for export failure notifications, and bumps versions for 16+ SDK packages across client, console, and server configurations. Changes are configuration and template updates with no modifications to core logic.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • composer.json repository additions: Verify VCS URLs are valid and correctly formatted
  • Email template changes: Confirm accent color variable substitution works across email clients and new export-failed template renders correctly
  • platforms.php SDK version bumps: Review version update consistency across SDK families and verify no dependency conflicts between related packages (e.g., between client and server SDKs)

Possibly related PRs

Suggested reviewers

  • loks0n

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Title Check ⚠️ Warning The pull request title "Add operator support" does not match the actual changes in the changeset. The modifications include adding a repositories section to composer.json, updating email template colors to use dynamic accent colors, adding a new email template for export failures, and bumping multiple SDK versions across platforms. None of these changes relate to operator support functionality, making the title misleading and unrelated to the actual work being performed.
Description Check ❓ Inconclusive The pull request description contains only the repository's default contribution template with all placeholder sections left unfilled (e.g., "What does this PR do?", "Test Plan", "Related PRs and Issues" are all empty). While this doesn't describe anything explicitly unrelated to the changeset, it provides no meaningful information about the actual modifications, making it too vague and generic to properly understand the PR's intent or objectives.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat-operators

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 600da2a and 2db205d.

⛔ Files ignored due to path filters (286)
  • app/config/specs/open-api3-1.8.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.8.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.8.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-client.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-console.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-server.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-client.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-console.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-server.json is excluded by !app/config/specs/**
  • composer.lock is excluded by !**/*.lock
  • docs/examples/1.8.x/client-android/java/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-apple/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-flutter/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-react-native/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-web/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/functions/list-templates.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/migrations/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/projects/list-keys.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/projects/list-platforms.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/projects/list-webhooks.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/projects/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/proxy/list-rules.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tablesdb/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tablesdb/list-tables.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tablesdb/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/teams/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/tokens/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/users/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/console-web/examples/vcs/list-installations.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tablesdb/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tablesdb/list-tables.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tablesdb/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/tokens/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dart/examples/users/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tablesdb/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tablesdb/list-tables.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tablesdb/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/tokens/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-dotnet/examples/users/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tablesdb/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tablesdb/list-tables.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tablesdb/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/tokens/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-go/examples/users/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tablesdb/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tablesdb/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tablesdb/list-tables.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tablesdb/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/tokens/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/java/users/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/databases/list-attributes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/databases/list-collections.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/databases/list-indexes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/databases/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/functions/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/functions/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-message-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-messages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-provider-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-providers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-subscriber-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-subscribers.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-targets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-topic-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/messaging/list-topics.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/sites/list-deployments.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/sites/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/sites/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/storage/list-buckets.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/list-columns.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/list-indexes.md is excluded by !docs/examples/**
📒 Files selected for processing (3)
  • app/config/locale/templates/email-base-styled.tpl (1 hunks)
  • app/config/locale/templates/email-export-failed.tpl (1 hunks)
  • app/config/platforms.php (16 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (19)
  • GitHub Check: E2E Service Test (Webhooks)
  • GitHub Check: E2E Service Test (Tokens)
  • GitHub Check: E2E Service Test (Proxy)
  • GitHub Check: E2E Service Test (Sites)
  • GitHub Check: E2E Service Test (Health)
  • GitHub Check: E2E Service Test (Avatars)
  • GitHub Check: E2E Service Test (Functions)
  • GitHub Check: E2E Service Test (Projects)
  • GitHub Check: E2E Service Test (Locale)
  • GitHub Check: E2E Service Test (GraphQL)
  • GitHub Check: E2E Service Test (Console)
  • GitHub Check: E2E Service Test (FunctionsSchedule)
  • GitHub Check: E2E Service Test (Databases/Legacy)
  • GitHub Check: E2E Service Test (Dev Keys)
  • GitHub Check: Unit Test
  • GitHub Check: E2E General Test
  • GitHub Check: E2E Service Test (Site Screenshots)
  • GitHub Check: Setup & Build SDK
  • GitHub Check: scan
🔇 Additional comments (3)
app/config/locale/templates/email-base-styled.tpl (1)

23-24: Good consistency improvement!

Using {{accentColor}} in the dark mode button styles aligns with the existing usage in the default button styles (lines 128, 137), ensuring consistent theming across color schemes.

app/config/locale/templates/email-export-failed.tpl (1)

1-8: All verification checks passed—no issues found.

The template is properly integrated and all placeholder variables are correctly populated:

  • ✓ Registered in email system: Referenced in src/Appwrite/Platform/Workers/Migrations.php for export failure notifications
  • ✓ Placeholders populated: {{hello}}, {{body}}, {{footer}}, {{thanks}}, {{signature}} are all set via setParam() calls
  • ✓ Base template integration: The rendered content is wrapped by email-base-styled.tpl via setBodyTemplate() in the mail queue

The template structure is clean and follows the established pattern used by other email templates in the system.

app/config/platforms.php (1)

14-421: All SDK versions are published and available—PR is ready to merge.

Verification confirms all 16 SDK versions referenced in platforms.php are published:

  • Web SDK 21.4.0 ✓
  • Node.js SDK 20.3.0 ✓
  • React Native SDK 0.18.0 ✓
  • CLI 11.1.0 ✓
  • Flutter SDK 20.3.0 ✓
  • Dart SDK 19.3.0 ✓
  • Python SDK 13.6.0 ✓
  • Ruby SDK 19.3.0 ✓
  • PHP SDK 17.5.0 ✓ (released today)

All version bumps follow semantic versioning and are stable for the 1.8.x release branch.

Note: The PR title "Add operator support" does not match the changes shown (SDK version updates). If operator support is included in these SDK releases, clarify in the PR description; otherwise, consider updating the title to reflect the actual scope.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Oct 30, 2025

Security Scan Results for PR

Docker Image Scan Results

Package Version Vulnerability Severity
binutils 2.44-r2 CVE-2025-5244 HIGH
binutils 2.44-r2 CVE-2025-5245 HIGH
libxml2 2.13.8-r0 CVE-2025-49794 CRITICAL
libxml2 2.13.8-r0 CVE-2025-49796 CRITICAL
libxml2 2.13.8-r0 CVE-2025-49795 HIGH
libxml2 2.13.8-r0 CVE-2025-6021 HIGH
pcre2 10.43-r1 CVE-2025-58050 CRITICAL
golang.org/x/crypto v0.31.0 CVE-2025-22869 HIGH
golang.org/x/oauth2 v0.24.0 CVE-2025-22868 HIGH
stdlib 1.22.10 CVE-2025-47907 HIGH
stdlib 1.22.10 CVE-2025-47912 HIGH
stdlib 1.22.10 CVE-2025-58183 HIGH
stdlib 1.22.10 CVE-2025-58186 HIGH
stdlib 1.22.10 CVE-2025-58187 HIGH
stdlib 1.22.10 CVE-2025-58188 HIGH
stdlib 1.22.10 CVE-2025-61724 HIGH

Source Code Scan Results

🎉 No vulnerabilities found!

@github-actions
Copy link

github-actions bot commented Oct 30, 2025

✨ Benchmark results

  • Requests per second: 1,129
  • Requests with 200 status code: 203,214
  • P99 latency: 0.170129526

⚡ Benchmark Comparison

Metric This PR Latest version
RPS 1,129 1,131
200 203,214 203,680
P99 0.170129526 0.180261736

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
tests/e2e/Services/Databases/TablesDB/DatabasesBase.php (3)

3113-3115: Reduce flakiness: replace fixed sleeps with readiness polling.
Polling table columns until status=available (or a short timeout) is more robust than sleep(2). Suggest a small helper that GETs columns and exits when all expected keys report status=available.


3142-3258: Add negative-path coverage for operator misuse.
Great success-path checks. Add a few failure cases to lock contract: increment on string, arrayAppend on non-array, and stringConcat on integer should 400.

Apply this minimal diff after the stringConcat assertion:

@@
         $this->assertEquals('Original Appended', $updated['body']['tagline']);
 
+        // Negative: numeric op on string should fail
+        $bad = $this->client->call(Client::METHOD_PATCH, '/tablesdb/' . $databaseId . '/tables/' . $tableId . '/rows/' . $rowId, array_merge([
+            'content-type' => 'application/json',
+            'x-appwrite-project' => $this->getProject()['$id'],
+        ], $this->getHeaders()), [
+            'data' => [
+                'title' => Operator::increment(1)->toString(),
+            ],
+        ]);
+        $this->assertEquals(400, $bad['headers']['status-code']);
+
+        // Negative: array op on non-array should fail
+        $bad = $this->client->call(Client::METHOD_PATCH, '/tablesdb/' . $databaseId . '/tables/' . $tableId . '/rows/' . $rowId, array_merge([
+            'content-type' => 'application/json',
+            'x-appwrite-project' => $this->getProject()['$id'],
+        ], $this->getHeaders()), [
+            'data' => [
+                'title' => Operator::arrayAppend(['x'])->toString(),
+            ],
+        ]);
+        $this->assertEquals(400, $bad['headers']['status-code']);
+
+        // Negative: string op on integer should fail
+        $bad = $this->client->call(Client::METHOD_PATCH, '/tablesdb/' . $databaseId . '/tables/' . $tableId . '/rows/' . $rowId, array_merge([
+            'content-type' => 'application/json',
+            'x-appwrite-project' => $this->getProject()['$id'],
+        ], $this->getHeaders()), [
+            'data' => [
+                'releaseYear' => Operator::stringConcat('x')->toString(),
+            ],
+        ]);
+        $this->assertEquals(400, $bad['headers']['status-code']);

3335-3407: Tighten bulk assertions and add a control row.

  • Use exact count (2) to keep the test deterministic.
  • Create a non-matching row and verify it’s not updated.

Apply this diff:

@@
-        $this->assertEquals(201, $row1['headers']['status-code']);
-        $this->assertEquals(201, $row2['headers']['status-code']);
+        $this->assertEquals(201, $row1['headers']['status-code']);
+        $this->assertEquals(201, $row2['headers']['status-code']);
+
+        // Control row that must not be touched by bulk update
+        $control = $this->client->call(Client::METHOD_POST, '/tablesdb/' . $databaseId . '/tables/' . $tableId . '/rows', array_merge([
+            'content-type' => 'application/json',
+            'x-appwrite-project' => $this->getProject()['$id'],
+        ], $this->getHeaders()), [
+            'rowId' => ID::unique(),
+            'data' => [
+                'title' => 'Unrelated',
+                'releaseYear' => 1999,
+                'actors' => [],
+                'birthDay' => '2020-01-01 12:00:00',
+            ],
+            'permissions' => [
+                Permission::read(Role::users()),
+                Permission::update(Role::users()),
+                Permission::delete(Role::users()),
+            ],
+        ]);
+        $this->assertEquals(201, $control['headers']['status-code']);
@@
-        $this->assertEquals(200, $bulkUpdate['headers']['status-code']);
-        $this->assertGreaterThanOrEqual(2, $bulkUpdate['body']['total']);
+        $this->assertEquals(200, $bulkUpdate['headers']['status-code']);
+        $this->assertEquals(2, $bulkUpdate['body']['total']);
@@
         $this->assertEquals(200, $verify2['headers']['status-code']);
         $this->assertEquals(2031, $verify2['body']['releaseYear']);
+
+        // Verify control row unchanged
+        $verify3 = $this->client->call(Client::METHOD_GET, '/tablesdb/' . $databaseId . '/tables/' . $tableId . '/rows/' . $control['body']['$id'], array_merge([
+            'content-type' => 'application/json',
+            'x-appwrite-project' => $this->getProject()['$id'],
+        ], $this->getHeaders()));
+        $this->assertEquals(200, $verify3['headers']['status-code']);
+        $this->assertEquals(1999, $verify3['body']['releaseYear']);
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f8afe69 and 600da2a.

⛔ Files ignored due to path filters (1)
  • composer.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • composer.json (1 hunks)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Action.php (2 hunks)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php (1 hunks)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php (1 hunks)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php (1 hunks)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php (1 hunks)
  • tests/e2e/Services/Databases/Legacy/DatabasesBase.php (2 hunks)
  • tests/e2e/Services/Databases/TablesDB/DatabasesBase.php (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php
  • composer.json
  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-05-10T04:12:13.037Z
Learnt from: ItzNotABug
Repo: appwrite/appwrite PR: 9693
File: src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Delete.php:85-86
Timestamp: 2025-05-10T04:12:13.037Z
Learning: The class `Appwrite\Platform\Modules\Databases\Http\Databases\Collections\Indexes\Action` defines a method `getGrantParentNotFoundException()` which is used to handle cases where a parent resource (like a database collection) is not found.

Applied to files:

  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Action.php
📚 Learning: 2025-06-19T09:20:03.312Z
Learnt from: ItzNotABug
Repo: appwrite/appwrite PR: 9693
File: src/Appwrite/Platform/Modules/Databases/Http/Databases/Tables/Update.php:57-59
Timestamp: 2025-06-19T09:20:03.312Z
Learning: In table-related endpoints (such as `src/Appwrite/Platform/Modules/Databases/Http/Databases/Tables/Update.php`), parameter descriptions should use "table" and "row" terminology instead of "collection" and "document" for clarity and consistency.

Applied to files:

  • src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php
🧬 Code graph analysis (4)
src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Action.php (1)
src/Appwrite/Extend/Exception.php (1)
  • Exception (7-464)
src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php (1)
src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Action.php (1)
  • parseOperators (350-387)
tests/e2e/Services/Databases/Legacy/DatabasesBase.php (3)
tests/e2e/Services/Databases/TablesDB/DatabasesBase.php (2)
  • testOperators (3012-3258)
  • testBulkOperators (3260-3408)
tests/e2e/Client.php (1)
  • Client (8-342)
tests/e2e/Scopes/Scope.php (1)
  • getHeaders (145-145)
tests/e2e/Services/Databases/TablesDB/DatabasesBase.php (2)
tests/e2e/Services/Databases/Legacy/DatabasesBase.php (2)
  • testOperators (3106-3352)
  • testBulkOperators (3354-3502)
tests/e2e/Client.php (1)
  • Client (8-342)
🔇 Additional comments (6)
tests/e2e/Services/Databases/TablesDB/DatabasesBase.php (1)

13-13: LGTM: Operator import is correct and required for tests.

tests/e2e/Services/Databases/Legacy/DatabasesBase.php (2)

3106-3352: Thorough single-document operator coverage. These assertions exercise every new operator path—numeric delta, array prepend/append, string concat, and upsert reuse—so we’ll quickly catch regressions in parseOperators across legacy documents.


3354-3502: Nice bulk-operator validation. Verifying the patch-and-query flow plus the follow-up reads ensures bulk updates honor operator semantics as well as query scoping, which is exactly what the new parser needs.

src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php (1)

121-122: LGTM!

The placement of parseOperators is correct—it transforms operator JSON strings after collection validation but before permission aggregation and the upsert flow. This aligns with the preprocessing pattern applied in other document-handling endpoints.

src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Action.php (2)

10-10: LGTM!

The import is necessary for the parseOperators method implementation.


342-350: LGTM!

The method signature and documentation are clear and appropriate. The return type correctly reflects that the array contains mixed value types after operator parsing.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 3, 2025

Open in StackBlitz

npm i https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@10735

commit: 2db205d

@abnegate abnegate merged commit 1f173eb into 1.8.x Nov 3, 2025
43 checks passed
@abnegate abnegate deleted the feat-operators branch November 3, 2025 06:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants