Skip to content

Prepare Appwrite 1.9.6 self-hosted release - #12937

Merged
ChiragAgg5k merged 12 commits into
1.9.xfrom
chore/1.9.6-release
Jul 22, 2026
Merged

Prepare Appwrite 1.9.6 self-hosted release#12937
ChiragAgg5k merged 12 commits into
1.9.xfrom
chore/1.9.6-release

Conversation

@ChiragAgg5k

@ChiragAgg5k ChiragAgg5k commented Jul 22, 2026

Copy link
Copy Markdown
Member

What does this PR do?

Prepares the 1.9.x branch for the Appwrite 1.9.6 self-hosted patch release.

The release adds a new V25 migration that automatically repairs the missing providerBranches and providerPaths attributes on the functions and sites collections. This fixes upgrades where V24 had already been recorded by 1.9.5 before those attributes were added, which previously forced operators to repair project metadata and physical columns manually. The repair is idempotent, handles partially applied batches, skips projects that do not have one of the collections, and preserves existing resources.

It also backports the self-hosted fixes merged after 1.9.5 that are compatible with the 1.9.x line:

Finally, it updates the stable version, cache buster, install examples, and 1.9.6 changelog. Main-only 2.0 changes such as the PostgreSQL default, Console 9, and removal of legacy Compose services are intentionally excluded.

Test Plan

  • composer lint for every changed PHP file
  • composer analyze
  • composer refactor:check
  • Migration unit tests: 4 tests, 76 assertions
  • Full Docker unit suite: 734 tests, 15,068 assertions
  • Sites E2E testCreateSite: 1 test, 29 assertions
  • docker compose config --quiet for the development and base Compose configurations
  • Built appwrite/appwrite:1.9.6-test and verified the /v1/health/version container healthcheck
  • Ran doctor; database, cache, queue, pub/sub, SMTP, and volume checks passed
  • Ran the actual non-interactive install entrypoint from the built 1.9.6 image with an isolated Compose project and fresh volumes; the generated MariaDB stack started successfully, /v1/health/version returned 1.9.6, Console 8.7.30 served /console/, Executor 0.25.4 became healthy, and account/team/project creation succeeded
  • Fresh-installed 1.9.6 with MariaDB, created an account, team, project, function, and site, and reran the migration successfully
  • Recreated the executor with 0.25.4 and passed a real function deployment build E2E (1 test, 34 assertions)
  • Recreated Browser 0.3.3 and verified custom headers against an http://appwrite-api network alias: the request failed without the header and returned a valid PNG when the header was supplied
  • Rebuilt the production image and verified the non-starting installer path generated Console 8.7.30, Browser 0.3.3, and Executor 0.25.4
  • For MariaDB, PostgreSQL, and MongoDB independently:
    1. Installed 1.9.0 and seeded a project with a function and site
    2. Upgraded to 1.9.5 and confirmed both provider attributes were still absent
    3. Upgraded the same persisted data to the 1.9.6 test image and ran migrate
    4. Confirmed both metadata attributes and physical fields were created
    5. Confirmed the seeded function and site remained readable through the API
    6. Ran migrate again to verify idempotency
  • Migrated an existing MongoDB development dataset containing 108 projects, including a legacy project without a Sites collection

Related PRs and Issues

Checklist

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

Replace doctor healthcheck with HTTP health endpoint check
…-duplicates

Fix migration failing to create new attributes when batch contains existing ones
fix: filter Sites build runtimes by _APP_SITES_RUNTIMES
…ary-c625

Fix MongoDB healthcheck false-positive before replica-set primary
Fix Doctor false DB and queue disconnect reports
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

✨ Benchmark results

Comparing 1.9.x (before) to chore/1.9.6-release (after).

Before

Scenario P50 (ms) P95 (ms) Requests RPS
API total 13.03 135.57 185 34.97
Account 26.4 146.84 35 7.42
TablesDB 11.83 25.53 35 8.5
Storage 11.49 135.61 75 17.87
Functions 22.06 31.32 40 9.56

After

Scenario P50 (ms) P95 (ms) Requests RPS
API total 12.62 133.64 185 35.2
Account 28.73 152.25 35 7.43
TablesDB 11.39 19.08 35 8.71
Storage 10.65 152.61 75 18.38
Functions 23.32 32.6 40 9.86

Delta

Scenario P95 delta (ms)
API total -1.93
Account +5.41
TablesDB -6.45
Storage +17
Functions +1.29
Top API waits
API request Max wait (ms)
account.sessions.email.create 504.09
storage.buckets.create 155.19
account.password.update 152.08

@ChiragAgg5k
ChiragAgg5k marked this pull request as ready for review July 22, 2026 10:32
Pull in recent executor fixes, including S3 custom-endpoint bucket
prefix handling and silent build failure reporting.

Co-authored-by: Cursor <cursoragent@cursor.com>
@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR prepares the Appwrite 1.9.6 self-hosted release. The main changes are:

  • Adds a migration to repair missing provider attributes.
  • Makes migration attribute batches idempotent.
  • Enforces the configured Sites runtime allowlist.
  • Improves service health and Doctor connectivity checks.
  • Updates bundled service images and release metadata.

Confidence Score: 5/5

This looks safe to merge.

  • The omitted Site runtime path now remains valid when an allowlist is configured.
  • No blocking incomplete or unsafe fix was found in the updated code.

Important Files Changed

Filename Overview
src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php Enforces the runtime allowlist while preserving omitted build runtimes.
src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php Applies runtime allowlist validation to explicit Site updates.
src/Appwrite/Platform/Modules/Sites/Http/Frameworks/XList.php Filters framework runtimes and keeps each default aligned with the allowlist.
src/Appwrite/Migration/Migration.php Registers V25 and adds idempotent attribute creation.
src/Appwrite/Migration/Version/V25.php Repairs missing provider attributes on existing Functions and Sites collections.
src/Appwrite/Platform/Tasks/Doctor.php Uses active database, cache, queue, and pub/sub connectivity checks.
docker-compose.yml Updates service images and revises Appwrite and MongoDB health checks.

Reviews (4): Last reviewed commit: "Bump Browser service to 0.3.3" | Re-trigger Greptile

Comment thread src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php Outdated
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

🔄 PHP-Retry Summary

Flaky tests detected across commits:

Commit 95ae2fe - 1 flaky test
Test Retries Total Time Details
DocumentsDBCustomServerTest::testTimeout 1 128.42s Logs
Commit db59815 - 1 flaky test
Test Retries Total Time Details
DocumentsDBCustomServerTest::testTimeout 1 125.39s Logs

@ChiragAgg5k
ChiragAgg5k merged commit 9f8423e into 1.9.x Jul 22, 2026
77 of 78 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants