# KRYZ Go! ## About A Flutter application for KRYZ LP-FM 98.5 Mariposa. This is our Mobile application that ties our listiners into our radio station while on the Go! ## Operations ## Build `flutter build ` Will build a release build for ``. ## Running in Debug mode With a device or devices connected: `flutter run ` Will execute the application in the debugging sandbox. ## Building and deploying in release mode (required for iOS launcher.) Assumes the device is connected meaningfully to the session: `flutter build && flutter install` ## Flutter build tools ### Renaming the app ```shell dart run flutter_name_manager:rename_app --name "KRYZ Go!" ``` ### Updating the launcher icons ```shell dart run flutter_launcher_icons ``` ## CI/CD Pipeline This project uses **Gitea Actions** for continuous integration and release automation. ### Pipeline Overview ``` ┌─────────┐ ┌────────┐ ┌──────────────┐ ┌──────────────┐ │ Lint │───►│ Test │───►│ Build Android │ │ Build iOS │ │ │ │ │ │ (APK + AAB) │ │ (self-hosted)│ └─────────┘ └────────┘ └──────────────┘ └──────────────┘ │ │ │ ▼ ▼ ▼ dart fmt flutter test flutter build ios flutter analyze (--no-codesign fallback) ``` ### Workflows #### CI (`.gitea/workflows/ci.yml`) Triggers on: - Push to `main` or `develop` - Pull requests targeting `main` Stages: 1. **Lint** — `dart format --fix` + `flutter analyze --fatal-warnings` 2. **Test** — `flutter test` (coverage on main branch pushes) 3. **Build Android** — APK + AAB release builds with artifact upload 4. **Build iOS** — `flutter build ios --release --no-codesign` (runs on self-hosted macOS runner) #### Release (`.gitea/workflows/release.yml`) Triggers on: - Git tags matching `v*` (e.g., `v1.0.0`) Stages: 1. **Lint** — `dart format --set-exit-if-changed` + `flutter analyze --fatal-warnings` 2. **Test** — `flutter test` 3. **Build Android Release** — Signed APK + AAB 4. **Build iOS Release** — Signed IPA (or `--no-codesign` fallback) 5. **Publish Release** — Creates Gitea release + uploads artifacts ### Configuration | Secret | Required | Description | |---|---|---| | `ANDROID_KEYSTORE_BASE64` | No | Base64-encoded Android release keystore | | `ANDROID_KEYSTORE_PASS` | No | Keystore password | | `ANDROID_KEY_ALIAS` | No | Key alias | | `ANDROID_KEY_PASS` | No | Key password | | `APPLE_CERTIFICATE_P12` | No | Base64-encoded Apple signing certificate | | `APPLE_CERTIFICATE_PASS` | No | Certificate password | | `APPLE_PROVISION_PROFILE` | No | Base64-encoded provisioning profile | | `GITEA_TOKEN` | Yes (Release) | Token for creating Gitea releases | Without signing secrets, builds use debug keys or `--no-codesign`. ### CI Status ![CI](https://git.westerntechnologies.duckdns.org/kfj001/kryz-go-flutter/actions/workflows/ci.yml/badge.svg) ### Troubleshooting - **Stubs missing**: The `ci_stub_gen.py` script auto-generates `lib/generated/*.dart` stubs when `theme.json` is absent. - **macOS runner unavailable**: The iOS stage uses `self-hosted` label. Ensure a macOS Gitea runner is registered. - **Format checks**: CI uses `dart format --fix` (auto-fix). Release uses `--set-exit-if-changed` (gate).