From 4c50b984adc597f72f12e5b0b390f20a745a4249 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Tue, 5 May 2020 20:36:17 +0200 Subject: [PATCH] [docs] dev: add repository architecture explanation --- doc/dev/architecture-french.md | 48 ++++++++++++++++++++++++++++++++++ doc/dev/architecture.md | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 doc/dev/architecture-french.md create mode 100644 doc/dev/architecture.md diff --git a/doc/dev/architecture-french.md b/doc/dev/architecture-french.md new file mode 100644 index 000000000..8a848ee32 --- /dev/null +++ b/doc/dev/architecture-french.md @@ -0,0 +1,48 @@ +# Duniter architecture + +Title: Duniter architecture +Order: 1 +Date: 2020-05-04 +Slug: architecture_fench +Authors: elois + +## Deux langages : Rust & Typescript + +Historiquement, Duniter était en pur javascript et propulsé par [NodeJs] (avec quelques addons en C/C++). + +Entre temps, Duniter a été entièrement réécris en [Typescript]. +Le [Typescript] est un langage de typage qui est ensuite "transpilé" en javascript. +Au runtime, c'est toujours du code javascript qui est interprété par [NodeJs], le code [Typescript] "disparait" à la compilation. + +Duniter est actuellement en cours de migration du [Typescript] vers le [Rust]. +Cette migration se fait progressivement via un binding [NodeJs]<->[Rust] assuré par [Neon]. +le fait de migrer du code en [Rust] est communément nommée "oxydation", on parle donc de "l'oxydation de Duniter". + +L'objectif à terme est d'oxyder entièrement Duniter, mais c'est un long processus qui va s'étaler sur plusieurs années. + +## Deux variantes: server & desktop + +La variante "server" est en ligne de commande et la variante "desktop" possède une interface graphique dans une fenêtre. +La variante "server" porte mal son nom car les deux variantes embarquent un serveur Duniter. + +## Architecture du dépôt + +Dossiers : + +- `app/`: Code source Typescript. +- `bin/`: Point d'entrée de l'application. Actuellement c'est un script js, si l'oxydation deviens totale ce sera remplacé par une crate binaire. +- `doc/`: Documentation (en markdown). +- `gui/`: Page d'acceuil et icone pour la variante desktop. +- `images/`: Logo de Duniter dans differentes tailles et différents formats. +- `neon/`: Code pour le binding NodeJs<->Rust +- `release/`: Scripts de build des livrables et resources pour les livrables (systemd, completion bash, etc) +- `rust-libs/`: Code source Rust +- `test/`: Tests automatisés du code javascript + +Si l'oxydation de duniter se fait jusqu'au bout, les dossiers `app/`, `neon/` et `test/` disparaitrons. +Les tests d'intégration de chaque crate rust se trouvent dans le sous-dossier tests du dossier de la crate. + +[Neon]: https://neon-bindings.com/ +[NodeJs]: https://nodejs.org/en/ +[Rust]: https://www.rust-lang.org/ +[Typescript]: https://www.typescriptlang.org/ diff --git a/doc/dev/architecture.md b/doc/dev/architecture.md new file mode 100644 index 000000000..384dcd9f9 --- /dev/null +++ b/doc/dev/architecture.md @@ -0,0 +1,48 @@ +# Duniter architecture + +Title: Duniter architecture +Order: 1 +Date: 2020-05-04 +Slug: architecture +Authors: elois + +## Two languages : Rust & Typescript + +Historically, Duniter was pure javascript and powered by [NodeJs] (with some C/C++ addons). + +In the meantime, Duniter has been entirely rewritten in [Typescript]. +Typescript] is a typing language which is then "transpiled" into javascript. +At runtime, it is always javascript code that is interpreted by [NodeJs], the [Typescript] code "disappears" at compile time. + +Duniter is currently migrating from [Typescript] to [Rust]. +This migration is being done gradually via a [NodeJs]<->[Rust] binding provided by [Neon]. +The fact of migrating from code to [Rust] is commonly called "oxidation", so we speak of "Duniter's oxidation". + +The long-term goal is to oxidize Duniter entirely, but it is a long process that will take several years. + +## Two variants: server & desktop + +The "server" variant is command line based and the "desktop" variant has a graphical interface in a window. +The "server" variant has a bad name because both variants include a Duniter server. + +## Repository architecture + +Folders: + +- `app/`: Typescript source code. +- `bin/`: Entry point of the application. Currently it's a js script, in the future it will be replaced by a binary crate. +- `doc/`: Documentation (in markdown). +- `gui/`: Home page and icon for the desktop variant. +- `images/`: Duniter logo in different sizes and formats +- `neon/`: Code for binding NodeJs<->Rust +- `release/`: Build scripts of the deliverables and resources for it +- `rust-libs/`: Rust source code +- `test/`: Automated testing of javascript code + +If duniter oxidation is completed, the `app/`, `neon/` and `test/` folders will disappear. +The integration tests for each rust crate can be found in the tests subfolder of the crate folder. + +[Neon]: https://neon-bindings.com/ +[NodeJs]: https://nodejs.org/en/ +[Rust]: https://www.rust-lang.org/ +[Typescript]: https://www.typescriptlang.org/ -- GitLab