- Pipeline overview diagram - Workflow descriptions (CI and Release) - Required secrets table - Troubleshooting section
101 lines
3.6 KiB
Markdown
Executable File
101 lines
3.6 KiB
Markdown
Executable File
# 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 <platform>`
|
|
|
|
Will build a release build for `<platform>`.
|
|
## Running in Debug mode
|
|
With a device or devices connected:
|
|
|
|
`flutter run <platform>`
|
|
|
|
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 <platform> && 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
|
|
|
|

|
|
|
|
### 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).
|