From 994e2faa42e2dbc59e9c011fdd16a48c430bfd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 11 Mar 2025 18:19:25 +0100 Subject: [PATCH] OPR v5 + Flutter starter --- .env | 2 +- app/cli.php | 2 +- app/config/collections/projects.php | 2 +- app/config/frameworks.php | 2 +- app/config/runtimes.php | 2 +- app/config/templates/site.php | 44 +++++++++++++++++- app/controllers/general.php | 4 +- composer.lock | 40 ++++++++-------- docker-compose.yml | 4 +- .../sites/templates/flutter-starter-dark.png | Bin 14779 -> 4331 bytes .../sites/templates/flutter-starter-light.png | Bin 14779 -> 4331 bytes .../Functions/Http/Functions/Create.php | 2 +- .../Modules/Functions/Workers/Builds.php | 2 +- src/Appwrite/Utopia/Response/Model/Func.php | 2 +- src/Executor/Executor.php | 8 ++-- .../Functions/FunctionsCustomServerTest.php | 2 +- 16 files changed, 80 insertions(+), 38 deletions(-) diff --git a/.env b/.env index b9aa42e2f5..945680114f 100644 --- a/.env +++ b/.env @@ -81,7 +81,7 @@ _APP_COMPUTE_RUNTIMES_NETWORK=runtimes _APP_EXECUTOR_SECRET=your-secret-key _APP_EXECUTOR_HOST=http://exc1/v1 _APP_FUNCTIONS_RUNTIMES=php-8.0,node-18.0,python-3.9,ruby-3.1 -_APP_SITES_RUNTIMES=static-1,node-22,flutter-3.24 +_APP_SITES_RUNTIMES=static-1,node-22,flutter-3.29 _APP_SITES_FRAMEWORKS=sveltekit,nextjs,nuxt,astro,remix,flutter,other,react,vue,analog,angular _APP_MAINTENANCE_INTERVAL=86400 _APP_MAINTENANCE_DELAY= diff --git a/app/cli.php b/app/cli.php index 360b5478c5..c92d2c2e6d 100644 --- a/app/cli.php +++ b/app/cli.php @@ -26,7 +26,7 @@ use Utopia\Registry\Registry; use Utopia\System\System; // overwriting runtimes to be architectur agnostic for CLI -Config::setParam('runtimes', (new Runtimes('v4rc'))->getAll(supported: false)); +Config::setParam('runtimes', (new Runtimes('v5'))->getAll(supported: false)); // require controllers after overwriting runtimes require_once __DIR__ . '/controllers/general.php'; diff --git a/app/config/collections/projects.php b/app/config/collections/projects.php index 7ea750f2b3..98d282d929 100644 --- a/app/config/collections/projects.php +++ b/app/config/collections/projects.php @@ -674,7 +674,7 @@ return [ 'size' => 8, 'signed' => true, 'required' => false, - 'default' => 'v4', + 'default' => 'v5', 'array' => false, 'filters' => [], ], diff --git a/app/config/frameworks.php b/app/config/frameworks.php index 355ead1bfc..1cb6ac811b 100644 --- a/app/config/frameworks.php +++ b/app/config/frameworks.php @@ -221,7 +221,7 @@ return [ 'flutter' => [ 'key' => 'flutter', 'name' => 'Flutter', - 'buildRuntime' => 'flutter-3.24', + 'buildRuntime' => 'flutter-3.29', 'runtimes' => getVersions($templateRuntimes['FLUTTER']['versions'], 'flutter'), 'adapters' => [ 'static' => [ diff --git a/app/config/runtimes.php b/app/config/runtimes.php index 4260655342..dbd33dac4b 100644 --- a/app/config/runtimes.php +++ b/app/config/runtimes.php @@ -6,4 +6,4 @@ use Appwrite\Runtimes\Runtimes; -return (new Runtimes('v4rc'))->getAll(); +return (new Runtimes('v5'))->getAll(); diff --git a/app/config/templates/site.php b/app/config/templates/site.php index 9954af2bbb..cefb173e4d 100644 --- a/app/config/templates/site.php +++ b/app/config/templates/site.php @@ -73,7 +73,7 @@ const TEMPLATE_FRAMEWORKS = [ 'installCommand' => '', 'buildCommand' => 'flutter build web', 'outputDirectory' => './build/web', - 'buildRuntime' => 'flutter-3.24', + 'buildRuntime' => 'flutter-3.29', 'adapter' => 'static', 'fallbackFile' => '', ], @@ -145,6 +145,48 @@ return [ 'providerVersion' => '0.1.*', 'variables' => [] ], + [ + 'key' => 'starter-for-flutter', + 'name' => 'Flutter starter', + 'useCases' => ['starter'], + 'screenshotDark' => $url . '/images/sites/templates/starter-for-flutter-dark.png', + 'screenshotLight' => $url . '/images/sites/templates/starter-for-flutter-light.png', + 'frameworks' => [ + getFramework('FLUTTER', [ + 'providerRootDirectory' => './', + ]), + ], + 'vcsProvider' => 'github', + 'providerRepositoryId' => 'starter-for-flutter', + 'providerOwner' => 'appwrite', + 'providerVersion' => '0.1.*', + 'variables' => [ + [ + 'name' => 'APPWRITE_PUBLIC_ENDPOINT', + 'description' => 'Endpoint of Appwrite server', + 'value' => '{apiEndpoint}', + 'placeholder' => '{apiEndpoint}', + 'required' => true, + 'type' => 'text' + ], + [ + 'name' => 'APPWRITE_PROJECT_ID', + 'description' => 'Your Appwrite project ID', + 'value' => '{projectId}', + 'placeholder' => '{projectId}', + 'required' => true, + 'type' => 'text' + ], + [ + 'name' => 'APPWRITE_PROJECT_NAME', + 'description' => 'Your Appwrite project name', + 'value' => '{projectName}', + 'placeholder' => '{projectName}', + 'required' => true, + 'type' => 'text' + ], + ] + ], [ 'key' => 'starter-for-js', 'name' => 'JavaScript starter', diff --git a/app/controllers/general.php b/app/controllers/general.php index f28409567e..e80f30c0b4 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -245,7 +245,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw $version = match ($type) { 'function' => $resource->getAttribute('version', 'v2'), - 'site' => 'v4', + 'site' => 'v5', }; $runtimes = Config::getParam($version === 'v2' ? 'runtimes-v2' : 'runtimes', []); @@ -416,7 +416,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw try { $version = match ($type) { 'function' => $resource->getAttribute('version', 'v2'), - 'site' => 'v4', + 'site' => 'v5', }; $entrypoint = match ($type) { 'function' => $deployment->getAttribute('entrypoint', ''), diff --git a/composer.lock b/composer.lock index 4fc58cf873..da69c2bb0b 100644 --- a/composer.lock +++ b/composer.lock @@ -157,16 +157,16 @@ }, { "name": "appwrite/php-runtimes", - "version": "0.18.0", + "version": "0.18.1", "source": { "type": "git", "url": "https://github.com/appwrite/runtimes.git", - "reference": "f1ddcc567325659ad79506bc9684a4fc2009dc42" + "reference": "97b5d97ae2c0fc9a2a374769eadff024f95783aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/runtimes/zipball/f1ddcc567325659ad79506bc9684a4fc2009dc42", - "reference": "f1ddcc567325659ad79506bc9684a4fc2009dc42", + "url": "https://api.github.com/repos/appwrite/runtimes/zipball/97b5d97ae2c0fc9a2a374769eadff024f95783aa", + "reference": "97b5d97ae2c0fc9a2a374769eadff024f95783aa", "shasum": "" }, "require": { @@ -206,9 +206,9 @@ ], "support": { "issues": "https://github.com/appwrite/runtimes/issues", - "source": "https://github.com/appwrite/runtimes/tree/0.18.0" + "source": "https://github.com/appwrite/runtimes/tree/0.18.1" }, - "time": "2025-03-07T14:30:31+00:00" + "time": "2025-03-11T14:05:46+00:00" }, { "name": "beberlei/assert", @@ -5085,16 +5085,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "0.40.2", + "version": "0.40.6", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "56f09482d9e2f223911277ab887f197402708049" + "reference": "d8816209a07e7d64ef62dbcaf8ad4aa1262f58b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/56f09482d9e2f223911277ab887f197402708049", - "reference": "56f09482d9e2f223911277ab887f197402708049", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/d8816209a07e7d64ef62dbcaf8ad4aa1262f58b9", + "reference": "d8816209a07e7d64ef62dbcaf8ad4aa1262f58b9", "shasum": "" }, "require": { @@ -5130,9 +5130,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/0.40.2" + "source": "https://github.com/appwrite/sdk-generator/tree/0.40.6" }, - "time": "2025-03-06T16:31:03+00:00" + "time": "2025-03-10T19:04:24+00:00" }, { "name": "doctrine/annotations", @@ -5404,16 +5404,16 @@ }, { "name": "laravel/pint", - "version": "v1.21.0", + "version": "v1.21.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425" + "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425", + "url": "https://api.github.com/repos/laravel/pint/zipball/c44bffbb2334e90fba560933c45948fa4a3f3e86", + "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86", "shasum": "" }, "require": { @@ -5424,9 +5424,9 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.68.5", - "illuminate/view": "^11.42.0", - "larastan/larastan": "^3.0.4", + "friendsofphp/php-cs-fixer": "^3.70.2", + "illuminate/view": "^11.44.1", + "larastan/larastan": "^3.1.0", "laravel-zero/framework": "^11.36.1", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^2.3", @@ -5466,7 +5466,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-02-18T03:18:57+00:00" + "time": "2025-03-11T03:22:21+00:00" }, { "name": "matthiasmullie/minify", diff --git a/docker-compose.yml b/docker-compose.yml index 547374eb5f..e457b87325 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -962,7 +962,7 @@ services: hostname: exc1 <<: *x-logging stop_signal: SIGINT - image: openruntimes/executor:0.7.9 + image: openruntimes/executor:0.7.10 restart: unless-stopped networks: - appwrite @@ -985,7 +985,7 @@ services: - OPR_EXECUTOR_ENV=$_APP_ENV - OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES,$_APP_SITES_RUNTIMES - OPR_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET - - OPR_EXECUTOR_RUNTIME_VERSIONS=v2,v4,v4rc + - OPR_EXECUTOR_RUNTIME_VERSIONS=v2,v5 - OPR_EXECUTOR_LOGGING_CONFIG=$_APP_LOGGING_CONFIG - OPR_EXECUTOR_STORAGE_DEVICE=$_APP_STORAGE_DEVICE - OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY=$_APP_STORAGE_S3_ACCESS_KEY diff --git a/public/images/sites/templates/flutter-starter-dark.png b/public/images/sites/templates/flutter-starter-dark.png index 9b239ff767d76460066652793d7ed5d0ec0ce520..82c78d0c7df93d7db09660d6ad9ea8352df8ff19 100644 GIT binary patch literal 4331 zcmeAS@N?(olHy`uVBq!ia0y~yU707*_Z2?mA+ z7G@rxnN5sr3=9ef8JHOuCL}Zf&G#@k092wfs(dtLMiaqk_82V*M$5?2>R_~@9BmVf xww6X4hNDg9(cZymziG6KINEt8VVqzCqem&n+^6L_hQLMygQu&X%Q~loCICNDH~Iho literal 14779 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 literal 14779 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 $commands, 'scopes' => $scopes, 'search' => implode(' ', [$functionId, $name, $runtime]), - 'version' => 'v4', + 'version' => 'v5', 'installationId' => $installation->getId(), 'installationInternalId' => $installation->getInternalId(), 'providerRepositoryId' => $providerRepositoryId, diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php index bf442e7c3b..7ed3d0add3 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php @@ -1102,7 +1102,7 @@ class Builds extends Action { return match ($resource->getCollection()) { 'functions' => $resource->getAttribute('version', 'v2'), - 'sites' => 'v4', + 'sites' => 'v5', }; } diff --git a/src/Appwrite/Utopia/Response/Model/Func.php b/src/Appwrite/Utopia/Response/Model/Func.php index 3bfc24c82e..7037f5e363 100644 --- a/src/Appwrite/Utopia/Response/Model/Func.php +++ b/src/Appwrite/Utopia/Response/Model/Func.php @@ -119,7 +119,7 @@ class Func extends Model ->addRule('version', [ 'type' => self::TYPE_STRING, 'description' => 'Version of Open Runtimes used for the function.', - 'default' => 'v4', + 'default' => 'v5', 'example' => 'v2', ]) ->addRule('installationId', [ diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php index 9702db43de..6e6a7bd3f4 100644 --- a/src/Executor/Executor.php +++ b/src/Executor/Executor.php @@ -74,8 +74,8 @@ class Executor $route = "/runtimes"; // Remove after migration - if ($version == 'v3') { - $version = 'v4'; + if ($version == 'v3' || $version === 'v4') { + $version = 'v5'; } $params = [ @@ -201,8 +201,8 @@ class Executor $route = '/runtimes/' . $runtimeId . '/executions'; // Remove after migration - if ($version == 'v3') { - $version = 'v4'; + if ($version == 'v3' || $version === 'v4') { + $version = 'v5'; } $params = [ diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index 6671c57c90..18d848b9e6 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -1268,7 +1268,7 @@ class FunctionsCustomServerTest extends Scope return [ ['folder' => 'php-fn', 'name' => 'php-8.0', 'entrypoint' => 'index.php', 'runtimeName' => 'PHP', 'runtimeVersion' => '8.0'], ['folder' => 'node', 'name' => 'node-18.0', 'entrypoint' => 'index.js', 'runtimeName' => 'Node.js', 'runtimeVersion' => '18.0'], - // TODO: Re-enable; temporarly disabled due to OPR v4rc issues + // TODO: Re-enable; temporarly disabled due to OPR v5 issues // ['folder' => 'python', 'name' => 'python-3.9', 'entrypoint' => 'main.py', 'runtimeName' => 'Python', 'runtimeVersion' => '3.9'], ['folder' => 'ruby', 'name' => 'ruby-3.1', 'entrypoint' => 'main.rb', 'runtimeName' => 'Ruby', 'runtimeVersion' => '3.1'], // Swift and Dart disabled on purpose, as it's very slow.