Files
Krow-workspace/codemagic.yaml

372 lines
12 KiB
YAML

# Note: key.properties files are now committed to the repository
# CodeMagic keystores are uploaded via Team Settings > Code signing identities > Android keystores
# The keystores are referenced in each workflow's environment section with custom variable names
# Reusable script for building the Flutter app
client-app-android-apk-build-script: &client-app-android-apk-build-script
name: 👷🤖 Build Client App APK (Android)
script: |
dart pub global activate melos
export PATH="$PATH":"$HOME/.pub-cache/bin"
make mobile-install
make mobile-client-build PLATFORM=apk MODE=release
client-app-ios-build-script: &client-app-ios-build-script
name: 👷🍎 Build Client App (iOS)
script: |
dart pub global activate melos
export PATH="$PATH":"$HOME/.pub-cache/bin"
make mobile-install
make mobile-client-build PLATFORM=ios MODE=release
staff-app-android-apk-build-script: &staff-app-android-apk-build-script
name: 👷🤖 Build Staff App APK (Android)
script: |
dart pub global activate melos
export PATH="$PATH":"$HOME/.pub-cache/bin"
make mobile-install
make mobile-staff-build PLATFORM=apk MODE=release
staff-app-ios-build-script: &staff-app-ios-build-script
name: 👷🍎 Build Staff App (iOS)
script: |
dart pub global activate melos
export PATH="$PATH":"$HOME/.pub-cache/bin"
make mobile-install
make mobile-staff-build PLATFORM=ios MODE=release
# Reusable script for distributing Android to Firebase
distribute-android-script: &distribute-android-script
name: 🚛🤖 Distribute Android to Firebase App Distribution
script: |
# Distribute Android APK
# Note: Using wildcards to catch app-release.apk
APP_PATH=$(find apps/mobile/apps -name "app-release.apk" | head -n 1)
if [ -z "$APP_PATH" ]; then
echo "No APK found!"
exit 1
fi
echo "Found APK at: $APP_PATH"
firebase appdistribution:distribute "$APP_PATH" \
--app $FIREBASE_APP_ID_ANDROID \
--release-notes "Build $FCI_BUILD_NUMBER - Environment: $ENV" \
--groups "$FIREBASE_TESTER_GROUPS" \
--token $FIREBASE_TOKEN
# Reusable script for distributing iOS to Firebase
distribute-ios-script: &distribute-ios-script
name: 🚛🍎 Distribute iOS to Firebase App Distribution
script: |
# Distribute iOS
IPA_PATH=$(find apps/mobile/apps -name "*.ipa" | head -n 1)
if [ -z "$IPA_PATH" ]; then
echo "No IPA found!"
exit 1
fi
echo "Found IPA at: $IPA_PATH"
firebase appdistribution:distribute "$IPA_PATH" \
--app $FIREBASE_APP_ID_IOS \
--release-notes "Build $FCI_BUILD_NUMBER - Environment: $ENV" \
--groups "$FIREBASE_TESTER_GROUPS" \
--token $FIREBASE_TOKEN
# Reusable script for web quality checks
web-quality-script: &web-quality-script
name: ✅ Web Quality Checks
script: |
npm install -g pnpm
cd apps/web
pnpm install --frozen-lockfile
pnpm lint
pnpm test
pnpm build
# Reusable script for mobile quality checks
mobile-quality-script: &mobile-quality-script
name: ✅ Mobile Quality Checks
script: |
dart pub global activate melos
export PATH="$PATH":"$HOME/.pub-cache/bin"
make mobile-install
make mobile-analyze
make mobile-test
workflows:
# =================================================================================
# Quality workflow (Web + Mobile)
# =================================================================================
quality-gates-dev:
name: ✅ Quality Gates (Dev)
working_directory: .
instance_type: mac_mini_m2
max_build_duration: 60
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- client_app_dev_credentials
vars:
ENV: dev
scripts:
- *web-quality-script
- *mobile-quality-script
# =================================================================================
# Base workflow for client_app
# =================================================================================
client-app-base: &client-app-base
name: Client App Base
working_directory: .
instance_type: mac_mini_m2
max_build_duration: 60
environment:
flutter: stable
xcode: latest
cocoapods: default
artifacts:
- apps/mobile/apps/client/build/app/outputs/flutter-apk/*.apk
- apps/mobile/apps/client/build/ios/ipa/*.ipa
- apps/mobile/apps/client/build/app/outputs/bundle/release/app-release.aab
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
cache:
cache_paths:
- $HOME/.pub-cache
- $FCI_BUILD_DIR/apps/mobile/apps/client/build
- $FCI_BUILD_DIR/apps/mobile/apps/client/.dart_tool
# =================================================================================
# Base workflow for staff_app
# =================================================================================
staff-app-base: &staff-app-base
name: Staff App Base
working_directory: .
instance_type: mac_mini_m2
max_build_duration: 60
environment:
flutter: stable
xcode: latest
cocoapods: default
artifacts:
- apps/mobile/apps/staff/build/app/outputs/flutter-apk/*.apk
- apps/mobile/apps/staff/build/ios/ipa/*.ipa
- apps/mobile/apps/staff/build/app/outputs/bundle/release/app-release.aab
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
cache:
cache_paths:
- $HOME/.pub-cache
- $FCI_BUILD_DIR/apps/mobile/apps/staff/build
- $FCI_BUILD_DIR/apps/mobile/apps/staff/.dart_tool
# =================================================================================
# Client App Workflows - Android
# =================================================================================
client-app-dev-android:
<<: *client-app-base
name: 🚛🤖 Client App Dev (Android App Distribution)
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- client_app_dev_credentials
android_signing:
- keystore: krow_client_dev
keystore_environment_variable: CM_KEYSTORE_PATH_CLIENT
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_CLIENT
key_alias_environment_variable: CM_KEY_ALIAS_CLIENT
key_password_environment_variable: CM_KEY_PASSWORD_CLIENT
vars:
ENV: dev
scripts:
- *client-app-android-apk-build-script
- *distribute-android-script
client-app-staging-android:
<<: *client-app-base
name: 🚛🤖 Client App Staging (Android App Distribution)
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- client_app_staging_credentials
android_signing:
- keystore: krow_client_staging
keystore_environment_variable: CM_KEYSTORE_PATH_CLIENT
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_CLIENT
key_alias_environment_variable: CM_KEY_ALIAS_CLIENT
key_password_environment_variable: CM_KEY_PASSWORD_CLIENT
vars:
ENV: staging
scripts:
- *client-app-android-apk-build-script
- *distribute-android-script
client-app-prod-android:
<<: *client-app-base
name: 🚛🤖 Client App Prod (Android App Distribution)
environment:
groups:
- client_app_prod_credentials
android_signing:
- keystore: krow_client_prod
keystore_environment_variable: CM_KEYSTORE_PATH_CLIENT
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_CLIENT
key_alias_environment_variable: CM_KEY_ALIAS_CLIENT
key_password_environment_variable: CM_KEY_PASSWORD_CLIENT
vars:
ENV: prod
scripts:
- *client-app-android-apk-build-script
- *distribute-android-script
# =================================================================================
# Client App Workflows - iOS
# =================================================================================
client-app-dev-ios:
<<: *client-app-base
name: 🚛🍎 Client App Dev (iOS App Distribution)
environment:
groups:
- client_app_dev_credentials
vars:
ENV: dev
scripts:
- *client-app-ios-build-script
- *distribute-ios-script
client-app-staging-ios:
<<: *client-app-base
name: 🚛🍎 Client App Staging (iOS App Distribution)
environment:
groups:
- client_app_staging_credentials
vars:
ENV: staging
scripts:
- *client-app-ios-build-script
- *distribute-ios-script
client-app-prod-ios:
<<: *client-app-base
name: 🚛🍎 Client App Prod (iOS App Distribution)
environment:
groups:
- client_app_prod_credentials
vars:
ENV: prod
scripts:
- *client-app-ios-build-script
- *distribute-ios-script
# =================================================================================
# Staff App Workflows - Android
# =================================================================================
staff-app-dev-android:
<<: *staff-app-base
name: 🚛🤖👨‍🍳 Staff App Dev (Android App Distribution)
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- staff_app_dev_credentials
android_signing:
- keystore: krow_staff_dev
keystore_environment_variable: CM_KEYSTORE_PATH_STAFF
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_STAFF
key_alias_environment_variable: CM_KEY_ALIAS_STAFF
key_password_environment_variable: CM_KEY_PASSWORD_STAFF
vars:
ENV: dev
scripts:
- *staff-app-android-apk-build-script
- *distribute-android-script
staff-app-staging-android:
<<: *staff-app-base
name: 🚛🤖👨‍🍳 Staff App Staging (Android App Distribution)
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- staff_app_staging_credentials
android_signing:
- keystore: krow_staff_staging
keystore_environment_variable: CM_KEYSTORE_PATH_STAFF
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_STAFF
key_alias_environment_variable: CM_KEY_ALIAS_STAFF
key_password_environment_variable: CM_KEY_PASSWORD_STAFF
vars:
ENV: staging
scripts:
- *staff-app-android-apk-build-script
- *distribute-android-script
staff-app-prod-android:
<<: *staff-app-base
name: 🚛🤖👨‍🍳 Staff App Prod (Android App Distribution)
environment:
flutter: stable
xcode: latest
cocoapods: default
groups:
- staff_app_prod_credentials
android_signing:
- keystore: krow_staff_prod
keystore_environment_variable: CM_KEYSTORE_PATH_STAFF
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_STAFF
key_alias_environment_variable: CM_KEY_ALIAS_STAFF
key_password_environment_variable: CM_KEY_PASSWORD_STAFF
vars:
ENV: prod
scripts:
- *staff-app-android-apk-build-script
- *distribute-android-script
# =================================================================================
# Staff App Workflows - iOS
# =================================================================================
staff-app-dev-ios:
<<: *staff-app-base
name: 🚛🍎👨‍🍳 Staff App Dev (iOS App Distribution)
environment:
groups:
- staff_app_dev_credentials
vars:
ENV: dev
scripts:
- *staff-app-ios-build-script
- *distribute-ios-script
staff-app-staging-ios:
<<: *staff-app-base
name: 🚛🍎👨‍🍳 Staff App Staging (iOS App Distribution)
environment:
groups:
- staff_app_staging_credentials
vars:
ENV: staging
scripts:
- *staff-app-ios-build-script
- *distribute-ios-script
staff-app-prod-ios:
<<: *staff-app-base
name: 🚛🍎👨‍🍳 Staff App Prod (iOS App Distribution)
environment:
groups:
- staff_app_prod_credentials
vars:
ENV: prod
scripts:
- *staff-app-ios-build-script
- *distribute-ios-script