From fc17e125474a85892f18b524b6610bce52106f9f Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 20 Sep 2021 16:52:12 +0100 Subject: [PATCH] Get Rust Execution working --- app/executor.php | 62 +++++---- composer.lock | 226 +++++++++++++++++++++++--------- public/images/runtimes/rust.png | Bin 0 -> 40894 bytes 3 files changed, 202 insertions(+), 86 deletions(-) create mode 100644 public/images/runtimes/rust.png diff --git a/app/executor.php b/app/executor.php index 0e26d40e75..477fb2487b 100644 --- a/app/executor.php +++ b/app/executor.php @@ -340,6 +340,7 @@ function runBuildStage(string $tagID, Document $function, string $projectID, Dat 'APPWRITE_FUNCTION_RUNTIME_NAME' => $runtime['name'], 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $runtime['version'], 'APPWRITE_FUNCTION_PROJECT_ID' => $projectID, + 'APPWRITE_ENTRYPOINT_NAME' => $tag->getAttribute('entrypoint') ]); $buildStart = \microtime(true); @@ -383,7 +384,7 @@ function runBuildStage(string $tagID, Document $function, string $projectID, Dat command: [ 'sh', '-c', - 'mkdir /usr/code -p && cp /tmp/code.tar.gz /usr/code.tar.gz && cd /usr && tar -zxf /usr/code.tar.gz -C /usr/code && rm /usr/code.tar.gz' + 'mkdir -p /usr/code && cp /tmp/code.tar.gz /usr/code.tar.gz && cd /usr && tar -zxf /usr/code.tar.gz -C /usr/code && rm /usr/code.tar.gz' ], stdout: $untarStdout, stderr: $untarStderr, @@ -403,7 +404,7 @@ function runBuildStage(string $tagID, Document $function, string $projectID, Dat command: $runtime['buildCommand'], stdout: $buildStdout, stderr: $buildStderr, - timeout: 60 + timeout: 600 //TODO: Make this configurable ); if (!$buildSuccess) { @@ -419,9 +420,7 @@ function runBuildStage(string $tagID, Document $function, string $projectID, Dat $compressSuccess = $orchestration->execute( name: $container, command: [ - 'sh', - '-c', - 'tar -czvf /usr/builtCode/code.tar.gz /usr/code' + 'tar', '-C', '/usr/code', '-czvf', '/usr/builtCode/code.tar.gz', './' ], stdout: $compressStdout, stderr: $compressStderr, @@ -533,12 +532,12 @@ function createRuntimeServer(string $functionId, string $projectId, Document $ta // Grab Tag Files $tagPath = $tag->getAttribute('builtPath', ''); - $tagPathTarget = '/tmp/project-' . $projectId . '/' . $tag->getId() . '/code.tar.gz'; + $tagPathTarget = '/tmp/project-' . $projectId . '/' . $tag->getId() . '/builtCode/code.tar.gz'; $tagPathTargetDir = \pathinfo($tagPathTarget, PATHINFO_DIRNAME); $container = 'appwrite-function-' . $tag->getId(); if (!\is_readable($tagPath)) { - throw new Exception('Code is not readable: ' . $tag->getAttribute('path', '')); + throw new Exception('Code is not readable: ' . $tagPath); } if (!\file_exists($tagPathTargetDir)) { @@ -589,24 +588,25 @@ function createRuntimeServer(string $functionId, string $projectId, Document $ta // Add to network $orchestration->networkConnect($container, 'appwrite_runtimes'); - $untarStdout = ''; - $untarStderr = ''; + // Handled by Dockerfiles + // $untarStdout = ''; + // $untarStderr = ''; - $untarSuccess = $orchestration->execute( - name: $container, - command: [ - 'sh', - '-c', - 'mkdir /usr/code -p && cp /tmp/code.tar.gz /usr/code/code.tar.gz && cd /usr/code && tar -zxf /usr/code/code.tar.gz --strip 1 && rm /usr/code/code.tar.gz' - ], - stdout: $untarStdout, - stderr: $untarStderr, - timeout: 60 - ); + // $untarSuccess = $orchestration->execute( + // name: $container, + // command: [ + // 'sh', + // '-c', + // 'mkdir /usr/code -p && cp /tmp/code.tar.gz /usr/code/code.tar.gz && cd /usr/code && tar -zxf /usr/code/code.tar.gz --strip 1 && rm /usr/code/code.tar.gz' + // ], + // stdout: $untarStdout, + // stderr: $untarStderr, + // timeout: 60 + // ); - if (!$untarSuccess) { - throw new Exception('Failed to extract tar: ' . $untarStderr); - } + // if (!$untarSuccess) { + // throw new Exception('Failed to extract tar: ' . $untarStderr); + // } $executionEnd = \microtime(true); @@ -750,20 +750,28 @@ function execute(string $trigger, string $projectId, string $executionId, string do { $attempts++; $ch = \curl_init(); - \curl_setopt($ch, CURLOPT_URL, "http://" . $container . ":3000/"); - \curl_setopt($ch, CURLOPT_POST, true); - \curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ + + $body = \json_encode([ 'path' => '/usr/code', 'file' => $tag->getAttribute('entrypoint', ''), 'env' => $vars, 'payload' => $data, 'timeout' => $function->getAttribute('timeout', (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)) - ])); + ]); + + \curl_setopt($ch, CURLOPT_URL, "http://" . $container . ":3000/"); + \curl_setopt($ch, CURLOPT_POST, true); + \curl_setopt($ch, CURLOPT_POSTFIELDS, $body); \curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); \curl_setopt($ch, CURLOPT_TIMEOUT, $function->getAttribute('timeout', (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900))); \curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + \curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', + 'Content-Length: ' . \strlen($body) + ]); + $executorResponse = \curl_exec($ch); $error = \curl_error($ch); diff --git a/composer.lock b/composer.lock index e8b27e7f3d..c421905ca1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "67e012ba43c42585ebaaf21f3e2ab840", + "content-hash": "5a286ad3333879ad6087d3ff97f2858b", "packages": [ { "name": "adhocore/jwt", @@ -119,10 +119,11 @@ "source": { "type": "git", "url": "https://github.com/PineappleIOnic/php-runtimes.git", - "reference": "147e76f4a72bc925d9d1613494417d583bd5de34" + "reference": "315b451ca1b5604c7d199628155703d908d832b5" }, "require": { "php": ">=8.0", + "utopia-php/orchestration": "dev-exp1", "utopia-php/system": "0.4.*" }, "require-dev": { @@ -155,7 +156,7 @@ "php", "runtimes" ], - "time": "2021-09-06T14:46:02+00:00" + "time": "2021-09-20T12:17:32+00:00" }, { "name": "chillerlan/php-qrcode", @@ -237,16 +238,16 @@ }, { "name": "chillerlan/php-settings-container", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/chillerlan/php-settings-container.git", - "reference": "98ccc1b31b31a53bcb563465c4961879b2b93096" + "reference": "ec834493a88682dd69652a1eeaf462789ed0c5f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/98ccc1b31b31a53bcb563465c4961879b2b93096", - "reference": "98ccc1b31b31a53bcb563465c4961879b2b93096", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/ec834493a88682dd69652a1eeaf462789ed0c5f5", + "reference": "ec834493a88682dd69652a1eeaf462789ed0c5f5", "shasum": "" }, "require": { @@ -296,7 +297,7 @@ "type": "ko_fi" } ], - "time": "2021-01-06T15:57:03+00:00" + "time": "2021-09-06T15:17:01+00:00" }, { "name": "colinmollenhour/credis", @@ -1902,7 +1903,7 @@ "source": { "type": "git", "url": "https://github.com/PineappleIOnic/orchestration.git", - "reference": "26b4d08fd72a00a1e2b41e11876e97566036db48" + "reference": "31ad19f3421b94b5050c06c0fe124b9aee09f1e3" }, "require": { "php": ">=8.0", @@ -1943,7 +1944,7 @@ "upf", "utopia" ], - "time": "2021-08-27T09:04:09+00:00" + "time": "2021-09-17T15:25:20+00:00" }, { "name": "utopia-php/preloader", @@ -2213,6 +2214,64 @@ }, "time": "2021-02-04T14:14:49+00:00" }, + { + "name": "utopia-php/websocket", + "version": "0.0.1", + "source": { + "type": "git", + "url": "https://github.com/utopia-php/websocket.git", + "reference": "808317ef4ea0683c2c82dee5d543b1c8378e2e1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/utopia-php/websocket/zipball/808317ef4ea0683c2c82dee5d543b1c8378e2e1b", + "reference": "808317ef4ea0683c2c82dee5d543b1c8378e2e1b", + "shasum": "" + }, + "require": { + "php": ">=8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.5", + "swoole/ide-helper": "4.6.6", + "textalk/websocket": "1.5.2", + "vimeo/psalm": "^4.8.1", + "workerman/workerman": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Utopia\\WebSocket\\": "src/WebSocket" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eldad Fux", + "email": "eldad@appwrite.io" + }, + { + "name": "Torsten Dittmann", + "email": "torsten@appwrite.io" + } + ], + "description": "A simple abstraction for WebSocket servers.", + "keywords": [ + "framework", + "php", + "upf", + "utopia", + "websocket" + ], + "support": { + "issues": "https://github.com/utopia-php/websocket/issues", + "source": "https://github.com/utopia-php/websocket/tree/0.0.1" + }, + "time": "2021-07-11T13:09:44+00:00" + }, { "name": "webmozart/assert", "version": "1.10.0", @@ -2441,16 +2500,16 @@ }, { "name": "appwrite/sdk-generator", - "version": "0.12.1", + "version": "0.14.3", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "8e3c4a0a4159152d428602ffc3a2a4947e72c609" + "reference": "a1075a59db33fe2bba9e648bf67b3ece1debcfa4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8e3c4a0a4159152d428602ffc3a2a4947e72c609", - "reference": "8e3c4a0a4159152d428602ffc3a2a4947e72c609", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/a1075a59db33fe2bba9e648bf67b3ece1debcfa4", + "reference": "a1075a59db33fe2bba9e648bf67b3ece1debcfa4", "shasum": "" }, "require": { @@ -2484,22 +2543,22 @@ "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.12.1" + "source": "https://github.com/appwrite/sdk-generator/tree/0.14.3" }, - "time": "2021-07-29T07:50:02+00:00" + "time": "2021-09-06T09:32:51+00:00" }, { "name": "composer/package-versions-deprecated", - "version": "1.11.99.3", + "version": "1.11.99.4", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "fff576ac850c045158a250e7e27666e146e78d18" + "reference": "b174585d1fe49ceed21928a945138948cb394600" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/fff576ac850c045158a250e7e27666e146e78d18", - "reference": "fff576ac850c045158a250e7e27666e146e78d18", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", + "reference": "b174585d1fe49ceed21928a945138948cb394600", "shasum": "" }, "require": { @@ -2543,7 +2602,7 @@ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "support": { "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.3" + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4" }, "funding": [ { @@ -2559,7 +2618,7 @@ "type": "tidelift" } ], - "time": "2021-08-17T13:49:14+00:00" + "time": "2021-09-13T08:41:34+00:00" }, { "name": "composer/semver", @@ -3155,16 +3214,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.12.0", + "version": "v4.13.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143" + "reference": "50953a2691a922aa1769461637869a0a2faa3f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53", + "reference": "50953a2691a922aa1769461637869a0a2faa3f53", "shasum": "" }, "require": { @@ -3205,9 +3264,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" }, - "time": "2021-07-21T10:44:31+00:00" + "time": "2021-09-20T12:20:58+00:00" }, { "name": "openlss/lib-array2xml", @@ -3484,16 +3543,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/30f38bffc6f24293dadd1823936372dfa9e86e2f", + "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f", "shasum": "" }, "require": { @@ -3501,7 +3560,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -3527,39 +3587,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.0" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2021-09-17T15:28:14+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -3594,29 +3654,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.12.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3665,7 +3725,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" }, "funding": [ { @@ -3673,7 +3733,7 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2021-09-17T05:39:03+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4920,7 +4980,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -5819,6 +5878,55 @@ ], "time": "2021-08-26T08:00:08+00:00" }, + { + "name": "textalk/websocket", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/Textalk/websocket-php.git", + "reference": "b93249453806a2dd46495de46d76fcbcb0d8dee8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/b93249453806a2dd46495de46d76fcbcb0d8dee8", + "reference": "b93249453806a2dd46495de46d76fcbcb0d8dee8", + "shasum": "" + }, + "require": { + "php": "^7.2 | ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.0|^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "WebSocket\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Fredrik Liljegren" + }, + { + "name": "Sören Jensen", + "email": "soren@abicart.se" + } + ], + "description": "WebSocket client and server", + "support": { + "issues": "https://github.com/Textalk/websocket-php/issues", + "source": "https://github.com/Textalk/websocket-php/tree/1.5.2" + }, + "time": "2021-02-12T15:39:23+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.1", @@ -5871,16 +5979,16 @@ }, { "name": "twig/twig", - "version": "v2.14.6", + "version": "v2.14.7", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "27e5cf2b05e3744accf39d4c68a3235d9966d260" + "reference": "8e202327ee1ed863629de9b18a5ec70ac614d88f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/27e5cf2b05e3744accf39d4c68a3235d9966d260", - "reference": "27e5cf2b05e3744accf39d4c68a3235d9966d260", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/8e202327ee1ed863629de9b18a5ec70ac614d88f", + "reference": "8e202327ee1ed863629de9b18a5ec70ac614d88f", "shasum": "" }, "require": { @@ -5890,7 +5998,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "extra": { @@ -5934,7 +6042,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v2.14.6" + "source": "https://github.com/twigphp/Twig/tree/v2.14.7" }, "funding": [ { @@ -5946,7 +6054,7 @@ "type": "tidelift" } ], - "time": "2021-05-16T12:12:47+00:00" + "time": "2021-09-17T08:39:54+00:00" }, { "name": "vimeo/psalm", diff --git a/public/images/runtimes/rust.png b/public/images/runtimes/rust.png new file mode 100644 index 0000000000000000000000000000000000000000..b26e8493de9b191edd312c9ac43f7f6f58512f71 GIT binary patch literal 40894 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