From 09ef21af399a60ceb2e45526fe1a7dd94c53819c Mon Sep 17 00:00:00 2001 From: cirakg Date: Wed, 28 Oct 2026 11:45:11 +0100 Subject: chore: prepare repository for open-source release --- docs/DEVELOPER_GUIDE.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'docs/DEVELOPER_GUIDE.md') diff --git a/docs/DEVELOPER_GUIDE.md b/docs/DEVELOPER_GUIDE.md index d9b7c98..84476f9 100644 --- a/docs/DEVELOPER_GUIDE.md +++ b/docs/DEVELOPER_GUIDE.md @@ -4,14 +4,14 @@ --> # Developer guide -Everything runs in Docker through the `Makefile`; the host needs only Docker and make. This guide covers the daily workflow, how the tooling works underneath, and the conventions every change follows. The design and the build plan are in the [README](../README.md). +Builds and tests run in Docker through the `Makefile`; the host needs only Docker and make. This guide covers the daily workflow, how the tooling works underneath, and the conventions every change follows. The original design and build plan are in [PROJECT_PLAN.md](PROJECT_PLAN.md). Optional host secret scanning and contribution guidelines are in [CONTRIBUTING.md](../CONTRIBUTING.md). ## First-time setup 1. Docker access: your user must be in the `docker` group (log out and in after joining, or run `newgrp docker` in a terminal). 2. `make image` builds the development image (about 1.1 GB; it needs the network). 3. `make sdk` is interactive: you accept Garmin's agreements, log in, and the SDK (9.2.0) plus the device files of all 72 products download into `.cache/home` (about 1.1 GB). The login token is deleted at the end. -4. `make key` creates the developer key in `.cache/keys/`. Back that folder up; see [README 15.6](../README.md#156-developer-key). +4. `make key` creates the developer key in `.cache/keys/`. Back that folder up; see [PROJECT_PLAN 15.6](PROJECT_PLAN.md#156-developer-key). ## Daily workflow @@ -19,7 +19,7 @@ Everything runs in Docker through the `Makefile`; the host needs only Docker and | --- | --- | | Build for one device | `make build DEVICE=fr70` | | Run the app and watch it in your browser | `make sim DEVICE=fr70`, then open http://127.0.0.1:6080/vnc.html | -| Unit tests (Python tools and Monkey C, 4 devices) | `make test` | +| Unit tests (Python tools and Monkey C, default device) | `make test` | | All static checks | `make lint` | | Screenshots against the approved images | `make screenshots` | | Accept changed screens after reviewing build/screenshots/ | `make screenshots-approve` | @@ -37,7 +37,7 @@ By default every target that takes a device list runs on the Forerunner 70 only | Path | Content | | --- | --- | -| `source/` | The watch app (Monkey C), one folder per module (README section 5) | +| `source/` | The watch app (Monkey C), one folder per module (PROJECT_PLAN section 5) | | `test/` | Monkey C unit tests (`(:test)` functions), compiled only into test builds | | `test/golden/` | Approved simulator screenshots: one folder per device, one image per screen of the UI flow | | `resources/` | Strings, the default launcher icon, the option properties and, from M7, the settings form | @@ -146,7 +146,7 @@ Debug builds print `DIAG first_frame startup_ms=... mem_used=... mem_total=...` 1. Declare each property in `resources/settings/properties.xml`. Reading an undeclared property crashes the app in a way that can't be caught. 2. Add the setting to `resources/settings/settings.xml` and its strings to `resources/strings/strings.xml`. `make lint` validates both against the SDK schema and checks that they agree (`tools/check_resources.py`). 3. Read the fields through a `Forms.Store` in a reader like `source/settings/OtpForm.mc`, so tests can use `Forms.MemoryStore`. Put every field in the form's hash content and its default in the form's `defaults()`; the test `settingsDefaultsMatchProperties` checks those against `properties.xml`. - 4. Add a phase to `SettingsJob` in README 10.3 order. Heavy work (encoding, many records) goes into its own steps: one step is one timer event under the watchdog. + 4. Add a phase to `SettingsJob` in PROJECT_PLAN 10.3 order. Heavy work (encoding, many records) goes into its own steps: one step is one timer event under the watchdog. - **On-watch numbers**: sideload a debug build (`make build DEVICE=fr70`, copy `build/debug/fr70.prg` to the watch's `GARMIN/APPS` folder over USB). Then open the menu and choose "Debug: benchmark". The watch installs the app and removes the `.prg` from the folder; to remove the app, use the watch's own app menu, then delete the `fr70.*` storage files in `GARMIN/APPS/DATA` and `GARMIN/APPS/SETTINGS` ([YOUR_STEPS.md](YOUR_STEPS.md#45-remove-the-debug-build)). - **A barcode symbology**: add an encoder module under `source/codes/` and dispatch to it in `Codes.encode`. Then: - Add reference rows in `tools/gen_code_vectors.py` (zxing-cpp's writer, or segno for QR) and run `make codes`. -- cgit v1.2.3