From 9d496ab9877177a70099a20bfec7752fa01691e9 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 16:21:03 +0530 Subject: [PATCH 01/11] feat(cli-2.0): initial draft --- 018-cli-2.0/018-cli-2.0.md | 259 +++++++++++++++++++++++++++++++++++++ 018-cli-2.0/cli_auth.png | Bin 0 -> 52804 bytes 2 files changed, 259 insertions(+) create mode 100644 018-cli-2.0/018-cli-2.0.md create mode 100644 018-cli-2.0/cli_auth.png diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md new file mode 100644 index 0000000..f41be72 --- /dev/null +++ b/018-cli-2.0/018-cli-2.0.md @@ -0,0 +1,259 @@ +# Title + +- Implementation Owner: @christyjacob4 +- Start Date: 12-07-2021 +- Target Date: (expected date of completion, dd-mm-yyyy) +- Appwrite Issue: NA + +## Summary + +[summary]: #summary + + +## Problem Statement (Step 1) + +[problem-statement]: #problem-statement + +**What problem are you trying to solve?** +Improve the overall CLI developer experience. + +**What is the context or background in which this problem exists?** + + + +**Once the proposal is implemented, how will the system change?** + + + + + +## Design proposal (Step 2) + +[design-proposal]: #design-proposal + + + + +This refactor of the CLI will revolve around the following areas +1. Migration of the CLI from a Server Side SDK to a Console SDK +2. Easier deployment of Cloud Functions +3. Easier creation of Cloud Functions + + +## Migration of the CLI from a Server Side SDK to a Console SDK +--- + +Until now, the CLI was based off of our Server Side Swagger Spec. While this was a good start, it limits our functionality to a Server SDK. Ideally we want the CLI to be an alternative to the Console SDK ( aka the Appwrite Dashboard ). Here are some changes that we will need to make to adhere to the server spec. + +1. Authentication + +After the implementation of this RFC, the CLI will behave more like the Appwrite Console rather than a Server SDK. This accounts for a new form of Authentication that is similar to the way we handle logins in the Appwrite console. We use a cookie. + +We will introduce a new command `appwrite login` that will work in one of either ways. + +* `appwrite login` makes a request to the existing `accounts.createSession` endpoint, captures the returned cookie and uses this cookie in all the subsequent requests. + + Whenever we wish to access console specific features, we can authenticate those requests using the cookie and continue to use the API Key based authentication when using the CI. + + ```sh + $ appwrite login + ``` + +* Second method relies on a browser based auth. + +```sh +$ appwrite login + +# Browser based authentication continues. After a successful login, the returned token and user ID are stored in a hidden preferences file. +``` + +1. The command first finds an available local port. +2. Construct a redirect URL using the available port `https://localhost:1234` +3. Spin up a local http server listening to on the available port ( 1234 in this case ) +4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/login?callback=https://localhost:1234` with the redirect URL as one of the query parameters. + +![MarineGEO circle logo](cli_auth.png) + + +## Easier Deployment of cloud functions +--- + +### ✅️ Constrain Deployments from current directory. + +We start by removing the `--code` parameter in the `createTag` command and constrain function deployments only from the current directory. + +The refactored command will look like this + +```sh +appwrite functions createTag --functionId=[ID] --command=[COMMAND] +``` + +This issue will also need to be tackled as we implement this. +https://github.com/appwrite/appwrite/issues/1316 + +### ✅️ The appwrite.json File + +The next improvement is going to be along the lines of an `appwrite.json` file. Running `appwrite init` in the current directory will initialize the current directory with attributes necessary to communicate with a particular project. + +An `appwrite.json` file will be associated with one project only. + +```json +{ + project : "", + functions: { + "[Function ID]" : { + name : "My awesome function 💪", + command : "python main.py", + runtime: "python3.9" + }, + + }, + hosting: {} +} + +``` + +### The Appwrite deploy command + +```sh +appwrite deploy function +[x] FunctionOne +[x] FunctionTwo +[] FunctionThree + +# Create a function on the server using createFunction endpoint +# Create a new tag for this function using createTag endpoint +# Update the tag to activate it using updateTag endpoint + +appwrite deploy function --all +# Deploys all the functions specified in appwrite.json + + +# Future improvements +appwrite deploy site +appwrite deploy site --all +``` + + + +## Easier creation of cloud functions +--- + +We will introduce an `appwrite generate` command that does the following +* Generate a function / static site template. +* Make an entry in the `appwrite.json` file . Throw an error if the file doesn't exist. + +Here are some example usages + +```sh +appwrite generate function --name="FunctionOne" --runtime=python-3.9 +# Creates a folder called FunctionOne with a template for a sample python function. +``` + +Under the hood, this command does the following +1. Clones a repository what + + + + + +## Examples +--- + +### ✅️ Login + + + + +### ✅️ Appwrite Init + +```sh +mkdir temp && cd temp + +# Initialize the current directory with an appwrite project +appwrite init + +# Two scenarios +# 1. Associate current directory with an existing project +# 2. Create a new Appwrite project along with the initialization. + +``` + +```sh +temp +├── appwrite.json +├── FunctionOne +│   ├── .appwrite +│   ├── main.py +│   └── requirements.txt +└── FunctionTwo + ├── index.js + ├── node_modules + └── package.json +``` + +### Generate function + + + +### Prior art + +[prior-art]: #prior-art + + + +### Unresolved questions + +[unresolved-questions]: #unresolved-questions + + + + + +### Future possibilities + +[future-possibilities]: #future-possibilities + + + +Along with this refactor, there are a couple of additional improvements that can be made if time permits. + +* Rewrite the current `Parser.php` class +* \ No newline at end of file diff --git a/018-cli-2.0/cli_auth.png b/018-cli-2.0/cli_auth.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c3574e4aef47de1fa23c15a291d5d674aaac2c GIT binary patch literal 52804 zcmeEuc{r4B_-~}5QnpBB8Cw#@SjO0mF$QBByHI1sSZ4-fU$bRoCn2OH?TeHpTS*}k zk(9k6QplF<&NJV>+wYw3zvqv0UFW)H%*;FQyzlee&;8uX=lLp>TO66&od}l(N2x8u$Z+Dk!O`IsHB#@8M4Q z^Fpc$P;h}`4oXT=%1H1I>qQ9)1+Ss%YNymxWWhUqKR;i0dv`ZeuRtjnT2&dYpsdFH zi7Cd$3@ZgQ0PlUheB8l{kvqYM%KQm203V{@MFpoTsVJx^C@F(u2A%;_GB^vZj!=Lq zs3?OMC73$+;-9IYm0;j2I5=jFC*cFU{&hR%EZqa~9=~U38Dbd%Jr$0m;8jdR{QZ$( zJ~o8kGYfVPpm_nY{2`>jZ_fO6V3?o#@54m*U@rm~2~0}a5J;Ekh4%=+lffxoe+m%i z@9qI766|27upw4{$~cD*n(yz+Q}AF4e_Y!V$WUJC_eJ1#6gRg(nu?(%6t7Q&Vvulu zM?!EYH55u#hGB4S=K5rqJ09n2?`iDirQ~nw9Rz*|gpGE<8hSx(OuRjnDJou}R#YQz zV`Cd1FH{JEf+G7+g3w+x%W!jo2^yU1=WS$d0au6H+jt{GN#@{4xC8UJx;`P$$ew2G z;cJX{^s}+F^S5y$_<@B%8k+?Km*rKW`p!58rdn6 z5te4)DrA48Bf>aT+0aTwO(_5zu(l_t`w*SNNlGX;@G%VMN3rk-22w+!tpdHmLg4

