This commit is contained in:
Forrest 2026-07-29 15:28:11 -04:00
parent d205277cdd
commit d1cab09a4f
9 changed files with 850 additions and 140 deletions

113
codemagic.yaml Normal file
View file

@ -0,0 +1,113 @@
# Codemagic CI/CD for ratune_mobile (Flutter).
# The repo root IS the Flutter project, so scripts run from the app directory
# with no `working_directory` override. Two workflows: Android (Linux) and
# iOS (mac). Docs: https://docs.codemagic.io/yaml/yaml-getting-started/
definitions:
# Shared quality gate — anchored per-step (YAML can't splice a list into a
# list, only reference individual map items). Toolchain is pinned inline in
# each workflow to Flutter 3.44.8 / Dart 3.12.2 (the local dev version);
# change to `stable` for the latest, or bump when you upgrade.
scripts:
- &flutter_version
name: Flutter version
script: flutter --version
- &get_deps
name: Get dependencies
script: flutter pub get
- &analyze
name: Analyze
script: flutter analyze
- &unit_tests
name: Unit tests
script: |
mkdir -p test-results
flutter test --machine --coverage > test-results/flutter.json
test_report: test-results/flutter.json
workflows:
# ---------------------------------------------------------------------------
android:
name: Android (APK + AAB)
instance_type: linux_x2
max_build_duration: 60
environment:
flutter: 3.44.8
java: 17
# Uncomment once you add a keystore to Codemagic (Teams → Code signing
# identities → Android) and reference its group here to sign releases.
# groups:
# - android_keystore # CM_KEYSTORE, CM_KEYSTORE_PASSWORD, CM_KEY_ALIAS, CM_KEY_PASSWORD
cache:
cache_paths:
- $HOME/.pub-cache
- $HOME/.gradle/caches
# triggering:
# events: [push, tag]
# branch_patterns:
# - pattern: main
# include: true
scripts:
- *flutter_version
- *get_deps
- *analyze
- *unit_tests
# NOTE: android/app/build.gradle.kts currently signs `release` with the
# DEBUG key (Flutter template default), so these build & install but are
# not upload-ready. To ship: add a real signingConfig backed by
# key.properties / the CI env vars above — this step then needs no change.
- name: Build APK (release)
script: flutter build apk --release
- name: Build App Bundle (release)
script: flutter build appbundle --release
artifacts:
- build/app/outputs/flutter-apk/*.apk
- build/app/outputs/bundle/**/*.aab
- build/app/outputs/**/mapping.txt
- flutter_drive.log
# publishing:
# email:
# recipients:
# - you@conversionpath.com
# notify:
# success: true
# failure: true
# # google_play:
# # credentials: $GCLOUD_SERVICE_ACCOUNT_CREDENTIALS
# # track: internal
# ---------------------------------------------------------------------------
ios:
name: iOS (unsigned build)
instance_type: mac_mini_m2
max_build_duration: 60
environment:
flutter: 3.44.8
java: 17
cache:
cache_paths:
- $HOME/.pub-cache
- $HOME/.gradle/caches
scripts:
- *flutter_version
- *get_deps
- *analyze
- *unit_tests
# Compiles the iOS app without code signing — verifies the build on CI.
# Produces a .app (not an installable/uploadable .ipa).
- name: Build iOS (no codesign)
script: flutter build ios --release --no-codesign
artifacts:
- build/ios/iphoneos/*.app
- flutter_drive.log
# --- To produce a signed, uploadable IPA instead: configure App Store
# --- Connect + signing in Codemagic (Teams → Integrations → App Store
# --- Connect), then add `ios_signing` to `environment` and replace the
# --- build step with:
# - name: Set up provisioning profiles
# script: xcode-project use-profiles
# - name: Build IPA
# script: flutter build ipa --release --export-options-plist=/Users/builder/export_options.plist
# --- with artifacts: build/ios/ipa/*.ipa and
# --- publishing.app_store_connect.submit_to_testflight: true