Commit Graph

2 Commits

Author SHA1 Message Date
Mike Kell a40589cc89 ci(release): add alpha release pipeline, signing config, and publish tooling
- .forgejo/workflows/release.yaml: tag-triggered (v*) pipeline that builds a
  split-per-abi Android arm64 APK (signed via ANDROID_KEYSTORE_BASE64 /
  ANDROID_KEY_PROPERTIES secrets), a Windows MSIX plus portable zip, and
  attaches every asset to a Forgejo prerelease through the releases API;
  Flutter pinned to 3.47.x because pubspec.lock requires flutter >=3.44.0
- scripts/publish_alpha.ps1: local one-shot build+publish equivalent
  (codegen, APK, portable zip, MSIX, release + asset upload under dist/v*)
- android: release signing wired to key.properties with minify, resource
  shrinking, and new proguard-rules.pro (Flutter embedding, SQLCipher, and
  JSON keep rules)
- pubspec: msix ^3.16.7 dev dependency and msix_config publisher identity
- scripts/test.ps1: Forgejo asset-upload probe reading the token from env;
  the hardcoded token was removed and its rotation is tracked as a
  BUILD_STATE.md verification gate
- gitignore: /dist/, **/android/build/, and android/key.properties
2026-10-18 08:11:23 -04:00
Mike Kell 51364a8f4f feat(platform,tests,ci): complete Phase 6 cross-platform hardening, integration tests, and Forgejo CI/CD
- Harden HealthGateway: kIsWeb/defaultTargetPlatform/dart:io guards, Health
  Connect SDK availability probe with graceful degradation, READ_WEIGHT/
  READ_STEPS/READ_TOTAL_CALORIES_BURNED permission validation before reads,
  HealthKit entitlement failures contained (false + debug warning), and a
  desktop/web fallback that serves locally logged biometrics through the new
  ILocalBiometricReader contract (drift-backed adapter wired in health_sync).
- Platform-safe CryptoManager vault: EncryptedSharedPreferences (Android),
  Keychain first_unlock (iOS/macOS), DPAPI-sealed file (Windows), libsecret
  (Linux); vault failures degrade to an ephemeral in-memory SQLCipher key.
- Declare the four Health Connect READ_* permissions in AndroidManifest.xml.
- Extract isAuthenticatedProvider so integration tests can simulate auth
  sessions without booting Supabase.
- Add 24 tests (99 -> 123): steady-state PK suite (Semaglutide 168h /
  Tirzepatide 120h geometric series, superposition, titration, washout),
  real-world recipe JSON-LD fixtures (BBC-style root, AllRecipes @graph),
  pantry unit-conversion group (kg/g, l/ml, dimension guard, synonyms),
  app navigation integration tests (rail + bar, authenticated + dev-bypass
  + unauthenticated), and reactive nutrition progress-bar widget tests.
- Fix NutritionScreen narrow-width overflows: Flexible protein title and
  Wrap action buttons stack cleanly on compact phones.
- Add .forgejo/workflows/ci.yml for git.kellsupport.com/mtkell/glp-companion
  (push to main + PRs, Flutter container: checkout, mock .env, pub get,
  build_runner, analyze --fatal-infos, test --coverage, build bundle + web).
- Remove dead lib/features/recipes/data/recipe_scraper.dart; rewrite
  README.md (architecture, dev setup, SQLCipher details, CI docs); add
  .env.example; allow it through .gitignore; update BUILD_STATE.md with
  Phase 6 deliverables and complete Phases 1-6 checklist.

Verified: build_runner 44 outputs, flutter analyze --fatal-infos clean,
flutter test 123/123, flutter build web and flutter build bundle succeed.
2026-10-16 14:59:15 -04:00