-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Chore sync 1.8.0 into main #10677
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chore sync 1.8.0 into main #10677
Conversation
Add spatial column validation during required mode and tests for exis…
Sub query variables order by
bump database 1.5.0
Don't remove required attributes
Catch query exception on bulk update/delete
# Conflicts: # composer.lock # src/Appwrite/Platform/Workers/StatsResources.php # src/Appwrite/Platform/Workers/StatsUsage.php
update cli to 10.0.0
…and-update-docs-3769 Add type_enum support and update docs
Update .NET SDK to 0.21.2 and improve release detection
Fix: make methods protected for extending
chore: use bcc only emails for smtp
In older versions of Appwrite, the internal ID was the $internalId attribute. However, it has now changed to $sequence so that it can align with the publicly exposed attribute for an auto-incrementing ID. The problem with this change is that data in the cache still references the old $internalId attribute, which can lead to inconsistencies and errors when accessing cached documents. To resolve this issue, we need to clear the cache for all collections and documents at the beginning of the migration so that the new $sequence attribute is used.
Appwrite 1.6.1 added these attributes, but the migration was never updated to include those new attributes
1. Remove PR authors because they don't render properly anyways 2. Format PR links to use markdown style links instead of plain URLs
📝 WalkthroughWalkthroughThis PR introduces version 1.8.0 of Appwrite with major infrastructure and feature updates. Key changes include: adding a new TablesDB service with transactions/table/row/column support; introducing associated database collections, error codes, and permissions; updating email templates with new font loading and button styling; implementing locale validation in CI via a new Node.js script; removing GitHub auto-labeling workflow; updating SDK versions and adding changelog references; extending database permissions and scopes; and updating Docker base image and configuration variables for DNS/domain validation. Estimated code review effort🎯 5 (Critical) | ⏱️ ~90+ minutes The diff spans heterogeneous changes across 100+ files including new database schemas (transactions/transactionLogs collections), dozens of new error constants and permissions, extensive locale translations across 60+ language files with repeated templating changes, new CI workflow scripts, modified email templates with structural changes, and updated service configurations. While many individual changes are repetitive (e.g., translation updates), the breadth of domains (infrastructure, database schema, permissions, localization, CI/CD, email rendering) and the density of logic changes (new collections with indexes, permission matrices, event definitions) warrant critical-level review effort. Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
commit: |
Security Scan Results for PRDocker Image Scan Results
Source Code Scan Results🎉 No vulnerabilities found! |
✨ Benchmark results
⚡ Benchmark Comparison
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (8)
app/config/locale/translations/ml.json (2)
19-19: Template variable case mismatch:{{Project}}should be lowercase.Line 19 uses
{{Project}}with a capital P, while all other occurrences throughout the file use lowercase{{project}}. This inconsistency will cause template rendering to fail for email recovery messages, as most template engines are case-sensitive.- "emails.recovery.body": "നിങ്ങളുടെ {{Project}} രഹസ്യവാക്ക് പുനക്രമീകരിക്കുന്നതിന് ഈ ലിങ്ക് പിന്തുടരുക.", + "emails.recovery.body": "നിങ്ങളുടെ {{project}} രഹസ്യവാക്ക് പുനക്രമീകരിക്കുന്നതിന് ഈ ലിങ്ക് പിന്തുടരുക.",
1-254: Fix template variable case mismatch in emails.recovery.body.Line 19 contains
{{Project}}with uppercase P, which should be{{project}}(lowercase) to match the application's template variable naming convention. This is the only instance of this error across all locale files.Update line 19 from:
"emails.recovery.body": "നിങ്ങളുടെ {{Project}} രഹസ്യവാക്ക് പുനക്രമീകരിക്കുന്നതിന് ഈ ലിങ്ക് പിന്തുടരുക."to:
"emails.recovery.body": "നിങ്ങളുടെ {{project}} രഹസ്യവാക്ക് പുനക്രമീകരിക്കുന്നതിന് ഈ ലിങ്ക് പിന്തുടരുക."app/config/locale/translations/sa.json (1)
236-241: Remove Arabic translations mixed into Sanskrit locale file.Lines 236–241 of
app/config/locale/translations/sa.jsoncontain Arabic translations that do not belong in the Sanskrit locale file. These lines should be removed entirely.Verification confirms: Lines 236–241 contain Arabic text (e.g., "اضغط على الزر أدناه..."), while the surrounding context (lines 230–235) contains proper Sanskrit translations and lines 242+ continue with Sanskrit. The same 6 keys (
emails.magicSession.optionButton,buttonText,clientInfo,sms.verification.body,securityPhrase,optionUrl) are correctly translated in Arabic inar.json, confirming this is a locale mismatch.Remove the following lines:
- "emails.magicSession.optionButton": "اضغط على الزر أدناه لتسجيل الدخول بأمان إلى حساب {{project}} الخاص بك. سينتهي في غضون ساعة واحدة.", - "emails.magicSession.buttonText": "تسجيل الدخول إلى {{project}}", - "emails.magicSession.clientInfo": "هذا الطلب لتسجيل الدخول قد تم باستخدام {{agentClient}} على {{agentDevice}} {{agentOs}}. إذا لم تطلب تسجيل الدخول، يمكنك تجاهل هذا البريد الإلكتروني بأمان.", - "sms.verification.body": "{{secret}}", - "emails.magicSession.securityPhrase": "العبارة الأمنية لهذا البريد الإلكتروني هي {{phrase}}. يمكنك الوثوق بهذا البريد الإلكتروني إذا كانت هذه العبارة متطابقة مع العبارة المعروضة أثناء تسجيل الدخول.", - "emails.magicSession.optionUrl": "إذا لم تتمكن من تسجيل الدخول باستخدام الزر أعلاه، يرجى زيارة الرابط التالي:",app/config/locale/translations/hy.json (1)
233-238: Add missing "emails.magicSession.preview" translation to hy.json.During verification, I found that hy.json is missing the
emails.magicSession.previewkey, which is required by account.php (line 2045). The code calls$locale->getText("emails.magicSession.preview"), but this key does not exist in the Armenian locale. The en.json file contains this key with the value: "Sign in to {{project}} with your secure link. Expires in 1 hour." Please add the Armenian translation for this key to complete the localization.Additionally, the verification confirms that:
- The removal of old magicSession.body and magicSession.footer keys is safe; they are not referenced anywhere in the codebase
- All other new magicSession keys (optionButton, buttonText, clientInfo, securityPhrase, optionUrl, etc.) are correctly present and properly mapped in the template rendering logic
app/config/locale/translations/si.json (1)
236-241: Remove Slovenian text from Sinhala locale file (si.json, lines 236-241).The contamination is confirmed. Lines 236–241 contain Slovenian text ("Kliknite", "gumb", "vstopite", "račun", "Poteče", "Prijavite") in a Sinhala translation file. These entries correctly exist in the Slovenian locale file (sl.json, lines 233–238). Lines 230–235 and 242+ in si.json contain proper Sinhala translations, confirming the Slovenian entries at 236–241 are misplaced.
Remove lines 236–241 in their entirety from si.json, as they belong only in sl.json.
app/config/locale/translations/sv.json (1)
237-241: Incorrect localization: Spanish text in Swedish translation file. Lines 237 and 241 contain Spanish translations instead of Swedish equivalents. Line 237 should translate the magic session button prompt to Swedish, and line 241 should provide the Swedish version of the alternative URL option.Apply this diff to restore Swedish translations:
- "emails.magicSession.buttonText": "Inicia sesión en {{project}}", + "emails.magicSession.buttonText": "Logga in i {{project}}",- "emails.magicSession.optionUrl": "Si no puedes iniciar sesión utilizando el botón de arriba, por favor visita el siguiente enlace:", + "emails.magicSession.optionUrl": "Om du inte kan logga in med knappen ovan, besök följande länk:",app/config/locale/translations/ur.json (1)
181-182: Data corruption: Country name entries are misaligned. Line 181 has an empty value forcountries.rw(Rwanda), while line 182 incorrectly assigns the Urdu word "روانڈا" (Rwanda) tocountries.sa(Saudi Arabia). This will cause incorrect country labels in the UI.Apply this diff to correct the country mappings:
- "countries.rw": "", - "countries.sa": "روانڈا", + "countries.rw": "روانڈا", + "countries.sa": "سعودی عرب",app/config/locale/translations/sn.json (1)
236-241: Incorrect language content in Shona locale file.Lines 236-241 contain French text in a Shona (sn) locale file. For example, line 236 shows "Cliquez sur le bouton ci-dessous..." which is French, not Shona. This appears to be a copy-paste error from the French locale.
Consider verifying the correct Shona translations for these keys:
emails.magicSession.optionButton(line 236)emails.magicSession.buttonText(line 237)emails.magicSession.clientInfo(line 238)emails.magicSession.securityPhrase(line 240)emails.magicSession.optionUrl(line 241)
🧹 Nitpick comments (14)
app/cli.php (1)
199-213: Consider whether domain-specific publisher resources need differentiation.All five new publisher resources (
publisherDatabases,publisherFunctions,publisherMigrations,publisherStatsUsage,publisherMessaging) currently return the sameBrokerPoolinstance. If these are meant to represent logically separate message queues or publishers, they should be configured differently. If they're intended to share the same underlying broker pool, this duplication might not be necessary.Based on learnings
Is this pattern preparatory for future differentiation (e.g., separate queue configurations), or could these be consolidated?
app/config/locale/templates/email-base-styled.tpl (4)
31-41: Resolve conflicting .main padding (0 overrides 32px).You set padding twice; the latter wins and zeroes it. Pick one to avoid surprises.
.main { - padding: 32px; line-height: 1.5; color: #616b7c; font-size: 15px; font-weight: 400; font-family: "Inter", sans-serif; background-color: #ffffff; margin: 0; padding: 0; }
146-149: Preheader should be hidden from AT as well.Add aria-hidden/role to ensure screen readers don’t announce the preview text.
-<div style="display: none; overflow: hidden; max-height: 0; max-width: 0; opacity: 0; line-height: 1px;"> +<div aria-hidden="true" role="presentation" style="display: none; overflow: hidden; max-height: 0; max-width: 0; opacity: 0; line-height: 1px;"> {{preview}} <div>{{previewWhitespace}}</div> </div>
4-21: Optional: Prefer local() sources before remote fonts.Adding local() improves performance/fallback when the font is installed.
@font-face { font-family: 'Inter'; - src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2'); + src: local('Inter'), local('Inter Regular'), + url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'DM Sans'; - src: url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2'); + src: local('DM Sans'), local('DMSans-SemiBold'), + url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2'); font-weight: 600; font-style: normal; font-display: swap; }
192-219: Add alt text on social icons for accessibility.Icons lack alt text; provide short alts.
-<img src="https://cloud.appwrite.io/images/mails/x.png" height="24" width="24" /> +<img src="https://cloud.appwrite.io/images/mails/x.png" height="24" width="24" alt="X (Twitter) icon" /> ... -<img src="https://cloud.appwrite.io/images/mails/discord.png" height="24" width="24" /> +<img src="https://cloud.appwrite.io/images/mails/discord.png" height="24" width="24" alt="Discord icon" /> ... -<img src="https://cloud.appwrite.io/images/mails/github.png" height="24" width="24" /> +<img src="https://cloud.appwrite.io/images/mails/github.png" height="24" width="24" alt="GitHub icon" />.github/workflows/static-analysis/locale/index.js (4)
11-14: Allow CI overrides via env vars.Let STRICT/FALLBACK_LOCALE control behavior without code edits.
-const config = { - strict: false, - fallbackLocale: "en.json", -}; +const config = { + strict: process.env.STRICT === "true", + fallbackLocale: process.env.FALLBACK_LOCALE || "en.json", +};
49-56: Add file context for JSON parse errors.Surface the failing filename to speed up fixes.
- const content = await readFile(filePath, "utf8"); - const translations = JSON.parse(content); + const content = await readFile(filePath, "utf8"); + let translations; + try { + translations = JSON.parse(content); + } catch (e) { + console.error(`Invalid JSON in ${filePath}`); + throw e; + } ... - const content = await readFile(path, "utf8"); - const translations = JSON.parse(content); + const content = await readFile(path, "utf8"); + let translations; + try { + translations = JSON.parse(content); + } catch (e) { + console.err 5DA9 or(`Invalid JSON in ${path}`); + throw e; + }Also applies to: 70-75
87-103: Wording: not always the fallback locale.Message should say “Locale … is missing …”.
- console.error( - `\nERROR: Fallback locale (${localeToCheck}) is missing ${missingKeys.length} key(s):`, - ); + console.error( + `\nERROR: Locale (${localeToCheck}) is missing ${missingKeys.length} key(s):`, + ); ... - console.log( - `\nSUCCESS: Fallback locale (${localeToCheck}) contains all ${allKeys.size} keys.`, - ); + console.log( + `\nSUCCESS: Locale (${localeToCheck}) contains all ${allKeys.size} keys.`, + );
106-109: Fix summary grammar to report missing keys vs locales.- console.log(`\n${missingLocaleCount} locales missing found across ${errorsCount} locales.`); + console.log(`\n${missingLocaleCount} missing key(s) found across ${errorsCount} locale(s).`);app/config/locale/templates/email-base.tpl (3)
31-42: Clean up duplicate body styles (padding/line-height).Later rules override earlier ones; keep a single intent.
body { - padding: 32px; - line-height: 1.5; + /* padding intentionally 0 for email client consistency */ color: #616b7c; font-size: 15px; font-weight: 400; font-family: "Inter", sans-serif; background-color: #ffffff; margin: 0; padding: 0; - line-height: 150%; + line-height: 150%; }
126-129: Preheader should be hidden from AT as well.-<div style="display: none; overflow: hidden; max-height: 0; max-width: 0; opacity: 0; line-height: 1px;"> +<div aria-hidden="true" role="presentation" style="display: none; overflow: hidden; max-height: 0; max-width: 0; opacity: 0; line-height: 1px;"> {{preview}} <div>{{previewWhitespace}}</div> </div>
4-29: Optional: Prefer local() sources before remote fonts.@font-face { font-family: 'Inter'; - src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2'); + src: local('Inter'), local('Inter Regular'), + url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'DM Sans'; - src: url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2'); + src: local('DM Sans'), local('DMSans-SemiBold'), + url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2'); font-weight: 600; font-style: normal; font-display: swap; } @font-face { font-family: 'Poppins'; - src: url('https://assets.appwrite.io/fonts/poppins/poppins-v23-latin-regular.woff2') format('woff2'); + src: local('Poppins'), local('Poppins Regular'), + url('https://assets.appwrite.io/fonts/poppins/poppins-v23-latin-regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; }app/config/scopes.php (1)
61-66: Clarify rows scope wording.Make it explicit these are table rows.
- 'description' => 'Access to read your project\'s database rows', + 'description' => 'Access to read your project\'s database table rows', @@ - 'description' => 'Access to create, update, and delete your project\'s database rows', + 'description' => 'Access to create, update, and delete your project\'s database table rows',app/config/errors.php (1)
722-811: Consider abstracting duplicated error patterns.The error definitions for Tables/Rows/Columns mirror Collections/Documents/Attributes almost exactly, with only entity names changed. This creates significant duplication (e.g.,
ROW_NOT_FOUNDvsDOCUMENT_NOT_FOUND,COLUMN_NOT_FOUNDvsATTRIBUTE_NOT_FOUND).While this duplication provides clear, specific error messages, consider whether a more abstract approach might reduce maintenance burden. For example:
- Entity-agnostic error types with context
- Shared error message templates with entity substitution
However, given that this is a sync of an already-released version (1.8.0), and explicit error codes aid debugging and API clarity, the current approach is acceptable.
Note: This is an architectural suggestion for future consideration, not a blocker for this sync.
Also applies to: 878-987
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (165)
app/config/avatars/credit-cards/unionpay.pngis excluded by!**/*.pngapp/config/specs/open-api3-1.7.x-client.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-1.7.x-console.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-1.7.x-server.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-1.8.x-client.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-1.8.x-console.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-1.8.x-server.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-latest-client.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-latest-console.jsonis excluded by!app/config/specs/**app/config/specs/open-api3-latest-server.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.7.x-client.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.7.x-console.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.7.x-server.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.8.x-client.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.8.x-console.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-1.8.x-server.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-latest-client.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-latest-console.jsonis excluded by!app/config/specs/**app/config/specs/swagger2-latest-server.jsonis excluded by!app/config/specs/**composer.lockis excluded by!**/*.lockdocs/examples/1.7.x/client-android/java/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/java/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/java/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/java/functions/create-execution.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/kotlin/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/kotlin/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/kotlin/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-android/kotlin/functions/create-execution.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-apple/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-apple/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-apple/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-flutter/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-flutter/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-flutter/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-graphql/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-graphql/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-graphql/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-graphql/examples/databases/update-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-graphql/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-react-native/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-react-native/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-react-native/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-rest/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-rest/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-web/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-web/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/client-web/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-cli/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-cli/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/proxy/create-redirect-rule.mdis excluded by!docs/examples/**docs/examples/1.7.x/console-web/examples/vcs/get-repository-contents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dart/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dart/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dart/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dart/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-deno/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dotnet/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dotnet/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dotnet/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-dotnet/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-go/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-go/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-go/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-go/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-go/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/create-string-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/delete-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/update-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/update-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/update-string-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-graphql/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/java/functions/create-execution.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-kotlin/kotlin/functions/create-execution.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-nodejs/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-nodejs/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-nodejs/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-nodejs/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-php/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-python/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-rest/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-rest/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-rest/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-ruby/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/create-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/create-documents.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/decrement-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/increment-document-attribute.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/upsert-document.mdis excluded by!docs/examples/**docs/examples/1.7.x/server-swift/examples/databases/upsert-documents.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-anonymous-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-email-password-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-email-token.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-email-verification.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-jwt.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-magic-url-token.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-mfa-authenticator.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-mfa-challenge.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-mfa-recovery-codes.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-o-auth-2-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-o-auth-2-token.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-phone-token.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-phone-verification.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-push-target.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-recovery.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create-verification.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/create.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/delete-identity.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/delete-mfa-authenticator.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/delete-push-target.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/delete-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/delete-sessions.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/get-mfa-recovery-codes.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/get-prefs.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/get-session.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/get.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/list-identities.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/list-logs.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/list-mfa-factors.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/list-sessions.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/update-email-verification.mdis excluded by!docs/examples/**docs/examples/1.8.x/client-android/java/account/update-email.mdis excluded by!docs/examples/**
📒 Files selected for processing (107)
.env(1 hunks).github/labeler.yml(0 hunks).github/workflows/auto-label-issue.yml(0 hunks).github/workflows/static-analysis.yml(1 hunks).github/workflows/static-analysis/locale/index.js(1 hunks).github/workflows/static-analysis/locale/package.json(1 hunks).github/workflows/tests.yml(11 hunks).gitignore(1 hunks)CHANGES.md(1 hunks)Dockerfile(2 hunks)README-CN.md(3 hunks)README.md(3 hunks)app/cli.php(2 hunks)app/config/avatars/credit-cards.php(1 hunks)app/config/collections/platform.php(1 hunks)app/config/collections/projects.php(4 hunks)app/config/console.php(2 hunks)app/config/errors.php(10 hunks)app/config/events.php(4 hunks)app/config/locale/templates/email-base-styled.tpl(3 hunks)app/config/locale/templates/email-base.tpl(3 hunks)app/config/locale/templates/email-inner-base.tpl(1 hunks)app/config/locale/templates/email-magic-url.tpl(1 hunks)app/config/locale/templates/email-mfa-challenge.tpl(1 hunks)app/config/locale/templates/email-otp.tpl(2 hunks)app/config/locale/templates/email-smtp-test.tpl(1 hunks)app/config/locale/templates/email-webhook-failed.tpl(1 hunks)app/config/locale/translations/af.json(2 hunks)app/config/locale/translations/ar-ma.json(2 hunks)app/config/locale/translations/ar.json(2 hunks)app/config/locale/translations/as.json(3 hunks)app/config/locale/translations/az.json(2 hunks)app/config/locale/translations/be.json(3 hunks)app/config/locale/translations/bg.json(1 hunks)app/config/locale/translations/bh.json(3 hunks)app/config/locale/translations/bn.json(2 hunks)app/config/locale/translations/bs.json(1 hunks)app/config/locale/translations/ca.json(2 hunks)app/config/locale/translations/cs.json(1 hunks)app/config/locale/translations/da.json(2 hunks)app/config/locale/translations/de.json(3 hunks)app/config/locale/translations/el.json(2 hunks)app/config/locale/translations/en.json(4 hunks)app/config/locale/translations/eo.json(2 hunks)app/config/locale/translations/es.json(2 hunks)app/config/locale/translations/fa.json(2 hunks)app/config/locale/translations/fi.json(1 hunks)app/config/locale/translations/fo.json(1 hunks)app/config/locale/translations/fr.json(2 hunks)app/config/locale/translations/ga.json(2 hunks)app/config/locale/translations/gu.json(2 hunks)app/config/locale/translations/he.json(2 hunks)app/config/locale/translations/hi.json(2 hunks)app/config/locale/translations/hr.json(2 hunks)app/config/locale/translations/hu.json(2 hunks)app/config/locale/translations/hy.json(1 hunks)app/config/locale/translations/id.json(2 hunks)app/config/locale/translations/is.json(1 hunks)app/config/locale/translations/it.json(2 hunks)app/config/locale/translations/ja.json(2 hunks)app/config/locale/translations/jv.json(2 hunks)app/config/locale/translations/km.json(1 hunks)app/config/locale/translations/kn.json(2 hunks)app/config/locale/translations/ko.json(2 hunks)app/config/locale/translations/la.json(3 hunks)app/config/locale/translations/lb.json(2 hunks)app/config/locale/translations/lt.json(2 hunks)app/config/locale/translations/lv.json(2 hunks)app/config/locale/translations/ml.json(3 hunks)app/config/locale/translations/mr.json(2 hunks)app/config/locale/translations/ms.json(2 hunks)app/config/locale/translations/nb.json(2 hunks)app/config/locale/translations/ne.json(2 hunks)app/config/locale/translations/nl.json(2 hunks)app/config/locale/translations/nn.json(3 hunks)app/config/locale/translations/or.json(2 hunks)app/config/locale/translations/pa.json(1 hunks)app/config/locale/translations/pl.json(2 hunks)app/config/locale/translations/pt-br.json(2 hunks)app/config/locale/translations/pt-pt.json(2 hunks)app/config/locale/translations/ro.json(2 hunks)app/config/locale/translations/ru.json(2 hunks)app/config/locale/translations/sa.json(2 hunks)app/config/locale/translations/sd.json(3 hunks)app/config/locale/translations/si.json(2 hunks)app/config/locale/translations/sk.json(2 hunks)app/config/locale/translations/sl.json(1 hunks)app/config/locale/translations/sn.json(2 hunks)app/config/locale/translations/sq.json(1 hunks)app/config/locale/translations/sv.json(2 hunks)app/config/locale/translations/ta.json(2 hunks)app/config/locale/translations/te.json(2 hunks)app/config/locale/translations/th.json(2 hunks)app/config/locale/translations/tl.json(2 hunks)app/config/locale/translations/tr.json(2 hunks)app/config/locale/translations/uk.json(2 hunks)app/config/locale/translations/ur.json(2 hunks)app/config/locale/translations/vi.json(2 hunks)app/config/locale/translations/zh-cn.json(2 hunks)app/config/locale/translations/zh-tw.json(2 hunks)app/config/platforms.php(25 hunks)app/config/roles.php(5 hunks)app/config/scopes.php(2 hunks)app/config/services.php(2 hunks)app/config/templates/function.php(10 hunks)app/config/templates/site.php(1 hunks)app/config/variables.php(3 hunks)
⛔ Files not processed due to max files limit (27)
- app/controllers/api/account.php
- app/controllers/api/avatars.php
- app/controllers/api/console.php
- app/controllers/api/health.php
- app/controllers/api/messaging.php
- app/controllers/api/migrations.php
- app/controllers/api/project.php
- app/controllers/api/projects.php
- app/controllers/api/proxy.php
- app/controllers/api/storage.php
- app/controllers/api/teams.php
- app/controllers/api/users.php
- app/controllers/api/vcs.php
- app/controllers/general.php
- app/controllers/mock.php
- app/controllers/shared/api.php
- app/http.php
- app/init/constants.php
- app/init/database/filters.php
- app/init/resources.php
- app/realtime.php
- app/views/general/404.phtml
- app/views/general/error.phtml
- app/views/install/compose.phtml
- app/worker.php
- composer.json
- docker-compose.yml
💤 Files with no reviewable changes (2)
- .github/labeler.yml
- .github/workflows/auto-label-issue.yml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-22T06:23:32.026Z
Learnt from: ItzNotABug
PR: appwrite/appwrite#10348
File: app/controllers/shared/api.php:546-546
Timestamp: 2025-08-22T06:23:32.026Z
Learning: The Utopia\Queue\Broker\Pool class (aliased as BrokerPool) implements both Publisher and Consumer interfaces, making it directly compatible with constructors expecting Publisher parameters like Func::__construct(protected Publisher $publisher). No wrapping is needed.
Applied to files:
app/cli.php
🧬 Code graph analysis (3)
app/config/collections/projects.php (1)
src/Appwrite/Utopia/Response/Model/Database.php (1)
Database(8-72)
app/cli.php (1)
src/Appwrite/Utopia/Response/Model/Document.php (1)
Document(8-115)
app/config/errors.php (1)
src/Appwrite/Extend/Exception.php (1)
Exception(7-464)
🪛 dotenv-linter (4.0.0)
.env
[warning] 24-24: [UnorderedKey] The _APP_DNS key should go before the _APP_EDITION key
(UnorderedKey)
[warning] 25-25: [UnorderedKey] The _APP_DOMAIN key should go before the _APP_EDITION key
(UnorderedKey)
[warning] 26-26: [UnorderedKey] The _APP_CONSOLE_DOMAIN key should go before the _APP_CONSOLE_HOSTNAMES key
(UnorderedKey)
[warning] 27-27: [UnorderedKey] The _APP_DOMAIN_FUNCTIONS key should go before the _APP_EDITION key
(UnorderedKey)
[warning] 28-28: [UnorderedKey] The _APP_DOMAIN_SITES key should go before the _APP_EDITION key
(UnorderedKey)
[warning] 29-29: [UnorderedKey] The _APP_DOMAIN_TARGET_CNAME key should go before the _APP_EDITION key
(UnorderedKey)
[warning] 30-30: [UnorderedKey] The _APP_DOMAIN_TARGET_A key should go before the _APP_DOMAIN_TARGET_CNAME key
(UnorderedKey)
[warning] 31-31: [UnorderedKey] The _APP_DOMAIN_TARGET_AAAA key should go before the _APP_DOMAIN_TARGET_CNAME key
(UnorderedKey)
[warning] 32-32: [UnorderedKey] The _APP_DOMAIN_TARGET_CAA key should go before the _APP_DOMAIN_TARGET_CNAME key
(UnorderedKey)
🪛 markdownlint-cli2 (0.18.1)
CHANGES.md
73-73: Spaces inside emphasis markers
(MD037, no-space-in-emphasis)
What does this PR do?
Update the main branch with 1.8.0 release.
Test Plan
Automated tests
Related PRs and Issues
None
Checklist