Files
oott/nix/frontend.nix
T
rzuastiandClaude Opus 4.8 4a1fe60ec3 Derive the version from the Cargo/pubspec manifests
The version string was duplicated across six places. Collapse it to two
ecosystem sources of truth and derive the rest:

- backend/src/web_server.rs: omit the OpenAPI info.version so utoipa fills
  it from CARGO_PKG_VERSION (backend/Cargo.toml); add a test pinning this.
- nix/package.nix: read the version from backend/Cargo.toml via fromTOML.
- nix/frontend.nix: read the version from frontend/pubspec.yaml by splitting
  into lines (a whole-file regex triggers catastrophic backtracking in Nix's
  regex engine).
- frontend/lib/about/about.dart: read the version at runtime via
  package_info_plus instead of a hardcoded constant.

Also drop frontend/pubspec.lock.json: it is unreferenced (Nix's
autoPubspecLock generates its own JSON from pubspec.lock) and was going stale.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 16:49:52 -04:00

22 lines
998 B
Nix

{flutter}: let
# Single source of truth: extract the version from frontend/pubspec.yaml.
# Nix has no YAML parser, so split into lines and read the `version:` line.
# (Matching the whole file with a single regex is avoided on purpose: nested
# quantifiers over the full text trigger catastrophic backtracking in Nix's
# regex engine.)
lines = builtins.filter builtins.isString (builtins.split "\n" (builtins.readFile ./../frontend/pubspec.yaml));
versionLine = builtins.head (builtins.filter (line: builtins.match "version:.*" line != null) lines);
version = builtins.head (builtins.match "version: *([^ ]+) *" versionLine);
in
flutter.buildFlutterApplication {
pname = "oott-frontend";
inherit version;
src = ./../frontend;
# Fetches pub dependencies from the committed pubspec.lock (all hosted, no git deps).
autoPubspecLock = ./../frontend/pubspec.lock;
# Build the web bundle (the backend serves these assets).
targetFlutterPlatform = "web";
}