robot 065df61e8a
CI / Lint (pull_request) Canceled after 0s
CI / Test (pull_request) Canceled after 0s
CI / Build Android (pull_request) Canceled after 0s
CI / Build iOS (pull_request) Canceled after 0s
perf(ci): use Docker containers for all jobs — eliminate redundant SDK downloads
Every job now runs inside kryz-ci:latest via 'docker run' with volume
mounts. The image is built once per pipeline (with a cache check) instead
of every job redownloading Flutter + Android SDK + Java independently.

Before: ~40 min (each of 3-4 jobs downloads ~750MB of SDKs from scratch)
After (first run): ~25 min (single Docker build, then all jobs use cached image)
After (cached): ~5-8 min (image already on runner, jobs just docker run)

Changes:
- ci.yml: replace inline SDK setup in lint/test/build-android with
  'docker run --rm -v ${PWD}:/workspace kryz-ci:latest' per step
- release.yml: same container strategy + fix auth token leak (was
  hardcoded '***' instead of using $GITEA_TOKEN env var)
- ci.Dockerfile: add cleanup (rm /tmp, http cache) to shrink image size
- Net reduction: 3 files changed, -111 lines removed
2026-08-03 13:55:01 +00:00

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

dart run flutter_name_manager:rename_app --name "KRYZ Go!"

Updating the launcher icons

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

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).
S
Description
No description provided
Readme
4 MiB
0 Stars 2 Watchers 0 Forks
Languages
Dart 35.4%
Kotlin 19.1%
Python 13.1%
C++ 12.9%
CMake 10.3%
Other 9.2%