-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Update documentation #10030
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 1.8.x
Are you sure you want to change the base?
Update documentation #10030
Conversation
📝 WalkthroughWalkthroughThis update introduces several key changes across the codebase. The email template for user actions (verification, recovery, invitation) now uses a styled button with localized text ( Possibly related PRs
Suggested reviewers
✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. 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)
Other keywords and placeholders
Documentation and Community
|
Security Scan Results for PRDocker Image Scan Results
Source Code Scan Results🎉 No vulnerabilities found! |
✨ Benchmark results
⚡ Benchmark Comparison
|
commit: |
…e-documentation # Conflicts: # .github/workflows/benchmark.yml
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: 12
🔭 Outside diff range comments (2)
app/config/locale/translations/ne.json (1)
239-239
: Foreign string slipped into Nepali file.Line 239 (
emails.magicSession.buttonText
) is still in French.-"emails.magicSession.buttonText": "Connectez-vous à {{project}}", +"emails.magicSession.buttonText": "आफ्नो {{project}} मा लगइन गर्नुहोस्",app/controllers/general.php (1)
59-764
: Consider refactoring the router function to reduce complexity.The static analysis correctly identifies that this function has become too complex:
- 706 lines of code (threshold: 100)
- 15 parameters (threshold: 10)
- Cyclomatic complexity of 126 (threshold: 10)
This makes the code difficult to maintain, test, and understand.
Consider breaking down the router function into smaller, focused functions:
- Extract deployment handling logic (lines 143-582) into a separate function
- Extract preview authorization logic (lines 223-282) into a separate function
- Extract execution handling (lines 511-654) into a separate function
- Consider using a configuration object instead of 15 parameters
Would you like me to help create a refactoring plan or open an issue to track this technical debt?
♻️ Duplicate comments (5)
bin/screenshot (1)
3-3
: Same process management concern as other shell scripts.The removal of
exec
here follows the same pattern as the worker scripts. While this might be less critical for CLI tools, it still changes process execution behavior.bin/worker-messaging (1)
3-3
: Same process management concern as other worker scripts.This follows the same pattern of removing
exec
as the other worker scripts, with the same potential implications for process management.bin/worker-certificates (1)
3-3
: Same process management concern as other worker scripts.This follows the same pattern of removing
exec
as the other worker scripts, with the same potential implications for process management.bin/doctor (1)
3-3
: Sameexec
removal concern as other CLI scripts.This change has the same process behavior implications as discussed in
bin/upgrade
. Ensure consistency across all CLI scripts is intentional.bin/worker-audits (1)
3-3
: Consider the impact on worker process lifecycle management.For worker scripts, removing
exec
may have more significant implications since workers are typically long-lived processes. Verify that signal handling and process monitoring tools can still manage these workers effectively.
🧹 Nitpick comments (13)
app/worker.php (1)
485-487
: Fix formatting and verify signal handling removal.Two issues here:
- Formatting: The static analysis tool correctly identifies that the opening parenthesis should be on the next line
- Signal handling: The simplified callback removes SIGTERM signal handling which could affect graceful shutdown
Apply this diff to fix the formatting:
- ->action(function () use ($workerName) { + ->action(function () use ($workerName) { Console::info("Worker $workerName started"); });Please verify that removing the SIGTERM signal handler doesn't impact graceful worker shutdown in production environments.
app/config/locale/translations/kn.json (1)
24-24
: Wording inconsistent with existing copy – prefer native term over transliteration.
Earlier strings in this file use the verb “ಮರುಹೊಂದಿಸಿ” (e.g., recovery.body). Using “ಮರುಸೆಟ್” mixes English transliteration with Kannada terminology and breaks consistency. Suggest switching to the established verb:-"emails.recovery.buttonText": "ಗುಪ್ತಪದವನ್ನು ಮರುಸೆಟ್ ಮಾಡಿ", +"emails.recovery.buttonText": "ಗುಪ್ತಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",app/config/locale/translations/af.json (1)
31-31
: Invitation button text OK but consider minor wording tweak.
Current wording “Aanvaar uitnodiging na {{team}}” is understandable, yet “vir” is slightly more idiomatic in Afrikaans than “na”.-"emails.invitation.buttonText": "Aanvaar uitnodiging na {{team}}", +"emails.invitation.buttonText": "Aanvaar uitnodiging vir {{team}}",Not critical – feel free to keep as is.
app/config/locale/translations/sn.json (1)
11-11
: Consider avoiding English words in the Shona string
"Gadzirisa password"
keeps the English word password instead of the usual Shona pasiwedhi.
If this is intentional for your audience, ignore; otherwise, update for consistency with the rest of the locale.Also applies to: 24-24, 31-31
app/config/locale/translations/ko.json (1)
11-11
: Minor wording polish for natural Korean
Current strings are technically correct but feel slightly awkward as CTA button labels.-"이메일 주소를 확인합니다" +"이메일 주소 확인하기" -"{{team}} 초대를 수락하기" +"{{team}} 초대 수락"No functional impact—purely a UX tweak. Feel free to ignore if you prefer existing wording.
Also applies to: 24-24, 31-31
app/config/locale/translations/la.json (1)
24-24
: Optional: translate “Reset password” into LatinMost of the file attempts Latin wording, so keeping this key in English is slightly inconsistent.
-"emails.recovery.buttonText": "Reset password", +"emails.recovery.buttonText": "Tesseram reconstitue",(No functional impact – ignore if English is intentional.)
app/config/locale/translations/eo.json (1)
10-10
: Esperanto labels are fine, but note wider inconsistency.The three added strings are good.
However, surrounding keys still mix “Parsvorta”/“Pasvorta” and inconsistent comma placement; consider a later sweep for overall consistency.Also applies to: 23-23, 30-30
app/config/locale/translations/ne.json (1)
11-11
: Minor wording tweak for recovery button.“रिसेट पासवर्ड” reads a bit unnatural compared with the imperative style used in the other two labels.
-"emails.recovery.buttonText": "रिसेट पासवर्ड", +"emails.recovery.buttonText": "पासवर्ड रिसेट गर्नुहोस्",Also applies to: 24-24, 31-31
app/config/locale/translations/sa.json (2)
11-11
: Hindi-Sanskrit mix – adjust to pure Sanskrit
"ईमेल-पत्त्रं सुनिश्चित करें"
ends with the Hindi imperative “करें”.
A fully-Sanskrit form keeps consistency with the rest of the file.-"emails.verification.buttonText": "ईमेल-पत्त्रं सुनिश्चित करें", +"emails.verification.buttonText": "ईमेल-पत्त्रं प्रमाणयतु",
24-24
: Same mix in recovery button text-"emails.recovery.buttonText": "गुप्तशब्दं पुनः स्थापित करें", +"emails.recovery.buttonText": "गुप्तशब्दं पुनः स्थापयतु",app/config/locale/translations/lb.json (1)
11-11
: Minor orthography nitpick
"E-Mail-Adress bestätegen"
mixes German spelling; the Luxembourgish form normally omits the accent:bestätegen
→bestätegen
.-"emails.verification.buttonText": "E-Mail-Adress bestätegen", +"emails.verification.buttonText": "E-Mail-Adress bestätegen",(optional hyphen / narrow spaces as per style guide)
app/controllers/api/storage.php (1)
1041-1042
: Optimize performance timing calculations.The current implementation recalculates cumulative times repeatedly. Consider using intermediate timing variables for better readability and efficiency.
Apply this diff to optimize the timing calculations:
$startTime = \microtime(true); $source = $deviceForFiles->read($path); -$downloadTime = \microtime(true) - $startTime; +$downloadEndTime = \microtime(true); +$downloadTime = $downloadEndTime - $startTime; if (!empty($cipher)) { // Decrypt $source = OpenSSL::decrypt( $source, $file->getAttribute('openSSLCipher'), System::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), 0, \hex2bin($file->getAttribute('openSSLIV')), \hex2bin($file->getAttribute('openSSLTag')) ); } -$decryptionTime = \microtime(true) - $startTime - $downloadTime; +$decryptionEndTime = \microtime(true); +$decryptionTime = $decryptionEndTime - $downloadEndTime; switch ($algorithm) { case Compression::ZSTD: $compressor = new Zstd(); $source = $compressor->decompress($source); break; case Compression::GZIP: $compressor = new GZIP(); $source = $compressor->decompress($source); break; } -$decompressionTime = \microtime(true) - $startTime - $downloadTime - $decryptionTime; +$decompressionEndTime = \microtime(true); +$decompressionTime = $decompressionEndTime - $decryptionEndTime; try { $image = new Image($source); } catch (ImagickException $e) { throw new Exception(Exception::STORAGE_FILE_TYPE_UNSUPPORTED, $e->getMessage()); } $image->crop((int) $width, (int) $height, $gravity); if (!empty($opacity) || $opacity === 0) { $image->setOpacity($opacity); } if (!empty($background)) { $image->setBackground('#' . $background); } if (!empty($borderWidth)) { $image->setBorder($borderWidth, '#' . $borderColor); } if (!empty($borderRadius)) { $image->setBorderRadius($borderRadius); } if (!empty($rotation)) { $image->setRotation(($rotation + 360) % 360); } $data = $image->output($output, $quality); -$renderingTime = \microtime(true) - $startTime - $downloadTime - $decryptionTime - $decompressionTime; +$renderingEndTime = \microtime(true); +$renderingTime = $renderingEndTime - $decompressionEndTime; -$totalTime = \microtime(true) - $startTime; +$totalTime = $renderingEndTime - $startTime;Also applies to: 1045-1046, 1058-1059, 1071-1072, 1103-1106
app/init/resources.php (1)
954-996
: Well-structured referrer sanitization with appropriate security checks.The implementation correctly validates the referrer through multiple security layers and provides a sensible localhost fallback for local development.
Fix the multi-line function call formatting to comply with coding standards:
-App::setResource('httpReferrerSafe', function (Request $request, string $httpReferrer, array $clients, Database $dbForPlatform, Document $project, App $utopia): string { +App::setResource('httpReferrerSafe', function ( + Request $request, + string $httpReferrer, + array $clients, + Database $dbForPlatform, + Document $project, + App $utopia +): string {- $rule = Authorization::skip( - fn () => $dbForPlatform->find('rules', [ - Query::equal('domain', [$origin]), - Query::limit(1) - ]) - )[0] ?? new Document(); + $rule = Authorization::skip(fn () => $dbForPlatform->find('rules', [ + Query::equal('domain', [$origin]), + Query::limit(1) + ]))[0] ?? new Document();
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (190)
app/config/specs/open-api3-1.7.x-client.json
is excluded by!app/config/specs/**
app/config/specs/open-api3-1.7.x-console.json
is excluded by!app/config/specs/**
app/config/specs/open-api3-1.7.x-server.json
is excluded by!app/config/specs/**
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.7.x-client.json
is excluded by!app/config/specs/**
app/config/specs/swagger2-1.7.x-console.json
is excluded by!app/config/specs/**
app/config/specs/swagger2-1.7.x-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.7.x/console-cli/examples/proxy/create-redirect-rule.md
is excluded by!docs/examples/**
docs/examples/1.7.x/console-cli/examples/vcs/get-repository-contents.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-anonymous-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-email-password-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-email-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-j-w-t.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-magic-u-r-l-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-mfa-challenge.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-o-auth2session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-o-auth2token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-phone-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-phone-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-recovery.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/create.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/delete-identity.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/delete-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/delete-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/delete-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/delete-sessions.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/get-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/get-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/get-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/get.md
is excluded by!docs/examples/**
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/account/list-mfa-factors.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/list-sessions.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-email.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-m-f-a.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-magic-u-r-l-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-mfa-challenge.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-name.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-password.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-phone-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-phone-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-phone.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-recovery.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-status.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/account/update-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-browser.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-credit-card.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-favicon.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-flag.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-image.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-initials.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/avatars/get-q-r.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/databases/create-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/databases/create-documents.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/databases/delete-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/databases/get-document.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/databases/update-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/databases/upsert-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/functions/create-execution.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/functions/get-execution.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/graphql/mutation.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/graphql/query.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/get.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-continents.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-countries-e-u.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-countries-phones.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-countries.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-currencies.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/locale/list-languages.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/messaging/create-subscriber.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/messaging/delete-subscriber.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/create-file.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/delete-file.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/get-file-download.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/get-file-preview.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/get-file-view.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/storage/get-file.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/storage/update-file.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/create-row.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/create-rows.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/delete-row.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/get-row.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/list-rows.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/update-row.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/tables/upsert-row.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/create-membership.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/create.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/delete-membership.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/delete.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/get-membership.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/get-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/get.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/java/teams/update-membership-status.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/update-membership.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/update-name.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/java/teams/update-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-anonymous-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-email-password-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-email-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-j-w-t.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-magic-u-r-l-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-mfa-challenge.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-o-auth2session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-o-auth2token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-phone-token.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-phone-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-recovery.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/create.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/delete-identity.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/delete-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/delete-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/delete-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/delete-sessions.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/get-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/get-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/get-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/get.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/account/list-mfa-factors.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/list-sessions.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-email.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-m-f-a.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-magic-u-r-l-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-mfa-authenticator.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-mfa-challenge.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-mfa-recovery-codes.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-name.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-password.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-phone-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-phone-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-phone.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-prefs.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-push-target.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-recovery.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-session.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-status.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/account/update-verification.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin A3DB /avatars/get-browser.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-credit-card.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-favicon.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-flag.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-image.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-initials.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/avatars/get-q-r.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/databases/create-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/databases/create-documents.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/databases/delete-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/databases/get-document.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/databases/update-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/databases/upsert-document.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/functions/create-execution.md
is excluded by!docs/examples/**
docs/examples/1.8.x/client-android/kotlin/functions/get-execution.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/graphql/mutation.md
is excluded by!docs/examples/**
📒 Files selected for processing (107)
.github/workflows/benchmark.yml
(1 hunks)app/config/locale/templates/email-inner-base.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
(2 hunks)app/config/locale/translations/az.json
(2 hunks)app/config/locale/translations/be.json
(2 hunks)app/config/locale/translations/bh.json
(2 hunks)app/config/locale/translations/bn.json
(2 hunks)app/config/locale/translations/ca.json
(2 hunks)app/config/locale/translations/da.json
(2 hunks)app/config/locale/translations/de.json
(2 hunks)app/config/locale/translations/el.json
(2 hunks)app/config/locale/translations/en.json
(2 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/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/id.json
(2 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/kn.json
(2 hunks)app/config/locale/translations/ko.json
(2 hunks)app/config/locale/translations/la.json
(2 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
(2 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
(2 hunks)app/config/locale/translations/or.json
(2 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
(2 hunks)app/config/locale/translations/si.json
(2 hunks)app/config/locale/translations/sk.json
(2 hunks)app/config/locale/translations/sn.json
(2 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
(2 hunks)app/controllers/api/account.php
(2 hunks)app/controllers/api/projects.php
(1 hunks)app/controllers/api/storage.php
(6 hunks)app/controllers/api/teams.php
(1 hunks)app/controllers/api/users.php
(1 hunks)app/controllers/general.php
(14 hunks)app/controllers/shared/api.php
(5 hunks)app/init/registers.php
(1 hunks)app/init/resources.php
(1 hunks)app/views/install/compose.phtml
(1 hunks)app/worker.php
(1 hunks)bin/doctor
(1 hunks)bin/install
(1 hunks)bin/maintenance
(1 hunks)bin/migrate
(1 hunks)bin/queue-count-failed
(1 hunks)bin/queue-count-processing
(1 hunks)bin/queue-count-success
(1 hunks)bin/queue-retry
(1 hunks)bin/realtime
(1 hunks)bin/schedule-executions
(1 hunks)bin/schedule-functions
(1 hunks)bin/schedule-messages
(1 hunks)bin/screenshot
(1 hunks)bin/sdks
(1 hunks)bin/specs
(1 hunks)bin/ssl
(1 hunks)bin/stats-resources
(1 hunks)bin/test
(1 hunks)bin/upgrade
(1 hunks)bin/vars
(1 hunks)bin/worker-audits
(1 hunks)bin/worker-builds
(1 hunks)bin/worker-certificates
(1 hunks)bin/worker-databases
(1 hunks)bin/worker-deletes
(1 hunks)bin/worker-functions
(1 hunks)bin/worker-mails
(1 hunks)bin/worker-messaging
(1 hunks)bin/worker-migrations
(1 hunks)bin/worker-stats-resources
(1 hunks)bin/worker-stats-usage
(1 hunks)
⛔ Files not processed due to max files limit (3)
- bin/worker-webhooks
- composer.json
- docker-compose.yml
🧰 Additional context used
🧠 Learnings (2)
app/controllers/shared/api.php (1)
Learnt from: ItzNotABug
PR: appwrite/appwrite#9693
File: src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php:88-95
Timestamp: 2025-05-09T04:06:04.338Z
Learning: It's acceptable to use DATABASE_TYPE_DELETE_COLLECTION event type for both collections and tables because workers process these events based on whether setCollection() or setTable() was called, not on the event type itself.
app/controllers/general.php (2)
Learnt from: abnegate
PR: appwrite/appwrite#9743
File: src/Appwrite/Utopia/Request.php:0-0
Timestamp: 2025-05-12T06:07:51.470Z
Learning: In Appwrite's request handling architecture, the Request::getParams() method selects which SDK method to use based on parameter matching, but does not validate required parameters. The action execution flow handles parameter validation separately. This separation of concerns allows for more flexible handling of multi-method routes.
Learnt from: abnegate
PR: appwrite/appwrite#9743
File: src/Appwrite/Utopia/Request.php:33-36
Timestamp: 2025-05-12T06:05:27.133Z
Learning: In Appwrite's architecture, the Request class should only filter parameters when filters are explicitly registered. If no filters are present, all parameters should be passed through, and the route action is responsible for validating which parameters are present/valid.
🧬 Code Graph Analysis (5)
app/controllers/api/users.php (1)
src/Appwrite/Extend/Exception.php (1)
Exception
(7-442)
app/controllers/api/teams.php (1)
src/Appwrite/Event/Event.php (1)
setParam
(282-287)
app/controllers/shared/api.php (1)
src/Appwrite/Event/Database.php (3)
getDatabase
(69-72)getCollection
(137-140)getDocument
(159-162)
app/controllers/api/projects.php (1)
src/Appwrite/Event/Event.php (1)
setParam
(282-287)
app/controllers/api/account.php (1)
src/Appwrite/Event/Event.php (1)
setParam
(282-287)
🪛 phpcs (3.7.2)
app/controllers/shared/api.php
[ERROR] 801-801: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 801-801: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 806-806: Closing parenthesis of a multi-line function call must be on a line by itself
(PEAR.Functions.FunctionCallSignature.CloseBracketLine)
[ERROR] 806-806: Closing parenthesis of a multi-line function call must be on a line by itself
(PEAR.Functions.FunctionCallSignature.CloseBracketLine)
app/worker.php
[ERROR] 485-485: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
app/controllers/api/storage.php
[ERROR] 964-964: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
app/init/resources.php
[ERROR] 949-949: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 952-952: Closing parenthesis of a multi-line function call must be on a line by itself
(PEAR.Functions.FunctionCallSignature.CloseBracketLine)
[ERROR] 954-954: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 978-978: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 981-981: Closing parenthesis of a multi-line function call must be on a line by itself
(PEAR.Functions.FunctionCallSignature.CloseBracketLine)
[ERROR] 996-996: Closing parenthesis of a multi-line function call must be on a line by itself
(PEAR.Functions.FunctionCallSignature.CloseBracketLine)
app/controllers/general.php
[ERROR] 59-59: Missing doc comment for function router()
(PEAR.Commenting.FunctionComment.Missing)
[ERROR] 814-814: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 1065-1065: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 1380-1380: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
[ERROR] 1413-1413: Opening parenthesis of a multi-line function call must be the last content on the line
(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)
🪛 PHPMD (2.15.0)
app/controllers/general.php
59-764: The function router() has a Cyclomatic Complexity of 126. The configured cyclomatic complexity threshold is 10. (Code Size Rules)
(CyclomaticComplexity)
59-764: The function router() has an NPath complexity of 9223372036854775807. The configured NPath complexity threshold is 200. (Code Size Rules)
(NPathComplexity)
59-764: The function router() has 706 lines of code. Current threshold is set to 100. Avoid really long methods. (Code Size Rules)
(ExcessiveMethodLength)
59-764: The function router has 15 parameters. Consider reducing the number of parameters to less than 10. (Code Size Rules)
(ExcessiveParameterList)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: Setup & Build Appwrite Image
- GitHub Check: Setup & Build Appwrite Image
- GitHub Check: Setup & Build SDK
- GitHub Check: scan
🔇 Additional comments (105)
bin/worker-mails (1)
3-3
: Approved: Process hierarchy improvementRemoving
exec
allows the shell process to remain active while the PHP worker runs as a child process. This change improves process management and aligns with standard shell script practices while preserving the same functionality and exit code behavior.bin/queue-count-success (1)
3-3
: Approved: Consistent with standardization effortThe removal of
exec
is consistent with the broader standardization across shell scripts. The queue counting functionality remains unchanged while improving process management.bin/worker-functions (1)
3-3
: Approved: Worker script consistency maintainedThe modification aligns with the systematic refactoring of worker scripts. Function worker capabilities remain intact while adopting the standardized process execution pattern.
bin/schedule-functions (1)
3-3
: Approved: Scheduler wrapper standardizationThe change maintains function scheduling capabilities while adopting the standardized approach to process execution. The CLI functionality and argument handling remain unchanged.
bin/queue-count-processing (2)
3-3
: Approved: Queue monitoring standardization completeThe final script in the standardization effort maintains queue counting functionality while adopting the improved process execution pattern. All shell script wrappers now follow a consistent architectural approach.
1-3
: Request clarification on PR scope vs. titleWhile these shell script standardizations are technically sound and beneficial, the PR title indicates "Update documentation" but these changes are to executable scripts rather than documentation. Could you clarify if this PR has expanded beyond its original documentation scope, or if the title needs updating to reflect the actual changes?
bin/worker-deletes (1)
3-3
: Confirm signal and shutdown behavior after removingexec
We searched for other worker scripts and process-management documentation—none reference
exec
or signal handling. Withoutexec
, PHP now runs as a child of the shell, which can alter:
- Signal propagation (SIGTERM/SIGINT may not reach PHP as before)
- Container/service shutdown (potential orphaned shell or PHP processes)
- Monitoring/supervisor expectations (they may track the wrong PID)
Please verify that:
- Stopping the container or service cleanly kills the PHP process
- Your deployment or supervisor tooling handles this change correctly
- No orphaned processes, logging gaps, or metric regressions occur
• Location:
bin/worker-deletes
, line 3bin/queue-count-failed (1)
3-3
: Consistent with worker script changes but verify process handling.This change aligns with the systematic removal of
exec
from other shell scripts. For utility scripts like queue counting, the impact is less critical than for long-running workers, but the process management behavior still changes..github/workflows/benchmark.yml (1)
67-67
: Good addition for installation verification.Adding version verification immediately after installing the benchmarking tool is a best practice that will help with debugging if the tool installation fails or the benchmark step encounters issues.
bin/test (1)
3-3
: Test script change has minimal impact.Removing
exec
from the test runner script is the least critical of these changes. Test execution and exit codes should work the same, though there could be minor implications for CI/CD pipelines that depend on specific process behavior.bin/worker-migrations (1)
3-3
: Shell process behavior change looks good, but question PR scope alignment.The removal of
exec
is technically sound as it allows better signal handling and maintains the shell process for potential cleanup. However, this change seems unrelated to the stated PR objective of "Update documentation" - these are executable scripts, not documentation files.Likely an incorrect or invalid review comment.
bin/worker-databases (1)
3-3
: Consistent process handling improvement.Same beneficial change as the previous script - removing
exec
allows the shell to remain active for better process management.bin/stats-resources (1)
3-3
: Good standardization of shell script behavior.The consistent removal of
exec
across CLI and worker scripts creates uniform process handling behavior.bin/vars (1)
3-3
: LGTM - consistent with the standardization effort.bin/ssl (1)
3-3
: Approve: exec removal poses no configuration risksI searched YAML, JSON, Docker, and other common config files for any references to the
bin/ssl
(and related) scripts and found none. The only file mentioning “process” isdocker-compose.yml
, but it does not invoke these scripts. You can safely proceed with the exec removal.bin/maintenance (1)
3-3
: Inconsistency: PR describes documentation update but shows code changes.The PR objectives indicate this is a documentation update, but the provided files show shell script modifications. The removal of
exec
changes process execution behavior - the shell script now remains as a parent process instead of being replaced by the PHP process.Consider the implications of this change:
- Different signal handling behavior
- Parent shell process remains in memory
- Potential impact on process monitoring tools
#!/bin/bash # Verify if this change is consistent across other CLI scripts fd -t f -e '' '^bin' | head -20 | xargs grep -l 'php.*cli\.php'Likely an incorrect or invalid review comment.
bin/schedule-executions (1)
3-3
: Consistent with broader script standardization.The removal of
exec
aligns with the pattern described in the AI summary across multiple CLI scripts. This standardizes process execution behavior but changes how the scripts handle process lifecycle.bin/queue-retry (1)
3-3
: Process execution standardization maintained.Consistent with the pattern of removing
exec
across CLI scripts. The queue retry functionality will now run with the shell script as a parent process.bin/sdks (1)
3-3
: SDK generation script is consistent; manual CI/CD verification requiredNo references to
bin/sdks
were found in common CI/CD configuration files. Please manually confirm that any pipelines, scheduled jobs, or external automation invoking this script are updated to match its new execution model.bin/schedule-messages (1)
3-3
: Completes the CLI script standardization.This final change maintains the consistent pattern of removing
exec
from CLI scripts. The message scheduling functionality will now run with proper parent-child process relationship.bin/specs (1)
3-3
: Add exit code propagation to handle PHP process termination properly.Removing
exec
means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.Apply this fix to properly handle exit codes:
-php /usr/src/code/app/cli.php specs $@ +php /usr/src/code/app/cli.php specs $@ +exit $?Likely an incorrect or invalid review comment.
bin/worker-stats-usage (1)
3-3
: Add exit code propagation to handle PHP process termination properly.Removing
exec
means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.Apply this fix to properly handle exit codes:
-php /usr/src/code/app/worker.php stats-usage $@ +php /usr/src/code/app/worker.php stats-usage $@ +exit $?Likely an incorrect or invalid review comment.
bin/install (1)
3-3
: Add exit code propagation to handle PHP process termination properly.Removing
exec
means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.Apply this fix to properly handle exit codes:
-php /usr/src/code/app/cli.php install $@ +php /usr/src/code/app/cli.php install $@ +exit $?Likely an incorrect or invalid review comment.
bin/migrate (1)
3-3
: Ensure all PHP‐invoking shell scripts propagate the PHP exit statusRemoving
exec
without propagating the exit code means failures in the PHP process will be hidden and the script will always return 0. We need to add an explicitexit $?
after each PHP invocation in our project’sbin/
scripts.• Affected files in
bin/
:
- doctor
- install
- maintenance
- migrate
- queue-count-failed
- queue-count-processing
- queue-count-success
- queue-retry
- realtime
- schedule-executions
- schedule-functions
- schedule-messages
- screenshot
- sdks
- specs
- ssl
- stats-resources
- test
- upgrade
- vars
- worker-audits
- worker-builds
- worker-certificates
- worker-databases
- worker-deletes
- worker-functions
- worker-mails
- worker-messaging
- worker-migrations
- worker-stats-resources
- worker-stats-usage
- worker-webhooks
Example fix (shown for
bin/migrate
):- php /usr/src/code/app/cli.php migrate "$@" + php /usr/src/code/app/cli.php migrate "$@" + exit $?Please apply the same pattern—either use
exec php …
or appendexit $?
—to each of the above scripts so that any PHP failure correctly bubbles up.Likely an incorrect or invalid review comment.
bin/worker-builds (1)
3-3
: Confirm process supervision behavior after removingexec
We ran a repository-wide search and did not find any YAML/JSON configs or Dockerfiles referencing
bin/worker-builds
, and the only documentation hit was in CONTRIBUTING.md. Since process supervision (e.g. systemd, supervisord, Kubernetes, Docker entrypoint) might be managed outside this repo, please verify that droppingexec
won’t affect signal handling or orphaned shells in your deployment environment.• Review how
bin/worker-builds
is invoked in production (Docker ENTRYPOINT, systemd unit, k8s manifest, etc.)
• Ensure that withoutexec
, the parent shell does not interfere with signals (SIGTERM/SIGINT) or exit codes
• If you rely on replacing the shell process, consider restoringexec
or adjusting your supervisor configDiff for clarity:
- exec php /usr/src/code/app/worker.php builds "$@" php /usr/src/code/app/worker.php builds "$@"
bin/upgrade (1)
3-3
: Consistent removal ofexec
across all CLI wrappers
- All
bin/
scripts now invokephp
directly (no instances ofexec php
remain).- This change is uniform across every CLI shim, so process-replacement behavior has been altered everywhere.
Please confirm that replacing
exec php
with a plainphp
invocation—thereby keeping the shell as the parent process—matches your signal-handling, exit-code propagation, and deployment requirements.app/config/platforms.php (1)
137-137
: SDK version updates look appropriate.The version bumps for React Native (0.9.1 → 0.10.0) and CLI (8.0.0 → 8.1.0) align with the broader improvements in this PR, including enhanced email templates and localization features.
Also applies to: 220-220
app/config/locale/translations/ja.json (1)
11-11
: Japanese translations for email button text are accurate and well-integrated.The new button text translations are linguistically appropriate:
- Verifica F438 tion: "メールアドレスを確認する" (Verify email address)
- Recovery: "パスワードをリセット" (Reset password)
- Invitation: "{{team}}への招待を承諾する" (Accept invitation to {{team}})
The template variable
{{team}}
is correctly preserved, and these additions align well with the email template enhancements described in the PR.Also applies to: 24-24, 31-31
app/config/locale/translations/en.json (1)
11-11
: LGTM! Well-structured email button text additions.The new translation keys follow consistent naming patterns and provide clear, actionable button labels. The use of the dynamic
{{team}}
placeholder in the invitation button text is appropriate and consistent with other template variables in the file.Also applies to: 49-49, 56-56
app/init/registers.php (1)
39-40
: LGTM! Improved separation of testing domains.Splitting the single domain into separate SMS and webhook-specific domains improves testing organization and follows good separation of concerns. The change maintains the same security posture by only affecting non-production environments.
app/views/install/compose.phtml (1)
867-867
: Approve: Bump executor image to v0.7.22 with static runtime supportThe update from 0.7.20 → 0.7.22 is a low-risk, isolated maintenance change that introduces a new static runtime feature and has no documented breaking changes.
- Image updated to
openruntimes/executor:0.7.22
- New Feature: static runtime support
- No backward-incompatible changes noted
app/controllers/api/teams.php (1)
663-671
:{{buttonText}}
parameter wired correctly for localized CTA label
The addedsetParam('{{buttonText}}', $locale->getText('emails.invitation.buttonText'))
brings the team-invitation flow in line with the new button-style email template. No issues spotted—default HTML escaping remains enabled, which is desirable here.app/controllers/api/projects.php (1)
2278-2278
: LGTM! Properly integrates localized button text.The addition of the
{{buttonText}}
parameter follows the established pattern for template parameterization and correctly retrieves the localized string using the locale object. This change aligns well with the coordinated update to support styled buttons in email templates.app/config/locale/templates/email-inner-base.tpl (1)
3-3
: LGTM! Enhanced UX with proper button styling for email templates.The replacement of the plain URL link with a styled button significantly improves the user experience. The inline CSS approach is appropriate for email templates since external stylesheets are often blocked by email clients. The styling choices (background color, border radius, padding) follow modern email design patterns.
Consider testing the button rendering across major email clients (Gmail, Outlook, Apple Mail) to ensure consistent appearance, as CSS support can vary between clients.
app/config/locale/translations/tl.json (1)
11-11
: LGTM! Proper localization for email button text.The three new translation keys for verification, recovery, and invitation email button text are appropriately translated to Tagalog and follow the established naming convention. The translations are contextually appropriate:
- Verification: "Kumpirmahin ang email address"
- Recovery: "I-reset ang password"
- Invitation: "Tanggapin ang paanyaya sa {{team}}"
These additions properly support the coordinated email template enhancement across the application.
Also applies to: 24-24, 31-31
app/config/locale/translations/pt-br.json (1)
11-31
: New translation keys correctly added and follow existing placeholder conventions
emails.verification.buttonText
,emails.recovery.buttonText
, andemails.invitation.buttonText
are inserted with valid Brazilian-Portuguese copy and the expected{{team}}
placeholder. JSON syntax (trailing commas) is intact and ordering within the e-mail-related block remains coherent.No further action required.
app/config/locale/translations/lt.json (1)
11-31
: Lithuanian button-text keys look goodThe three new keys are present with accurate Lithuanian phrasing and proper
{{team}}
placeholder usage. JSON formatting is correct and aligns with surrounding entries.Looks good to merge.
app/controllers/api/account.php (2)
3226-3234
:buttonText
template variable correctly injectedThe additional
setParam('{{buttonText}}', …)
makes the recovery email compatible with the new button-based template. No functional issues spotted here.
3482-3490
: Mirror change for verification email looks goodConsistent injection of the
buttonText
placeholder for the verification template. 👍app/config/locale/translations/kn.json (2)
11-11
: Button-label key added correctly – no issues.
Translation conveys the intended action clearly and uses proper terminology.
31-31
: Invitation button text looks good.
Placeholder{{team}}
preserved and grammar is natural.app/config/locale/translations/af.json (2)
11-11
: Verification button text added correctly.
Clear Afrikaans phrasing; placeholder-free string as expected.
24-24
: Recovery button text reads well – no action needed.
Translation matches terminology used elsewhere (“wagwoord terugstel”).app/controllers/api/users.php (1)
652-654
: LGTM! Enhanced error handling for database queries.The addition of QueryException handling complements the existing OrderException catch block and provides comprehensive error handling for database query issues during user retrieval and count operations. The implementation correctly rethrows the exception with the appropriate
GENERAL_QUERY_INVALID
error type while preserving the original error message.app/config/locale/translations/it.json (3)
11-11
: LGTM! Accurate Italian translation for email verification button.The translation "Confermare l'indirizzo email" is correct Italian for the email verification button text and maintains consistency with the existing translation style.
24-24
: LGTM! Appropriate Italian translation for password recovery button.The translation "Reimposta password" is accurate Italian for the password recovery button text and aligns well with the existing recovery email context.
31-31
: LGTM! Well-localized Italian translation for team invitation button.The translation "Accetta invito a {{team}}" correctly preserves the template variable
{{team}}
and provides an accurate Italian translation for the team invitation button text.app/config/locale/translations/ar.json (1)
11-11
: LGTM – placeholders intact and wording reads naturallyNo further action needed.
Also applies to: 24-24, 31-31
app/config/locale/translations/be.json (1)
11-11
: LGTM – keys added with correct Belarusian phrasing and placeholderAll three entries match the new template requirements.
Also applies to: 24-24, 31-31
app/config/locale/translations/nl.json (1)
11-11
: LGTM – Dutch translations and{{team}}
placeholder look goodNothing to change here.
Also applies to: 24-24, 31-31
app/controllers/shared/api.php (4)
25-25
: LGTM: Console import added for logging functionality.The import is correctly added and will be used for database event logging later in the file.
567-567
: Cache TTL increased with clear documentation.The comment explains the temporary increase to 180 days to ensure cached files remain accessible during the transition period.
834-836
: Good optimization: Cache instance reuse.Creating a single Cache instance for reuse in the cache saving logic is an efficient approach that avoids unnecessary object creation.
855-856
: Cache file overwrite logic with clear explanation.The comment effectively explains why the cache file is overwritten - to update modification times for TTL checks. This ensures proper cache expiration behavior.
app/config/locale/translations/sk.json (1)
11-11
: LGTM: Slovak email button text localization added.The three new translation keys for email verification, password recovery, and team invitation buttons are properly localized and follow the established naming convention. These support the enhanced email template button functionality.
Also applies to: 24-24, 31-31
app/config/locale/translations/sv.json (1)
11-11
: LGTM: Swedish email button text localization added.The translation keys are properly localized for Swedish and maintain consistency with the standardized email button text system being implemented across all locales.
Also applies to: 24-24, 31-31
app/config/locale/translations/vi.json (1)
11-11
: LGTM: Vietnamese email button text localization added.The Vietnamese translations are properly implemented and consistent with the standardized approach for email button text across all locale files.
Also applies to: 24-24, 31-31
app/config/locale/translations/bh.json (1)
11-11
: LGTM: Bhojpuri email button text localization added.The Bhojpuri translations in Devanagari script are properly implemented and complete the consistent localization effort for email button text across all supported languages.
Also applies to: 24-24, 31-31
app/config/locale/translations/da.json (1)
11-11
: Translations & placeholders look correct – LGTMThe newly-added Danish button labels are clear and keep the
{{ }}
placeholders intact.
No issues spotted.Also applies to: 24-24, 31-31
app/config/locale/translations/hi.json (1)
11-11
: Hindi button-text strings read wellAll three additions use natural imperative tone and preserve the template placeholders. Looks good.
Also applies to: 24-24, 31-31
app/config/locale/translations/es.json (1)
11-11
: Spanish entries are soundCorrect use of verbs in imperative form and placeholder retention. No action needed.
Also applies to: 24-24, 31-31
app/config/locale/translations/mr.json (1)
11-11
: Marathi translations verifiedWord choice is appropriate and placeholders remain untouched. Good to merge.
Also applies to: 24-24, 31-31
app/config/locale/translations/or.json (1)
11-11
: Button-text keys look good.All three new keys follow the expected naming pattern and preserve the required
{{team}}
placeholder without translation – nice!Also applies to: 24-24, 31-31
app/config/locale/translations/fr.json (1)
11-11
: Translation keys added correctly.Placeholders are intact (
{{team}}
) and the French phrasing is consistent with existing strings.Also applies to: 24-24, 31-31
app/config/locale/translations/ga.json (1)
11-11
: Irish button-text keys look great.Placeholders are preserved, diacritics are correct, and wording aligns with the earlier strings.
Also applies to: 24-24, 31-31
app/config/locale/translations/zh-cn.json (1)
11-11
: Chinese button texts added successfully.Strings are concise, placeholders untouched, and punctuation follows existing style guidelines.
Also applies to: 24-24, 31-31
app/config/locale/translations/th.json (1)
11-11
: NewbuttonText
keys look goodStrings are accurate, placeholders remain intact, and style aligns with existing Thai translations.
Also applies to: 24-24, 31-31
app/config/locale/translations/ml.json (1)
11-11
: Malayalam button-label additions are consistentAll three keys are localised correctly, preserve the
{{team}}
placeholder, and match the tone of the surrounding strings.Also applies to: 24-24, 31-31
app/config/locale/translations/de.json (1)
11-11
: German additions are accurateWording is idiomatic, placeholders correct, and umlauts/ß are handled properly.
Also applies to: 24-24, 31-31
app/config/locale/translations/ta.json (1)
11-11
: Button-text translations look goodAll three new keys follow existing naming conventions, keep handlebars intact (
{{team}}
), and the Tamil wording is concise. No issues found.Also applies to: 24-24, 31-31
app/config/locale/translations/fa.json (1)
11-11
: Translations & placeholders are consistentThe Persian strings read naturally and preserve the required
{{team}}
placeholder. Implementation aligns with other locales. ✅Also applies to: 24-24, 31-31
app/config/locale/translations/pt-pt.json (1)
11-11
: PT-PT entries validatedStrings are clear, capitalization matches surrounding keys and the
{{team}}
token is untouched. Ready to merge.Also applies to: 24-24, 31-31
app/config/locale/translations/sd.json (1)
11-11
: Sindhi additions verifiedNew button captions are well-formed and include the correct
{{team}}
variable. No further action required.Also applies to: 24-24, 31-31
app/config/locale/translations/pl.json (1)
11-11
: PL strings pass reviewPolish translations retain placeholders and mirror style of existing entries. Looks good.
Also applies to: 24-24, 31-31
app/config/locale/translations/tr.json (1)
11-11
: Button-text keys correctly added for TR locale
Placeholders & punctuation look good, no issues found.Also applies to: 24-24, 31-31
app/config/locale/translations/ar-ma.json (1)
11-11
: AR-MA button-text additions look good
Placeholders are intact and wording aligns with existing style.Also applies to: 24-24, 31-31
app/config/locale/translations/nb.json (1)
11-11
: NO locale keys added correctly
Translations read naturally and placeholders are valid.Also applies to: 24-24, 31-31
app/config/locale/translations/uk.json (1)
11-11
: UA locale button texts OK
No formatting or placeholder issues detected.Also applies to: 24-24, 31-31
app/config/locale/translations/id.json (1)
11-11
: Localized button texts added correctlyStrings read naturally, placeholders (
{{team}}
) are preserved, and JSON syntax remains valid.
LGTM.Also applies to: 24-24, 31-31
app/config/locale/translations/as.json (1)
11-11
: Assamese button labels look goodAccurate phrasing, consistent style, and placeholders intact.
No further action needed.Also applies to: 24-24, 31-31
app/config/locale/translations/nn.json (1)
11-11
: Norwegian Nynorsk additions verifiedTerminology matches existing vocabulary; placeholders are correct.
All good.Also applies to: 24-24, 31-31
app/config/locale/translations/ru.json (1)
11-11
: Russian translations are accurateWording is appropriate, grammar correct, and
{{team}}
placeholder maintained.
Looks solid.Also applies to: 24-24, 31-31
app/config/locale/translations/bn.json (1)
11-11
: Bengali button text additions approvedPhrasing aligns with existing tone, placeholders unaffected, JSON still valid.
No issues found.Also applies to: 24-24, 31-31
app/config/locale/translations/gu.json (1)
11-11
: New button-text keys look correct and consistent.The Gujarati CTA labels are accurate and follow the project’s placeholder and punctuation conventions.
Also applies to: 24-24, 31-31
app/config/locale/translations/zh-tw.json (1)
11-11
: CTA 文字翻譯無誤,格式一致。三條新增 key 的用語、括號佔位符與標點皆符合其他 zh-tw 條目。
Also applies to: 24-24, 31-31
app/config/locale/translations/ro.json (1)
11-11
: 👍 Traducerile butoanelor sunt corecte.Formulările respectă diacriticele și stilul restului fișierului.
Also applies to: 24-24, 31-31
app/config/locale/translations/ur.json (3)
11-11
: Localized verification button label looks good
No issues spotted with the key name or value.
24-24
: Localized recovery button label looks good
String is clear and follows the style of neighbouring entries.
31-32
: Signature placeholder fix is correct
The missing closing braces bug onemails.invitation.signature
is now resolved – good catch.app/config/locale/translations/sa.json (1)
31-31
: Invitation button text is fine
Uses the correct Sanskrit imperative “स्वीकुरुत”.app/config/locale/translations/ca.json (1)
24-24
: Recovery button label looks good
Translation is idiomatic Catalan.app/config/locale/translations/lb.json (2)
24-24
: Recovery button label looks good
Clear, idiomatic Luxembourgish.
31-31
: Invitation button label looks good
Consistent with neighbouring translations.app/config/locale/translations/az.json (1)
11-11
: Translation keys added correctly – placeholders preserved
- New keys follow existing naming conventions.
- Placeholder
{{team}}
is intact and untranslated.- No JSON-syntax or escaping issues detected.
Nothing further to address here.
Also applies to: 24-24, 31-31
app/config/locale/translations/ms.json (1)
11-11
: Malay button-text entries look goodAll three additions respect the existing style guide and keep the
{{team}}
placeholder untouched.Also applies to: 24-24, 31-31
app/config/locale/translations/te.json (1)
11-11
: Telugu entries validated – no issues foundStrings are well-formed, use correct script punctuation, and retain
{{team}}
where required.Also applies to: 24-24, 31-31
app/config/locale/translations/lv.json (1)
11-11
: Latvian additions are consistent and placeholder-safeKey naming, grammar, and placeholder usage (
{{team}}
) all align with project standards.Also applies to: 24-24, 31-31
app/controllers/api/storage.php (3)
21-21
: LGTM: Console import added for logging functionality.The import is correctly placed and necessary for the logging enhancement in the preview endpoint.
957-957
: LGTM: Request and Project injection for enhanced logging.The additional injections are appropriate to support the performance logging functionality added to the preview endpoint.
Also applies to: 963-963
1107-1108
: LGTM: Comprehensive performance logging.The logging statement provides valuable metrics for monitoring file preview performance across all processing stages. The inclusion of project, bucket, file, and URI identifiers enables effective debugging and analysis.
app/config/locale/translations/si.json (1)
11-11
: LGTM: Email button text translations added.The new Sinhala translations for email button text are well-integrated and follow the existing naming conventions. The content is appropriate for verification, recovery, and invitation email contexts, supporting the broader email template enhancement.
Also applies to: 24-24, 31-31
app/init/resources.php (1)
949-953
: LGTM! Simple referrer extraction.The
httpReferrer
resource correctly extracts the raw HTTP referrer from the request.app/controllers/general.php (3)
122-126
: Good addition for error tracking in custom domain scenarios.Adding the project ID as a log tag helps with debugging when the x-appwrite-project header is unavailable during custom domain function execution.
946-946
: Improved origin handling with centralized referrer validation.The changes simplify origin validation by:
- Using the injected
httpReferrer
for parsing- Setting CORS headers with the sanitized
httpReferrerSafe
value- Adding explicit localhost allowance for local development
This centralized approach improves maintainability and security.
Also applies to: 1020-1020, 1041-1041
1247-1250
: Good defensive check to prevent duplicate log tags.The check prevents adding duplicate
projectId
tags when it's already been set by the router.
73b0b9d
to
86dfed8
Compare
What does this PR do?
HUGE but new specs and examples.
Note
Examples are only targeted to
1.8.x
at the moment and not againstlatest
. We can do that in the end.Test Plan
N/A.
Related PRs and Issues
Checklist