diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..6f8ea5fa93 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,53 @@ +name: "Release" + +on: + release: + types: [published] + +jobs: + tests: + name: Unit & E2E + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + # Fetch submodules + submodules: recursive + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: appwrite/appwrite + tags: | + type=semver,pattern={{major}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}}.{{minor}}.{{patch}} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + platforms: linux/amd64,linux/arm64 + build-args: | + VERSION=${{ steps.meta.outputs.version }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index 4ea62fd0d7..1a55209208 100755 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN composer install --ignore-platform-reqs --optimize-autoloader \ --no-plugins --no-scripts --prefer-dist \ `if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi` -FROM node:16.14.2-alpine3.15 as node +FROM --platform=$BUILDPLATFORM node:16.14.2-alpine3.15 as node COPY app/console /usr/local/src/console diff --git a/app/config/errors.php b/app/config/errors.php index 0ad10f4f71..87a1ab36b1 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -102,7 +102,7 @@ return [ ], Exception::USER_ALREADY_EXISTS => [ 'name' => Exception::USER_ALREADY_EXISTS, - 'description' => 'A user with the same email already exists in your project.', + 'description' => 'A user with the same id, email, or phone already exists in your project.', 'code' => 409, ], Exception::USER_BLOCKED => [ diff --git a/app/config/platforms.php b/app/config/platforms.php index 0bbbf76aa2..caff21b28b 100644 --- a/app/config/platforms.php +++ b/app/config/platforms.php @@ -28,7 +28,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-web.git', 'gitRepoName' => 'sdk-for-web', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', 'demos' => [ [ 'icon' => 'react.svg', @@ -76,7 +76,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-flutter.git', 'gitRepoName' => 'sdk-for-flutter', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'apple', @@ -94,7 +94,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-apple.git', 'gitRepoName' => 'sdk-for-apple', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'objective-c', @@ -111,7 +111,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-objective-c.git', 'gitRepoName' => 'sdk-for-objective-c', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'android', @@ -129,7 +129,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-android.git', 'gitRepoName' => 'sdk-for-android', 'gitUserName' => 'appwrite', - 'gitBranch' => 'main', + 'gitBranch' => 'dev', 'docDirectories' => [ 'Kotlin' => 'kotlin', 'Java' => 'java', @@ -196,14 +196,14 @@ return [ 'prism' => 'javascript', 'source' => \realpath(__DIR__ . '/../sdks/console-web'), 'gitUrl' => 'git@github.com:appwrite/sdk-for-console.git', - 'gitBranch' => 'main', + 'gitBranch' => 'dev', 'gitRepoName' => 'sdk-for-console', 'gitUserName' => 'appwrite', ], [ 'key' => 'cli', 'name' => 'Command Line', - 'version' => '2.0.0', + 'version' => '2.0.2', 'url' => 'https://github.com/appwrite/sdk-for-cli', 'package' => 'https://www.npmjs.com/package/appwrite-cli', 'enabled' => true, @@ -216,7 +216,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-cli.git', 'gitRepoName' => 'sdk-for-cli', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], ], ], @@ -244,7 +244,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-node.git', 'gitRepoName' => 'sdk-for-node', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'deno', @@ -262,7 +262,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-deno.git', 'gitRepoName' => 'sdk-for-deno', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'php', @@ -280,7 +280,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-php.git', 'gitRepoName' => 'sdk-for-php', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'python', @@ -298,7 +298,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-python.git', 'gitRepoName' => 'sdk-for-python', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'ruby', @@ -316,7 +316,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-ruby.git', 'gitRepoName' => 'sdk-for-ruby', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'go', @@ -334,7 +334,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-go.git', 'gitRepoName' => 'sdk-for-go', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'java', @@ -352,7 +352,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-java.git', 'gitRepoName' => 'sdk-for-java', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'dotnet', @@ -370,7 +370,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-dotnet.git', 'gitRepoName' => 'sdk-for-dotnet', 'gitUserName' => 'appwrite', - 'gitBranch' => 'main', + 'gitBranch' => 'dev', ], [ 'key' => 'dart', @@ -388,7 +388,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-dart.git', 'gitRepoName' => 'sdk-for-dart', 'gitUserName' => 'appwrite', - 'gitBranch' => 'master', + 'gitBranch' => 'dev', ], [ 'key' => 'kotlin', @@ -406,7 +406,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-kotlin.git', 'gitRepoName' => 'sdk-for-kotlin', 'gitUserName' => 'appwrite', - 'gitBranch' => 'main', + 'gitBranch' => 'dev', 'docDirectories' => [ 'Kotlin' => 'kotlin', 'Java' => 'java', @@ -428,7 +428,7 @@ return [ 'gitUrl' => 'git@github.com:appwrite/sdk-for-swift.git', 'gitRepoName' => 'sdk-for-swift', 'gitUserName' => 'appwrite', - 'gitBranch' => 'main', + 'gitBranch' => 'dev', ], [ 'key' => 'graphql', diff --git a/app/config/variables.php b/app/config/variables.php index 193e167b8f..978a853ef6 100644 --- a/app/config/variables.php +++ b/app/config/variables.php @@ -764,7 +764,7 @@ return [ ], [ 'name' => '_APP_FUNCTIONS_INACTIVE_THRESHOLD', - 'description' => 'The minimum time a function can be inactive before it\'s container is shutdown and put to sleep. The default value is 60 seconds', + 'description' => 'The minimum time a function must be inactive before it can be shut down and cleaned up. This feature is intended to clean up unused containers. Containers may remain active for longer than the interval before being shut down, as Appwrite only cleans up unused containers every hour. If no value is provided, the default is 60 seconds.', 'introduction' => '0.13.0', 'default' => '60', 'required' => false, diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index 4945fcfe9a..dadb08be3f 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -239,8 +239,8 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND cd ' . $target . ' && \ git init --initial-branch=' . $gitBranch . ' && \ git remote add origin ' . $gitUrl . ' && \ - git fetch && \ - git pull ' . $gitUrl . ' && \ + git fetch origin ' . $gitBranch . ' && \ + git pull origin ' . $gitBranch . ' && \ rm -rf ' . $target . '/* && \ cp -r ' . $result . '/* ' . $target . '/ && \ git add . && \ diff --git a/app/workers/functions.php b/app/workers/functions.php index d7cb8c7ff3..6c33447eaf 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -82,18 +82,22 @@ class FunctionsV1 extends Worker Console::success('Iterating function: ' . $function->getAttribute('name')); - $this->execute( - project: $project, - function: $function, - dbForProject: $database, - trigger: 'event', - // Pass first, most verbose event pattern - event: $events[0], - eventData: $payload, - user: $user - ); + try { + $this->execute( + project: $project, + function: $function, + dbForProject: $database, + trigger: 'event', + // Pass first, most verbose event pattern + event: $events[0], + eventData: $payload, + user: $user + ); - Console::success('Triggered function: ' . $events[0]); + Console::success('Triggered function: ' . $events[0]); + } catch (\Throwable $th) { + Console::error("Failed to execute " . $function->getId() . " with error: " . $th->getMessage()); + } } } diff --git a/docs/examples/1.3.x/console-cli/examples/console/variables.md b/docs/examples/1.3.x/console-cli/examples/console/variables.md new file mode 100644 index 0000000000..1c67cf5ad8 --- /dev/null +++ b/docs/examples/1.3.x/console-cli/examples/console/variables.md @@ -0,0 +1 @@ +appwrite console variables diff --git a/docs/sdks/apple/GETTING_STARTED.md b/docs/sdks/apple/GETTING_STARTED.md index 1da041112c..e62f1ce3fa 100644 --- a/docs/sdks/apple/GETTING_STARTED.md +++ b/docs/sdks/apple/GETTING_STARTED.md @@ -33,7 +33,7 @@ Next we need to add a hook to save cookies when our app is opened by its callbac > If you're using UIKit, you can skip this section. -In SwiftUI this is as simple as ensuring `.registerOAuthHanlder()` is called on the `View` you want to invoke an OAuth request from. +In SwiftUI this is as simple as ensuring `.registerOAuthHandler()` is called on the `View` you want to invoke an OAuth request from. ### Updating the SceneDelegate for UIKit diff --git a/src/Appwrite/Utopia/Response/Model/AttributeDatetime.php b/src/Appwrite/Utopia/Response/Model/AttributeDatetime.php index 16692d215b..4651aebd06 100644 --- a/src/Appwrite/Utopia/Response/Model/AttributeDatetime.php +++ b/src/Appwrite/Utopia/Response/Model/AttributeDatetime.php @@ -18,10 +18,10 @@ class AttributeDatetime extends Attribute 'example' => 'birthDay', ]) ->addRule('type', [ - 'type' => self::TYPE_DATETIME, + 'type' => self::TYPE_STRING, 'description' => 'Attribute type.', 'default' => '', - 'example' => self::TYPE_DATETIME_EXAMPLE, + 'example' => self::TYPE_DATETIME, ]) ->addRule('format', [ 'type' => self::TYPE_DATETIME,