feat: add the hot-reload on backend crate

This commit is contained in:
Florian Briand 2024-09-23 18:13:48 +02:00
parent a50d951af7
commit 54870b0d0f
Signed by: florian_briand
GPG Key ID: CC981B9E6B98E70B
5 changed files with 1397 additions and 47 deletions

1394
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -27,7 +27,7 @@ Des exemples de fichiers de configuration sont disponibles à la racine du proje
### Pré-requis ### Pré-requis
### Frontend (Nuxt + Typescript) #### Frontend (Nuxt + Typescript)
Le frontend est propulsé par Nuxt.js, un framework TypeScript pour Vue.js. Pour le développement, il est nécessaire d'installer les dépendances suivantes : Le frontend est propulsé par Nuxt.js, un framework TypeScript pour Vue.js. Pour le développement, il est nécessaire d'installer les dépendances suivantes :
- [Bun](https://bun.sh/docs/installation), un gestionnaire de paquets, équivalent à `npm` en plus performant - [Bun](https://bun.sh/docs/installation), un gestionnaire de paquets, équivalent à `npm` en plus performant
@ -46,6 +46,10 @@ cargo install tauri-cli --version "^2.0.0-rc"
La crate `sesam-vitale` nécessite la présence des librairies dynamiques fournies par le package FSV et la CryptolibCPS. Les instructions d'installation sont disponibles dans le [README](crates/sesam-vitale/README.md) de la crate `sesam-vitale`. La crate `sesam-vitale` nécessite la présence des librairies dynamiques fournies par le package FSV et la CryptolibCPS. Les instructions d'installation sont disponibles dans le [README](crates/sesam-vitale/README.md) de la crate `sesam-vitale`.
#### Backend Hot-reload
Voir le [README](crates/backend/README.md) de la crate `backend` pour les prérequis de développement du serveur backend.
### Lancement ### Lancement
Le logiciel dans sa globalité peut être lancé via la commande suivante : Le logiciel dans sa globalité peut être lancé via la commande suivante :
@ -54,11 +58,9 @@ Le logiciel dans sa globalité peut être lancé via la commande suivante :
cargo tauri dev cargo tauri dev
``` ```
/!\ Attention, le lancement du client `desktop` ne génère pas le fichier `frontend/assets/css/style.css` automatiquement pour le moment. En cas de modification des interfaces web, il est donc nécessaire de procéder à sa génération comme indiqué dans le [README](frontend/README.md) du module `frontend`.
// TODO: Adapter autogénération Tailwind au nouveau Tauri + Nuxt ?
Si vous souhaitez lancer les composants séparément, les indications de lancement sont disponibles dans les README des différents crates. Si vous souhaitez lancer les composants séparément, les indications de lancement sont disponibles dans les README des différents crates.
- [backend](crates/backend/README.md)
- [frontend](frontend/README.md) - [frontend](frontend/README.md)
- [sesam-vitale](crates/sesam-vitale/README.md) - [sesam-vitale](crates/sesam-vitale/README.md)

View File

@ -5,4 +5,9 @@ edition = "2021"
[dependencies] [dependencies]
axum = "0.7.6" axum = "0.7.6"
listenfd = "1.0.1"
tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] } tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] }
[dev-dependencies]
cargo-watch = "8.5.2"
systemfd = "0.4.3"

19
crates/backend/README.md Normal file
View File

@ -0,0 +1,19 @@
# Backend
Ceci est un serveur backend, basé sur axum, et permettant d'offrir une gestion centralisée des accès aux données.
## Prérequis
En développement, le mécanisme de hot-reload nécessite de disposer de `cargo-watch` et `systemfd`. Pour les installer, exécutez la commande suivante :
```bash
cargo install cargo-watch systemfd
```
## Développement
Pour lancer le serveur en mode développement, exécutez la commande suivante :
```bash
systemfd --no-pid -s http::3030 -- cargo watch -x 'run --bin backend'
```

View File

@ -1,9 +1,23 @@
use listenfd::ListenFd;
use tokio::net::TcpListener;
use backend::get_router; use backend::get_router;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
let app = get_router(); let app = get_router();
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
let mut listenfd = ListenFd::from_env();
let listener = match listenfd.take_tcp_listener(0).unwrap() {
// if we are given a tcp listener on listen fd 0, we use that one
Some(listener) => {
listener.set_nonblocking(true).unwrap();
TcpListener::from_std(listener).unwrap()
}
// otherwise fall back to local listening
None => TcpListener::bind("0.0.0.0:8080").await.unwrap(),
};
println!("Listening on {}", listener.local_addr().unwrap()); println!("Listening on {}", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap(); axum::serve(listener, app).await.unwrap();