I+A<0k8 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

DEh(UhA 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 Date: Wed, 14 Jul 2021 17:21:31 +0530 Subject: [PATCH 02/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 134 ++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 53 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index f41be72..8a6a4bf 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -15,17 +15,16 @@ [problem-statement]: #problem-statement **What problem are you trying to solve?** -Improve the overall CLI developer experience. +1. We cannot create and manage projects from the CLI +2. Deploying functions is not very easy using the CLI +3. Developers find it hard to create and test cloud functions locally. + **What is the context or background in which this problem exists?** - **Once the proposal is implemented, how will the system change?** - - - - +The CLI will behave more like the console SDK and provide options to create delete and manage all your projects without leaving the CLI. ## Design proposal (Step 2) @@ -58,7 +57,7 @@ This refactor of the CLI will revolve around the following areas 3. Easier creation of Cloud Functions -## Migration of the CLI from a Server Side SDK to a Console SDK +## Migration of the CLI from a Server SDK to a Console SDK --- Until now, the CLI was based off of our Server Side Swagger Spec. While this was a good start, it limits our functionality to a Server SDK. Ideally we want the CLI to be an alternative to the Console SDK ( aka the Appwrite Dashboard ). Here are some changes that we will need to make to adhere to the server spec. @@ -75,6 +74,8 @@ We will introduce a new command `appwrite login` that will work in one of either ```sh $ appwrite login + Email: + Password: ``` * Second method relies on a browser based auth. @@ -90,13 +91,13 @@ $ appwrite login 3. Spin up a local http server listening to on the available port ( 1234 in this case ) 4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/login?callback=https://localhost:1234` with the redirect URL as one of the query parameters. -![MarineGEO circle logo](cli_auth.png) +![CLI Auth](cli_auth.png) ## Easier Deployment of cloud functions --- -### ✅️ Constrain Deployments from current directory. +### 🟢 Constrain deployments from current directory. We start by removing the `--code` parameter in the `createTag` command and constrain function deployments only from the current directory. @@ -109,29 +110,56 @@ appwrite functions createTag --functionId=[ID] --command=[COMMAND] This issue will also need to be tackled as we implement this. https://github.com/appwrite/appwrite/issues/1316 -### ✅️ The appwrite.json File +### 🟢 The `appwrite.json` File + +The next improvement is going to be along the lines of an `appwrite.json` file. -The next improvement is going to be along the lines of an `appwrite.json` file. Running `appwrite init` in the current directory will initialize the current directory with attributes necessary to communicate with a particular project. +Running `appwrite init` in the current directory will initialize the current directory with attributes necessary to communicate with a particular project. + +Consider this example +```sh +mkdir temp && cd temp -An `appwrite.json` file will be associated with one project only. +# Initialize the current directory with an appwrite project +appwrite init +``` + +```sh +temp +├── appwrite.json +├── FunctionOne +│   ├── .appwrite +│   ├── main.py +│   └── requirements.txt +└── FunctionTwo + ├── index.js + ├── node_modules + └── package.json +``` + +An `appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. ```json { - project : "", - functions: { + "project" : "", + "functions": { "[Function ID]" : { - name : "My awesome function 💪", - command : "python main.py", - runtime: "python3.9" + "name" : "My awesome function 💪", + "path" : "./FunctionOne", + "command" : "python main.py", + "runtime": "python3.9", + // This section is useful when we allow cloud functions to be tested locally + "environment_variables" :{ + "KEY 1" : "VALUE 1", + } }, }, - hosting: {} + "hosting": {} } - ``` -### The Appwrite deploy command +### 🟢 The `appwrite deploy` command ```sh appwrite deploy function @@ -159,45 +187,23 @@ appwrite deploy site --all We will introduce an `appwrite generate` command that does the following * Generate a function / static site template. -* Make an entry in the `appwrite.json` file . Throw an error if the file doesn't exist. +* Make an entry in the `appwrite.json` file. Throw an error if the file doesn't exist. Here are some example usages - ```sh appwrite generate function --name="FunctionOne" --runtime=python-3.9 -# Creates a folder called FunctionOne with a template for a sample python function. -``` - -Under the hood, this command does the following -1. Clones a repository what - - - - - -## Examples ---- - -### ✅️ Login - - - - -### ✅️ Appwrite Init - -```sh -mkdir temp && cd temp - -# Initialize the current directory with an appwrite project -appwrite init +# Creates a folder called FunctionOne with a template for a sample python function. +temp +├── appwrite.json +└── FunctionOne + ├── .appwrite + ├── main.py + └── requirements.txt -# Two scenarios -# 1. Associate current directory with an existing project -# 2. Create a new Appwrite project along with the initialization. -``` -```sh +appwrite generate function --name="FunctionTwo" --runtime=node-16.0 +# Creates a folder called FunctionTwo with a template for a sample node function. temp ├── appwrite.json ├── FunctionOne @@ -210,9 +216,29 @@ temp └── package.json ``` -### Generate function +Under the hood, this command does the following +1. Clones a publicly hosted git repository and copy's a particular folder into your working directory. This will allow us to fix / modify templates without creating a new CLI release 👍 +2. Makes an entry in `appwrite.json` +```json +{ + "project" : "", + "functions": { + // Other functions ... + "[Function ID]" : { + "name" : "My awesome function 💪", + "path" : "./FunctionOne", + "runtime": "python-3.9", + "environment_variables" :{ + "KEY 1" : "VALUE 1", + } + }, + + }, + "hosting": {} +} +``` ### Prior art @@ -239,6 +265,8 @@ whether they are brand new or if it is an adaptation from other software. Write your answer below. --> +This RFC is inspired by the Firebase CLI. + ### Unresolved questions [unresolved-questions]: #unresolved-questions From dc4eb9d3d827f3ceb4a9e4909e7007ce6a936178 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 17:31:13 +0530 Subject: [PATCH 03/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 8a6a4bf..9c2c20d 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -10,6 +10,7 @@ [summary]: #summary + ## Problem Statement (Step 1) [problem-statement]: #problem-statement @@ -62,8 +63,6 @@ This refactor of the CLI will revolve around the following areas Until now, the CLI was based off of our Server Side Swagger Spec. While this was a good start, it limits our functionality to a Server SDK. Ideally we want the CLI to be an alternative to the Console SDK ( aka the Appwrite Dashboard ). Here are some changes that we will need to make to adhere to the server spec. -1. Authentication - After the implementation of this RFC, the CLI will behave more like the Appwrite Console rather than a Server SDK. This accounts for a new form of Authentication that is similar to the way we handle logins in the Appwrite console. We use a cookie. We will introduce a new command `appwrite login` that will work in one of either ways. @@ -78,20 +77,22 @@ We will introduce a new command `appwrite login` that will work in one of either Password: ``` + In CI environments, the authentication will continue to take place using the API key on a per project basis until we develop a new token / key based mechanism for console authentication. + * Second method relies on a browser based auth. -```sh -$ appwrite login + ```sh + $ appwrite login -# Browser based authentication continues. After a successful login, the returned token and user ID are stored in a hidden preferences file. -``` + # Browser based authentication continues. After a successful login, the returned token and user ID are stored in a hidden preferences file. + ``` -1. The command first finds an available local port. -2. Construct a redirect URL using the available port `https://localhost:1234` -3. Spin up a local http server listening to on the available port ( 1234 in this case ) -4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/login?callback=https://localhost:1234` with the redirect URL as one of the query parameters. + 1. The command first finds an available local port. + 2. Construct a redirect URL using the available port `https://localhost:1234` + 3. Spin up a local http server listening to on the available port ( 1234 in this case ) + 4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/login?callback=https://localhost:1234` with the redirect URL as one of the query parameters. -![CLI Auth](cli_auth.png) + ![CLI Auth](cli_auth.png) ## Easier Deployment of cloud functions @@ -107,7 +108,7 @@ The refactored command will look like this appwrite functions createTag --functionId=[ID] --command=[COMMAND] ``` -This issue will also need to be tackled as we implement this. +This corresponding appwrite issue will also need to be tackled as we implement this. https://github.com/appwrite/appwrite/issues/1316 ### 🟢 The `appwrite.json` File @@ -217,6 +218,7 @@ temp ``` Under the hood, this command does the following + 1. Clones a publicly hosted git repository and copy's a particular folder into your working directory. This will allow us to fix / modify templates without creating a new CLI release 👍 2. Makes an entry in `appwrite.json` @@ -227,7 +229,7 @@ Under the hood, this command does the following "functions": { // Other functions ... "[Function ID]" : { - "name" : "My awesome function 💪", + "name" : "FunctionOne", "path" : "./FunctionOne", "runtime": "python-3.9", "environment_variables" :{ @@ -274,6 +276,7 @@ This RFC is inspired by the Firebase CLI. +1. Which authentication mechanism do we use ? ### Future possibilities @@ -284,4 +287,4 @@ This RFC is inspired by the Firebase CLI. Along with this refactor, there are a couple of additional improvements that can be made if time permits. * Rewrite the current `Parser.php` class -* \ No newline at end of file +* A command to test functions locally. `appwrite test functions` \ No newline at end of file From 03d0637e96e296db4d814be68a8160f66040f142 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 18:28:10 +0530 Subject: [PATCH 04/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 54 ++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 9c2c20d..87e7ac1 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -113,29 +113,17 @@ https://github.com/appwrite/appwrite/issues/1316 ### 🟢 The `appwrite.json` File -The next improvement is going to be along the lines of an `appwrite.json` file. - -Running `appwrite init` in the current directory will initialize the current directory with attributes necessary to communicate with a particular project. +The next improvement is going to be along the lines of an `appwrite.json` file. Running `appwrite init` in the current directory will create an `appwrite.json` file and initialize the current directory with attributes necessary to communicate with a particular project. Consider this example ```sh mkdir temp && cd temp -# Initialize the current directory with an appwrite project +# Initialize the current directory with an Appwrite project appwrite init -``` -```sh temp -├── appwrite.json -├── FunctionOne -│   ├── .appwrite -│   ├── main.py -│   └── requirements.txt -└── FunctionTwo - ├── index.js - ├── node_modules - └── package.json +└── appwrite.json ``` An `appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. @@ -160,13 +148,42 @@ An `appwrite.json` file will be associated with one project only whose ID will b } ``` +There are two scenarios here +* A developer would like to link the directory to an existing project + +```sh +appwrite init + +Choose a project to link this directory to +⭕️ Project 1 +✅️ Project 2 +⭕️ Project 3 +``` + + +* A developer would like to create a new project while initializing this directory + +```sh +appwrite init --new + +Give your project a name: +Project X + +Creating Project X... + +Project X Created 👍 +``` + +> We need to first add support to utopia-php/CLI to allow for single select and multi select commands to enable this feature. + + ### 🟢 The `appwrite deploy` command ```sh appwrite deploy function -[x] FunctionOne -[x] FunctionTwo -[] FunctionThree +✅️ FunctionOne +✅️ FunctionTwo +⭕️ FunctionThree # Create a function on the server using createFunction endpoint # Create a new tag for this function using createTag endpoint @@ -276,7 +293,6 @@ This RFC is inspired by the Firebase CLI. -1. Which authentication mechanism do we use ? ### Future possibilities From e669b6380635538573ff1059111f366fb958ec49 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 18:52:53 +0530 Subject: [PATCH 05/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 51 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 87e7ac1..8935e18 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -9,13 +9,14 @@ [summary]: #summary - +Improve the Appwrite CLI, adding support for console SDK features, and an improved experience with cloud functions. ## Problem Statement (Step 1) [problem-statement]: #problem-statement **What problem are you trying to solve?** + 1. We cannot create and manage projects from the CLI 2. Deploying functions is not very easy using the CLI 3. Developers find it hard to create and test cloud functions locally. @@ -23,9 +24,12 @@ **What is the context or background in which this problem exists?** +The CLI functionality is limited to a Server SDK which prevents us from creating and managing projects. There is also difficulty associated with the creation, packaging and deployment of functions. + **Once the proposal is implemented, how will the system change?** -The CLI will behave more like the console SDK and provide options to create delete and manage all your projects without leaving the CLI. + +The CLI will behave more like the console SDK and provide options to create delete and manage all your projects without leaving the CLI. The CLI will also make it easier to create, test and deploy cloud functions. ## Design proposal (Step 2) @@ -51,7 +55,6 @@ Write your answer below. --> - This refactor of the CLI will revolve around the following areas 1. Migration of the CLI from a Server Side SDK to a Console SDK 2. Easier deployment of Cloud Functions @@ -111,9 +114,9 @@ appwrite functions createTag --functionId=[ID] --command=[COMMAND] This corresponding appwrite issue will also need to be tackled as we implement this. https://github.com/appwrite/appwrite/issues/1316 -### 🟢 The `appwrite.json` File +### 🟢 The `.appwrite.json` File -The next improvement is going to be along the lines of an `appwrite.json` file. Running `appwrite init` in the current directory will create an `appwrite.json` file and initialize the current directory with attributes necessary to communicate with a particular project. +The next improvement is going to be along the lines of a `.appwrite.json` file. Running `appwrite init` in the current directory will create a `.appwrite.json` file and initialize the current directory with attributes necessary to communicate with a particular project. Consider this example ```sh @@ -123,10 +126,10 @@ mkdir temp && cd temp appwrite init temp -└── appwrite.json +└── .appwrite.json ``` -An `appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. +A `.appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. ```json { @@ -179,18 +182,22 @@ Project X Created 👍 ### 🟢 The `appwrite deploy` command +The `appwrite deploy` command is a convenient wrapper around three main commands +* Create Function +* Create Tag +* Update Tag + ```sh -appwrite deploy function +# Usage 1 +appwrite deploy functions +Which functions would you like to deploy? ✅️ FunctionOne ✅️ FunctionTwo ⭕️ FunctionThree -# Create a function on the server using createFunction endpoint -# Create a new tag for this function using createTag endpoint -# Update the tag to activate it using updateTag endpoint - -appwrite deploy function --all -# Deploys all the functions specified in appwrite.json +# Usage 2 +appwrite deploy functions --all +# Deploys all the functions specified in .appwrite.json # Future improvements @@ -198,32 +205,31 @@ appwrite deploy site appwrite deploy site --all ``` - - ## Easier creation of cloud functions --- We will introduce an `appwrite generate` command that does the following * Generate a function / static site template. -* Make an entry in the `appwrite.json` file. Throw an error if the file doesn't exist. +* Make an entry in the `.appwrite.json` file. Throw an error if the file doesn't exist. Here are some example usages ```sh +# Usage 1 appwrite generate function --name="FunctionOne" --runtime=python-3.9 # Creates a folder called FunctionOne with a template for a sample python function. temp -├── appwrite.json +├── .appwrite.json └── FunctionOne ├── .appwrite ├── main.py └── requirements.txt - +# Usage 2 appwrite generate function --name="FunctionTwo" --runtime=node-16.0 # Creates a folder called FunctionTwo with a template for a sample node function. temp -├── appwrite.json +├── .appwrite.json ├── FunctionOne │   ├── .appwrite │   ├── main.py @@ -238,7 +244,7 @@ Under the hood, this command does the following 1. Clones a publicly hosted git repository and copy's a particular folder into your working directory. This will allow us to fix / modify templates without creating a new CLI release 👍 -2. Makes an entry in `appwrite.json` +2. Makes an entry in `.appwrite.json` ```json { @@ -303,4 +309,5 @@ This RFC is inspired by the Firebase CLI. Along with this refactor, there are a couple of additional improvements that can be made if time permits. * Rewrite the current `Parser.php` class -* A command to test functions locally. `appwrite test functions` \ No newline at end of file +* A command to test functions locally. `appwrite test functions`. This command will leverage the environment variables declared in `.appwrite.json` to run the function locally and allow easy testing. +* Allow appwrite installation, upgrade and migration from the CLI. \ No newline at end of file From ade052f9ed4c038f1d38d80ccadb519f2bdc8702 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 18:57:15 +0530 Subject: [PATCH 06/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 45 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 8935e18..6e10dfd 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -134,19 +134,18 @@ A `.appwrite.json` file will be associated with one project only whose ID will b ```json { "project" : "", - "functions": { - "[Function ID]" : { - "name" : "My awesome function 💪", - "path" : "./FunctionOne", - "command" : "python main.py", - "runtime": "python3.9", - // This section is useful when we allow cloud functions to be tested locally - "environment_variables" :{ - "KEY 1" : "VALUE 1", - } + "functions": [ + { + "name" : "My awesome function 💪", + "path" : "./FunctionOne", + "command" : "python main.py", + "runtime": "python3.9", + // This section is useful when we allow cloud functions to be tested locally + "environment_variables" :{ + "KEY 1" : "VALUE 1", + } }, - - }, + ], "hosting": {} } ``` @@ -163,7 +162,6 @@ Choose a project to link this directory to ⭕️ Project 3 ``` - * A developer would like to create a new project while initializing this directory ```sh @@ -199,8 +197,7 @@ Which functions would you like to deploy? appwrite deploy functions --all # Deploys all the functions specified in .appwrite.json - -# Future improvements +# Future support for static hosting appwrite deploy site appwrite deploy site --all ``` @@ -249,18 +246,14 @@ Under the hood, this command does the following ```json { "project" : "", - "functions": { - // Other functions ... - "[Function ID]" : { - "name" : "FunctionOne", - "path" : "./FunctionOne", - "runtime": "python-3.9", - "environment_variables" :{ - "KEY 1" : "VALUE 1", - } + "functions": [ + { + "name" : "My awesome function 💪", + "path" : "./FunctionOne", + "command" : "python main.py", + "runtime": "python3.9" }, - - }, + ], "hosting": {} } ``` From 8d465e3715233b649ebcb0b60e7c647e6d97f465 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 19:04:48 +0530 Subject: [PATCH 07/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 6e10dfd..9ae8321 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -97,6 +97,8 @@ We will introduce a new command `appwrite login` that will work in one of either ![CLI Auth](cli_auth.png) + This approach may seem unnecessarily complex now since we only allow email password based logins in the console. But as we move towards supporting OAuth logins in the console, this is the approach that needs to be followed. [Firebase CLI](https://github.com/firebase/firebase-tools/blob/0b0459bfde3fabf41223bb6d5d39a5cf325f1010/src/auth.ts#L476) for reference. + ## Easier Deployment of cloud functions --- From 313a8485540e444b651700c54fc0e9984be7fefe Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 14 Jul 2021 19:06:13 +0530 Subject: [PATCH 08/11] feat(cli-2.0): added some more content --- 018-cli-2.0/018-cli-2.0.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 9ae8321..def49f7 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -82,6 +82,10 @@ We will introduce a new command `appwrite login` that will work in one of either In CI environments, the authentication will continue to take place using the API key on a per project basis until we develop a new token / key based mechanism for console authentication. + ```sh + appwrite client --setKey="" --setEndpoint="" ... + ``` + * Second method relies on a browser based auth. ```sh From 45a920a40c1e6d33719a9effa38d13bbeeb23631 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Mon, 19 Jul 2021 17:24:18 +0530 Subject: [PATCH 09/11] Apply suggestions from code review Co-authored-by: Eldad A. Fux --- 018-cli-2.0/018-cli-2.0.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index def49f7..bfd2c31 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -147,12 +147,12 @@ A `.appwrite.json` file will be associated with one project only whose ID will b "command" : "python main.py", "runtime": "python3.9", // This section is useful when we allow cloud functions to be tested locally - "environment_variables" :{ + "vars" :{ "KEY 1" : "VALUE 1", } }, ], - "hosting": {} + "hosting": [] } ``` @@ -260,7 +260,7 @@ Under the hood, this command does the following "runtime": "python3.9" }, ], - "hosting": {} + "hosting": [] } ``` @@ -309,4 +309,4 @@ Along with this refactor, there are a couple of additional improvements that can * Rewrite the current `Parser.php` class * A command to test functions locally. `appwrite test functions`. This command will leverage the environment variables declared in `.appwrite.json` to run the function locally and allow easy testing. -* Allow appwrite installation, upgrade and migration from the CLI. \ No newline at end of file +* Allow appwrite installation, upgrade and migration from the CLI. From 9120514d7dc0b896080633a3bf4a8977f9a31f86 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 21 Jul 2021 23:33:17 +0530 Subject: [PATCH 10/11] feat(cli-2.0): added planned classes --- 018-cli-2.0/018-cli-2.0.md | 107 +++++++++++++++++++++++++++++----- 018-cli-2.0/cli_auth.png | Bin 52804 -> 0 bytes 018-cli-2.0/cli_auth_flow.png | Bin 0 -> 53459 bytes 3 files changed, 94 insertions(+), 13 deletions(-) delete mode 100644 018-cli-2.0/cli_auth.png create mode 100644 018-cli-2.0/cli_auth_flow.png diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index bfd2c31..1afb70f 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -1,4 +1,4 @@ -# Title +# CLI 2.0 - Implementation Owner: @christyjacob4 - Start Date: 12-07-2021 @@ -97,12 +97,18 @@ We will introduce a new command `appwrite login` that will work in one of either 1. The command first finds an available local port. 2. Construct a redirect URL using the available port `https://localhost:1234` 3. Spin up a local http server listening to on the available port ( 1234 in this case ) - 4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/login?callback=https://localhost:1234` with the redirect URL as one of the query parameters. + 4. Opens the browser with a request to either the local appwrite server or appwrite cloud `/authorize/cli?callback=https://localhost:1234` with the redirect URL as one of the query parameters. - ![CLI Auth](cli_auth.png) + ![CLI Auth](cli_auth_flow.png) This approach may seem unnecessarily complex now since we only allow email password based logins in the console. But as we move towards supporting OAuth logins in the console, this is the approach that needs to be followed. [Firebase CLI](https://github.com/firebase/firebase-tools/blob/0b0459bfde3fabf41223bb6d5d39a5cf325f1010/src/auth.ts#L476) for reference. + This method of authentication will require some changes in the Console. + + * **Custom redirect after login** - if the user is not logged into the console, they should be redirect to the sign in page, and after the sign in, should be brought back to `/authorize/cli?callback=https://localhost:1234`. + + * We should also add protection against [open-redirect attack](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html). + ## Easier Deployment of cloud functions --- @@ -120,9 +126,9 @@ appwrite functions createTag --functionId=[ID] --command=[COMMAND] This corresponding appwrite issue will also need to be tackled as we implement this. https://github.com/appwrite/appwrite/issues/1316 -### 🟢 The `.appwrite.json` File +### 🟢 The `appwrite.json` File -The next improvement is going to be along the lines of a `.appwrite.json` file. Running `appwrite init` in the current directory will create a `.appwrite.json` file and initialize the current directory with attributes necessary to communicate with a particular project. +The next improvement is going to be along the lines of a `appwrite.json` file. Running `appwrite init` in the current directory will create a `appwrite.json` file and initialize the current directory with attributes necessary to communicate with a particular project. Consider this example ```sh @@ -132,10 +138,10 @@ mkdir temp && cd temp appwrite init temp -└── .appwrite.json +└── appwrite.json ``` -A `.appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. +A `appwrite.json` file will be associated with one project only whose ID will be visible in the `project` attribute. ```json { @@ -201,7 +207,7 @@ Which functions would you like to deploy? # Usage 2 appwrite deploy functions --all -# Deploys all the functions specified in .appwrite.json +# Deploys all the functions specified in appwrite.json # Future support for static hosting appwrite deploy site @@ -213,7 +219,7 @@ appwrite deploy site --all We will introduce an `appwrite generate` command that does the following * Generate a function / static site template. -* Make an entry in the `.appwrite.json` file. Throw an error if the file doesn't exist. +* Make an entry in the `appwrite.json` file. Throw an error if the file doesn't exist. Here are some example usages ```sh @@ -221,7 +227,7 @@ Here are some example usages appwrite generate function --name="FunctionOne" --runtime=python-3.9 # Creates a folder called FunctionOne with a template for a sample python function. temp -├── .appwrite.json +├── appwrite.json └── FunctionOne ├── .appwrite ├── main.py @@ -232,7 +238,7 @@ temp appwrite generate function --name="FunctionTwo" --runtime=node-16.0 # Creates a folder called FunctionTwo with a template for a sample node function. temp -├── .appwrite.json +├── appwrite.json ├── FunctionOne │   ├── .appwrite │   ├── main.py @@ -247,7 +253,7 @@ Under the hood, this command does the following 1. Clones a publicly hosted git repository and copy's a particular folder into your working directory. This will allow us to fix / modify templates without creating a new CLI release 👍 -2. Makes an entry in `.appwrite.json` +2. Makes an entry in `appwrite.json` ```json { @@ -264,6 +270,81 @@ Under the hood, this command does the following } ``` +## Project Structure +--- + + +### Reader.php +```php +abstract class Reader { + + protected string $path; + + protected array $data; + + function read(): bool {} + + function write(): bool {} + + function getPath():string {} + + function setPath(string $path): void {} + + function getProperty(string $key, mixed $default = null): mixed {} + + function setProperty(string $key, mixed $value): void {} +} +``` + +### Preference.php + +```php +// This class models the hidden preferences.json file +class Preference extends Reader { + + function getKey(): string {} + + function setKey(string $key): void {} + + function getEndpoint(): string {} + + function setEndpoint(string $endpoint): void {} + + function getCookie(): string {} + + function setCookie(string $cookie): void {} + + function getLocale(): string {} + + function setLocale(string $locale): void {} + + function isLoaded(): bool {} +} + +``` + +### Config.php + + +```php +// This class models the appwrite.json file. +class Config extends Reader { + + function getFunction(string $name): array {} + + function getFunctions(): array {} + + function setFunction(array $function): void {} + + function getProject(): string {} + + function setProject(string $id): void {} + +} +``` + + + ### Prior art [prior-art]: #prior-art @@ -308,5 +389,5 @@ This RFC is inspired by the Firebase CLI. Along with this refactor, there are a couple of additional improvements that can be made if time permits. * Rewrite the current `Parser.php` class -* A command to test functions locally. `appwrite test functions`. This command will leverage the environment variables declared in `.appwrite.json` to run the function locally and allow easy testing. +* A command to test functions locally. `appwrite test functions`. This command will leverage the environment variables declared in `appwrite.json` to run the function locally and allow easy testing. * Allow appwrite installation, upgrade and migration from the CLI. diff --git a/018-cli-2.0/cli_auth.png b/018-cli-2.0/cli_auth.png deleted file mode 100644 index f0c3574e4aef47de1fa23c15a291d5d674aaac2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52804 zcmeEuc{r4B_-~}5QnpBB8Cw#@SjO0mF$QBByHI1sSZ4-fU$bRoCn2OH?TeHpTS*}k zk(9k6QplF<&NJV>+wYw3zvqv0UFW)H%*;FQyzlee&;8uX=lLp>TO66&od}l(N2x8u$Z+Dk!O`IsHB#@8M4Q z^Fpc$P;h}`4oXT=%1H1I>qQ9)1+Ss%YNymxWWhUqKR;i0dv`ZeuRtjnT2&dYpsdFH zi7Cd$3@ZgQ0PlUheB8l{kvqYM%KQm203V{@MFpoTsVJx^C@F(u2A%;_GB^vZj!=Lq zs3?OMC73$+;-9IYm0;j2I5=jFC*cFU{&hR%EZqa~9=~U38Dbd%Jr$0m;8jdR{QZ$( zJ~o8kGYfVPpm_nY{2`>jZ_fO6V3?o#@54m*U@rm~2~0}a5J;Ekh4%=+lffxoe+m%i z@9qI766|27upw4{$~cD*n(yz+Q}AF4e_Y!V$WUJC_eJ1#6gRg(nu?(%6t7Q&Vvulu zM?!EYH55u#hGB4S=K5rqJ09n2?`iDirQ~nw9Rz*|gpGE<8hSx(OuRjnDJou}R#YQz zV`Cd1FH{JEf+G7+g3w+x%W!jo2^yU1=WS$d0au6H+jt{GN#@{4xC8UJx;`P$$ew2G z;cJX{^s}+F^S5y$_<@B%8k+?Km*rKW`p!58rdn6 z5te4)DrA48Bf>aT+0aTwO(_5zu(l_t`w*SNNlGX;@G%VMN3rk-22w+!tpdHmLg4

I+A<0k8 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

DEh(UhA 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

W+ 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 Date: Fri, 30 Jul 2021 01:08:14 +0530 Subject: [PATCH 11/11] feat(cli-2.0): review comments --- 018-cli-2.0/018-cli-2.0.md | 60 +++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/018-cli-2.0/018-cli-2.0.md b/018-cli-2.0/018-cli-2.0.md index 1afb70f..8b65638 100644 --- a/018-cli-2.0/018-cli-2.0.md +++ b/018-cli-2.0/018-cli-2.0.md @@ -168,16 +168,24 @@ There are two scenarios here ```sh appwrite init +How would you like to start? +⭕️ Create a new project +✅️ Link to an existing project + Choose a project to link this directory to -⭕️ Project 1 -✅️ Project 2 -⭕️ Project 3 +⭕️ Project 1 (nowfoms) +✅️ Project 2 (dfsdda) +⭕️ Project 3 (wedfdd) ``` * A developer would like to create a new project while initializing this directory ```sh -appwrite init --new +appwrite init + +How would you like to start? +✅️ Create a new project +⭕️ Link to an existing project Give your project a name: Project X @@ -187,6 +195,14 @@ Creating Project X... Project X Created 👍 ``` +Once you choose the project, appwrite.json is initialized with the newly created project's ID? + +```json +{ + "projectId" : "xyz" +} +``` + > We need to first add support to utopia-php/CLI to allow for single select and multi select commands to enable this feature. @@ -195,16 +211,23 @@ Project X Created 👍 The `appwrite deploy` command is a convenient wrapper around three main commands * Create Function * Create Tag -* Update Tag +* Update Tag to activate it ```sh # Usage 1 -appwrite deploy functions +appwrite deploy functions --confirm + Which functions would you like to deploy? ✅️ FunctionOne ✅️ FunctionTwo ⭕️ FunctionThree +Deploying FunctionOne.. +FunctionOne already exists +Updating FunctionOne with new tag +Do you want to activate FunctionOne? [Yes/No] + + # Usage 2 appwrite deploy functions --all # Deploys all the functions specified in appwrite.json @@ -214,17 +237,18 @@ appwrite deploy site appwrite deploy site --all ``` + ## Easier creation of cloud functions --- -We will introduce an `appwrite generate` command that does the following +We will introduce an `appwrite init function` command that does the following * Generate a function / static site template. * Make an entry in the `appwrite.json` file. Throw an error if the file doesn't exist. Here are some example usages ```sh # Usage 1 -appwrite generate function --name="FunctionOne" --runtime=python-3.9 +appwrite init function --functionId="abc" --name="FunctionOne" --runtime=python-3.9 # Creates a folder called FunctionOne with a template for a sample python function. temp ├── appwrite.json @@ -235,7 +259,7 @@ temp # Usage 2 -appwrite generate function --name="FunctionTwo" --runtime=node-16.0 +appwrite init function --functionId="xyz" --name="FunctionTwo" --runtime=node-16.0 # Creates a folder called FunctionTwo with a template for a sample node function. temp ├── appwrite.json @@ -247,6 +271,21 @@ temp ├── index.js ├── node_modules └── package.json + + +# Usage 3 +appwrite init function + +Give your function an ID +function_three + +Give your function a name: +FunctionThree + +Select a runtime: +python-3.9 + +Initializing function X .. ``` Under the hood, this command does the following @@ -257,7 +296,7 @@ Under the hood, this command does the following ```json { - "project" : "", + "project" : "xyz", "functions": [ { "name" : "My awesome function 💪", @@ -269,7 +308,6 @@ Under the hood, this command does the following "hosting": [] } ``` - ## Project Structure ---