@@ -15,12 +15,10 @@ lang: en-GB
1515- [ Project Structure] ( #project-structure )
1616- [ Tooling & Dependencies] ( #tooling-dependencies )
1717- [ Building & Running] ( #building-running )
18- - [ Building the PWA] ( #building-the-pwa )
19- - [ Building the Android App] ( #building-the-android-app )
20- - [ Code Conventions & Contributing] ( #code-conventions-contributing )
21- - [ Continuous Integration (CI)] ( #continuous-integration-ci )
22- - [ Continuous Deployment (CD)] ( #continuous-deployment-cd )
23- - [ Weekly Deep Checks] ( #weekly-deep-checks )
18+ - [ Android Native APK] ( #android-native-apk )
19+ - [ Engineering Principles & Contributing] ( #engineering-principles-contributing )
20+ - [ Continuous Integration & Continuous Deployment (CI / CD)] ( #continuous-integration-continuous-deployment-ci-cd )
21+ - [ Weekly Deep Checks] ( #weekly-deep-checks )
2422
2523<!-- toc:end-->
2624
@@ -30,14 +28,15 @@ A simple, efficient and cross-platform workout logging application with
3028[ 800+ exercises] built-in, by [ Guilhem Fauré] .
3129
3230- 💪 Easily log workout sessions with sets, reps, weights, distances, durations
33- - 📊 Analytics panel with line charts to track progress over time
34- - 🏋️ Browse the 870+ included exercises with search functionality
35- - Easily add your custom exercises or customize existing ones
36- - 📱 Mobile-first responsive design, bottom navigation bar, local-first
31+ - 🏋️ Use the 870+ included exercises with images and instructions
32+ - 📝 Easily add your custom exercises or customize existing ones
33+ - 🔍 Easily search them with powerful text search and attribute based filtering
34+ - 📊 Track your progress over time on several metrics and exercises in analytics
35+ - 📱 Responsive design, ergonomic navigation, local-first, performant
3736
3837## Project Structure
3938
40- The project follows a modular Rust structure for a Dioxus application:
39+ The project follows a modular [ Rust] structure for a [ Dioxus] application:
4140
4241``` text
4342LogOut/
@@ -61,16 +60,14 @@ LogOut/
6160
6261## Tooling & Dependencies
6362
64- | Purpose | Library |
65- | -------------------------------------------------------- | ---------- |
66- | Main UI reactive framework | [ Dioxus] |
67- | (De)Serialization, data models and persistence | [ Serde] |
68- | PWA Workouts and custom exercises storage ([ IndexedDB] ) | [ Rexie] |
69- | Native Workouts and custom exercises storage ( [ SQLite] ) | [ Rusqlite] |
70- | Asynchronous HTTP client | [ Reqwest] |
71- | Date and time manipulation (UTC/Local offsets) | [ Time] |
72- | Async runtime for the native application target. | [ Tokio] |
73- | Bindings to browser APIs (Service Worker…) | [ Web-sys] |
63+ | Purpose | Methodology |
64+ | ------------------- | ---------------------- |
65+ | Project versionning | [ SemVer] |
66+ | Commit messages | [ Conventional Commits] |
67+ | Branch naming | [ Conventional Branch] |
68+ | Branching model | [ GitHub Flow] |
69+ | Changes submission | GitHub Pull Requests |
70+ | Issue tracking | GitHub Issues |
7471
7572| Purpose | Tool |
7673| ----------------------------- | -------------------------------------------- |
@@ -89,50 +86,41 @@ LogOut/
8986| Rust debugging | [ lldb] |
9087| Code edition | Allows modern Rust dev ([ Helix] , [ VS Code] …) |
9188
92- | Purpose | Methodology |
93- | ------------------- | ---------------------- |
94- | Project versionning | [ SemVer] |
95- | Commit messages | [ Conventional Commits] |
96- | Branch naming | [ Conventional Branch] |
97- | Branching model | [ GitHub Flow] |
98- | Changes submission | GitHub Pull Requests |
99- | Issue tracking | GitHub Issues |
89+ | Purpose | Library |
90+ | -------------------------------------------------------- | ---------- |
91+ | Main UI reactive framework | [ Dioxus] |
92+ | (De)Serialization, data models and persistence | [ Serde] |
93+ | PWA Workouts and custom exercises storage ([ IndexedDB] ) | [ Rexie] |
94+ | Native Workouts and custom exercises storage ( [ SQLite] ) | [ Rusqlite] |
95+ | Asynchronous HTTP client | [ Reqwest] |
96+ | Date and time manipulation (UTC/Local offsets) | [ Time] |
97+ | Async runtime for the native application target. | [ Tokio] |
98+ | Bindings to browser APIs (Service Worker…) | [ Web-sys] |
10099
101100## Building & Running
102101
103- The project provides a [ Nix] development shell with all required dependencies
104- (Rust, Dioxus CLI, Android SDK…). With Nix installed, enter the shell with
105- ` nix develop ` . Preferably, with Direnv installed, allow the automatic
106- development shell loading with ` direnv allow ` .
107-
108- ### Building the PWA
109-
110- To build for web as a PWA, run
102+ The project uses [ Nix] to download all (proper versions of) required
103+ dependencies, configure the development environment (shell) and build the
104+ application, reproducibly. The [ Nix] environment and tooling is defined in
105+ [ ` flake.nix ` ] ( ./flake.nix ) , enable it with ` nix develop ` or automatically with
106+ an allowed [ ` .envrc ` ] ( ./.envrc ) and [ ` direnv ` ] (recommended):
111107
112- ``` sh
113- dx build --web --release
114- ```
108+ For release builds, we prefer pure reproducible ` nix build ` , but for development
109+ speed, it is recommended to use the hot-reloading ` dx serve ` .
115110
116- Output is written to ` target/dx/log-out/release/web/public/ ` .
111+ ### Android Native APK
117112
118- To serve the PWA locally with hot-reload during development, run
113+ We currently don’t support pure ` nix build ` for Android. To build the native
114+ Android APK, run the following from an activadet development shell:
119115
120116``` sh
121- dx serve # Serves at http://localhost:8080
117+ dx build --android --release --target aarch64-linux-android # Your desired arch
122118```
123119
124- ### Building the Android App
120+ > APK is signed with [ ` apk-sign.sh ` ] ( .script/apk-sign.sh ) after the build, to
121+ > keep it reproducible and because Dioxus requires secrets in clear in VCS
125122
126- To build for Android as APK, run
127-
128- ``` sh
129- dx build --android --release --target aarch64-linux-android
130- ```
131-
132- > Dioxus ` 0.7 ` don’t yet supports signing (it does, but keys have to be in clear
133- > in ` Dioxus.toml ` ) the APK, so we use ` .script/android-sign.sh ` .
134-
135- ## Code Conventions & Contributing
123+ ## Engineering Principles & Contributing
136124
137125Sometimes, we need to make tradeoffs between different positives outcomes.
138126LogOut follows that priority order:
@@ -221,7 +209,7 @@ Follow this contribution process, based on [GitHub Flow], [Conventional Branch]:
2212094 . Fulfill the ** PR** template checks before marking it ready for review
2222105 . Fix your code if it don’t pass [ CI checks] ( #continuous-integration-ci )
223211
224- ## Continuous Integration (CI)
212+ ## Continuous Integration & Continuous Deployment (CI / CD )
225213
226214[ LogOut] keep high standards of code quality and reliability. Every change must
227215pass through a pull-request (PR), and every below check (that runs on pushes on
@@ -241,8 +229,6 @@ PRs) must pass (for some, at a certain level) for it to be merged into `main`.
241229 - Web Maestro ** end-to-end tests** with ` maestro test maestro/web `
242230 - Publish a report with screenshots of failed E2E tests as a PR comment
243231
244- ## Continuous Deployment (CD)
245-
246232[ LogOut] stays continuously fresh and up-to-date thanks to its automated
247233deployment pipeline running at every push on ` main ` branch (coming only from
248234validated PRs), on standard Linux runners.
@@ -257,7 +243,7 @@ validated PRs), on standard Linux runners.
257243CD also runs when a [ SemVer] ` vMAJOR.MINOR.PATCH ` ** tag** is pushed, publishing
258244a “Stable” GitHub Release with a production Android APK buit on this ` tag ` .
259245
260- ## Weekly Deep Checks
246+ ### Weekly Deep Checks
261247
262248[ LogOut] ensures high quality code while with additional ressource intensive
263249checks that run every Sunday at midnight on the ` main ` branch.
@@ -291,7 +277,6 @@ checks that run every Sunday at midnight on the `main` branch.
291277[ llvm-cov ] : https://llvm.org/docs/CommandGuide/llvm-cov.html
292278[ Maestro ] : https://maestro.dev
293279[ Nix ] : https://nixos.org
294- [ Rust ] : https://www.rust-lang.org
295280[ rust-analyzer ] : https://rust-analyzer.github.io
296281[ rust ] : https://www.rust-lang.org
297282[ rustc ] : https://doc.rust-lang.org/rustc
0 commit comments