Geist Supervisor
The Geist Supervisor is the central orchestrator for the Geist ecosystem. A Rust-based tool that manages the update process, debugging, and runtime control of the Geist and associated applications.
Quick Start
# Install geist_supervisor
# Check version and status
# Check for updates
# Perform OTA update
Testing
This project uses cargo nextest as the preferred test runner for better test isolation and parallel execution.
Prerequisites
Install nextest if not already available:
Running Tests
# Run all tests (recommended)
# Run tests for a specific module
# Quick test run (fail-fast, minimal output)
# CI-style run (with retries)
# Legacy test runner (may have race conditions)
Why Nextest?
We use nextest because it provides:
- Better test isolation: Each test runs in its own process
- Proper parallel execution: No race conditions with environment variables
- Better reporting: Clear, structured output
- Faster feedback: Optimized execution and reporting
How to install
cargo install geist_supervisor
: Installs the Geist Supervisor to the system.
Key Features
-
Unified Updates:
- Ensures all components (Geist binaries, Roc Camera App) are updated simultaneously to a single unified version.
-
Update Process:
- Automatically verifies and applies updates for:
- Geist binaries.
- Roc Camera App binaries.
- Plymouth boot splash screen (from assets/splash/splash.png).
- Ensures integrity with checksum and signature validation.
- Restarts all services in the correct order after updating.
- Automatically verifies and applies updates for:
-
Bootloader like functionality:
- Acts as the bootloader for the Geist application, the Roc Camera App, and any future firmware components.
CLI Commands
The command line interface is built using clap. It should just be geist <command>
.
Update Commands
geist_supervisor update <version>
: Updates all components (Geist, Roc Camera App, microcontroller firmware) to the specified version.geist_supervisor verify <version>
: Verifies that all artifacts for a given version are available and valid.geist_supervisor rollback <version>
: Rolls back to a previous known-good version.