From f1ae7405aa65742aa64f6aced4e96960b81223d5 Mon Sep 17 00:00:00 2001
From: Hugo Trentesaux <hugo@trentesaux.fr>
Date: Wed, 21 Sep 2022 11:42:14 +0200
Subject: [PATCH] add beginner walkthrough documentation

---
 README.md                        |  3 ++
 docs/dev/beginner-walkthrough.md | 83 ++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+)
 create mode 100644 docs/dev/beginner-walkthrough.md

diff --git a/README.md b/README.md
index fb065664c..dad66715d 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@
     - [manual](./docs/api/manual.md)
     - [runtime-calls](./docs/api/runtime-calls.md) the calls you can submit through the RPC API
   - [dev](./docs/dev/)
+    - [beginner-walkthrough](./docs/dev/beginner-walkthrough.md)
     - [git-conventions](./docs/dev/git-conventions.md)
     - [launch-a-live-network](./docs/dev/launch-a-live-network.md)
     - [setup](./docs/dev/setup.md)
@@ -102,6 +103,8 @@ docker run -it -p9944:9944 --name duniter-v2s \
 
 ## Contribute
 
+If you are beginner in Rust and need a well guided tutorial, follow the [beginner walkthrough](./docs/dev/beginner-walkthrough.md) 
+
 Before any contribution, please read carefully the [CONTRIBUTING](./CONTRIBUTING.md) file and our [git conventions](./docs/dev/git-conventions.md).
 
 ### Setup your dev environment
diff --git a/docs/dev/beginner-walkthrough.md b/docs/dev/beginner-walkthrough.md
new file mode 100644
index 000000000..9dc2a944c
--- /dev/null
+++ b/docs/dev/beginner-walkthrough.md
@@ -0,0 +1,83 @@
+# Beginner walkthrough
+
+This is a beginner tutorial for those who do not have a previous experience with Rust ecosystem or need guidance to get familiar with Duniter v2s project. You'll need a development machine with an internet connexion, at least 20 Go of free storage, and an hour or two depending on your computing power.
+
+This walkthrough is based on the following video (french), don't hesitate to make an english voicecover if you feel so.
+
+[![preview](https://tube.p2p.legal/lazy-static/previews/654006dc-66c0-4e37-a32f-b7b5a1c13213.jpg)](https://tube.p2p.legal/w/n4TXxQ4SqxzpHPY4TNMXFu)
+
+> video walkthrough on peertube https://tube.p2p.legal/w/n4TXxQ4SqxzpHPY4TNMXFu
+
+## Requirements
+
+If you are a debian based system, you can install the system requirements with:
+
+```bash
+sudo apt install cmake pkg-config libssl-dev git build-essential clang libclang-dev curl
+```
+
+Else, look at the corresponding section in the [system setup documentation](./setup.md).
+
+Rust recommended installation method is through the rustup script that you can run with:
+
+```bash
+curl https://sh.rustup.rs -sSf | sh
+```
+
+If you reopen your terminal, it will give you access to the `rustup`,  `rustc` and `cargo` commands. You can then install the required Rust toolchains with:
+
+```bash
+rustup default stable
+rustup update nightly
+rustup update stable
+rustup target add wasm32-unknown-unknown --toolchain nightly
+```
+
+This can take about one or two minutes.
+
+## Build project
+
+After cloning wherever you want the `duniter-v2s` repo with:
+
+```bash
+git clone https://git.duniter.org/nodes/rust/duniter-v2s.git
+```
+
+you can go to the root folder and build the substrate client with:
+
+```bash
+cargo build
+```
+
+This will take about 2 minutes to download dependencies and 12 minutes to build in debug mode. At this point, you only built the substrate client, a kind of "shell" in which lies the runtime. You can build the runtime and run a local blockchain with:
+
+```bash
+cargo run -- --dev --tmp
+```
+
+Which should take about 1 minute. When you see the logs, the blockchain is running and you can connect to it with polkadotjs app: [https://polkadot.js.org/apps/?rpc=ws://127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944). You should see blocks being added every 6 seconds. You can use Alice, Bob, etc test accounts to submit extrinsics.
+
+## Autocompletion
+
+When using Duniter commands, you will benefit a lot from commands autocompletion. This can be achieved by following [autocompletion documentation](../user/autocompletion.md) for you shell. If you use bash the commands are:
+
+```bash
+# create local dir to store completion script
+mkdir -p ~/.local/share/duniter
+# build in release mode and export the bash completion file
+cargo run --release -- completion --generator bash > ~/.local/share/duniter/completion.bash
+# add the following line to your ~/.bashrc to automatically load completion on startup
+[[ -f $HOME/.local/share/duniter/completion.bash ]] && source $HOME/.local/share/duniter/completion.bash
+```
+
+Building in release mode for the first time is very long and can take up to 20 minutes. You will then benefit from completion using `<Tab>` key and `*`.
+
+## End to end tests using cucumber
+
+Cucumber end2end tests are a good way to dive in Duniter's business procedure. They work by spawning a local blockchain and submitting extrinsics to it. You can build and run the cucumber tests by running:
+
+```bash
+cargo cucumber
+```
+
+which should take about 4 minutes to build and run the tests. A highly detailed documentation about the end2end tests is available [in the dedicated folder](../../end2end-tests/README.md), you will learn how to read and modify the tests.
\ No newline at end of file
-- 
GitLab