# GitLab CI/CD Configuration for NeoMovies Mobile # Автоматическая сборка APK и TorrentEngine модуля stages: - build - test - deploy variables: # Flutter версия FLUTTER_VERSION: "3.35.5" # Android SDK ANDROID_SDK_ROOT: "/opt/android-sdk" # Gradle настройки для CI (меньше RAM) GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs='-Xmx1536m -XX:MaxMetaspaceSize=512m' -Dorg.gradle.parallel=true -Dorg.gradle.caching=true" # Кэш GRADLE_USER_HOME: "${CI_PROJECT_DIR}/.gradle" PUB_CACHE: "${CI_PROJECT_DIR}/.pub-cache" # Кэширование для ускорения сборки cache: key: ${CI_COMMIT_REF_SLUG} paths: - .gradle/ - .pub-cache/ - android/.gradle/ - android/build/ - build/ # ============================================ # Сборка только TorrentEngine модуля # ============================================ build:torrent-engine: stage: build image: mingc/android-build-box:latest tags: - saas-linux-medium-amd64 # GitLab Instance Runner (4GB RAM, 2 cores) script: - echo "Building TorrentEngine library module..." - cd android # Собираем только модуль torrentengine - ./gradlew :torrentengine:assembleRelease --no-daemon --parallel --build-cache - ls -lah torrentengine/build/outputs/aar/ artifacts: name: "torrentengine-${CI_COMMIT_SHORT_SHA}" paths: - android/torrentengine/build/outputs/aar/*.aar expire_in: 1 week only: - dev - feature/torrent-engine-integration - merge_requests when: on_success # ============================================ # Сборка Debug APK # ============================================ build:apk-debug: stage: build image: mingc/android-build-box:latest tags: - docker before_script: - echo "Installing Flutter ${FLUTTER_VERSION}..." - git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter - export PATH="/opt/flutter/bin:$PATH" - flutter --version - flutter doctor -v - flutter pub get script: - echo "Building Debug APK..." - flutter build apk --debug --target-platform android-arm64 - ls -lah build/app/outputs/flutter-apk/ artifacts: name: "neomovies-debug-${CI_COMMIT_SHORT_SHA}" paths: - build/app/outputs/flutter-apk/app-debug.apk expire_in: 1 week only: - dev - feature/torrent-engine-integration - merge_requests when: on_success allow_failure: true # ============================================ # Сборка Release APK (только для dev) # ============================================ build:apk-release: stage: build image: mingc/android-build-box:latest tags: - docker before_script: - echo "Installing Flutter ${FLUTTER_VERSION}..." - git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter - export PATH="/opt/flutter/bin:$PATH" - flutter --version - flutter doctor -v - flutter pub get script: - echo "Building Release APK..." # Сборка с split-per-abi для уменьшения размера - flutter build apk --release --split-per-abi --target-platform android-arm64 - ls -lah build/app/outputs/flutter-apk/ artifacts: name: "neomovies-release-${CI_COMMIT_SHORT_SHA}" paths: - build/app/outputs/flutter-apk/app-arm64-v8a-release.apk expire_in: 30 days only: - dev when: on_success allow_failure: true # ============================================ # Анализ кода Flutter # ============================================ test:flutter-analyze: stage: test image: mingc/android-build-box:latest tags: - docker before_script: - git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter - export PATH="/opt/flutter/bin:$PATH" - flutter pub get script: - echo "Running Flutter analyze..." - flutter analyze --no-fatal-infos || true only: - dev - merge_requests allow_failure: true # ============================================ # Kotlin/Android lint # ============================================ test:android-lint: stage: test image: mingc/android-build-box:latest tags: - docker script: - echo "Running Android Lint..." - cd android - ./gradlew lint --no-daemon || true artifacts: name: "lint-reports-${CI_COMMIT_SHORT_SHA}" paths: - android/app/build/reports/lint-results*.html - android/torrentengine/build/reports/lint-results*.html expire_in: 1 week only: - dev - merge_requests allow_failure: true # ============================================ # Deploy к релизам (опционально) # ============================================ deploy:release: stage: deploy image: alpine:latest tags: - docker before_script: - apk add --no-cache curl jq script: - echo "Creating GitLab Release..." - | if [ -f "build/app/outputs/flutter-apk/app-arm64-v8a-release.apk" ]; then echo "Release APK found" # Здесь можно добавить публикацию в GitLab Releases или другой deployment fi only: - tags when: manual # ============================================ # Уведомление об успешной сборке # ============================================ .notify_success: after_script: - echo "✅ Build completed successfully!" - echo "📦 Artifacts are available in the pipeline artifacts" - echo "🔗 Download URL: ${CI_JOB_URL}/artifacts/download"