Files
sf-app-platform/codemagic_scripts/flutter_build.sh
JulianAlcala 298f73b02b ci(codemagic): add staging + production workflows for legacy store builds
Codemagic se usa como herramienta de release (Play Store + App Store),
no como CI general. La validación de develop / feature branches sigue
siendo local.

Workflows:
- staging_android / staging_ios — push a fusion-app → Play Internal Track + TestFlight
- production_android / production_ios — tag 1.0.0(N) → Play (draft) + App Store (manual review)

Todos los workflows publicables buildean en APP_MODE=legacy mientras
el roadmap premium de Treezor no esté listo para producción.

Scripts en codemagic_scripts/:
- project_setup.sh — melos bootstrap (build_runner no es necesario,
  los .freezed.dart y .g.dart están commiteados)
- analyze_and_test.sh — melos run analyze + test con --no-select
  obligatorio (sin TTY melos crashea con StdinException)
- android_dependencies.sh — verifica gradle wrapper
- android_key_properties.sh — escribe key.properties desde CM_KEYSTORE_*
- ios_signing_cocoapods.sh — gem install cocoapods + xcode-project use-profiles
- flutter_build.sh — build aab/ipa con --dart-define=APP_MODE; parser
  para tags formato 1.0.0(N) o v1.0.0(N) en producción
- print_versions.sh — log de versiones y herramientas
- build_status.sh — exit + notificación Google Chat ante fallo

Setup detallado y bloqueantes externos en docs/codemagic-integration.md.
2026-05-12 07:32:52 -05:00

53 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
APP_PLATFORM=$1
ENVIRONMENT=$2
APP_MODE=${3:-legacy}
APP_DIR="apps/mobile_app"
PUBSPEC="$APP_DIR/pubspec.yaml"
case "$ENVIRONMENT" in
"staging")
PUBSPEC_VERSION=$(grep '^version:' "$PUBSPEC" | sed -E 's/^version:[[:space:]]+//')
VERSION_NUMBER=${PUBSPEC_VERSION%+*}
ENV_BUILD_NUMBER=${PUBSPEC_VERSION#*+}
;;
"production")
VERSION_NUMBER=$(echo "$CM_TAG" | sed -E 's/^v?([0-9]+(\.[0-9]+)+)\([0-9]+\)$/\1/')
ENV_BUILD_NUMBER=$(echo "$CM_TAG" | sed -E 's/^v?[0-9]+(\.[0-9]+)+\(([0-9]+)\)$/\2/')
if [ -z "$VERSION_NUMBER" ] || [ -z "$ENV_BUILD_NUMBER" ]; then
echo "Tag inválido (esperado 1.0.0(N) o v1.0.0(N)): $CM_TAG"; exit 1
fi
;;
*)
echo "ENVIRONMENT inválido: $ENVIRONMENT (esperado staging o production)"; exit 1 ;;
esac
cd "$APP_DIR"
COMMON_FLAGS=(
--release
--flavor "$ENVIRONMENT"
-t "lib/main_$ENVIRONMENT.dart"
--build-name="$VERSION_NUMBER"
--build-number="$ENV_BUILD_NUMBER"
--dart-define-from-file="config/$ENVIRONMENT.json"
--dart-define=APP_MODE="$APP_MODE"
)
case "$APP_PLATFORM" in
"android")
flutter build appbundle "${COMMON_FLAGS[@]}"
;;
"ios")
flutter build ipa \
"${COMMON_FLAGS[@]}" \
--export-options-plist=/Users/builder/export_options.plist
;;
*) echo "APP_PLATFORM inválido: $APP_PLATFORM (esperado android o ios)"; exit 1 ;;
esac
echo "Build OK: $APP_PLATFORM / $ENVIRONMENT / mode=$APP_MODE (v$VERSION_NUMBER+$ENV_BUILD_NUMBER)"