# 🚀 CI/CD Configuration для NeoMovies Mobile ## 📋 Обзор Автоматическая сборка APK и TorrentEngine модуля с оптимизацией использования RAM. --- ## 🏗️ Конфигурации ### 1. **GitLab CI/CD** (`.gitlab-ci.yml`) Основная конфигурация для GitLab: #### **Stages:** - **build** - Сборка APK и AAR - **test** - Анализ кода и тесты - **deploy** - Публикация релизов #### **Jobs:** | Job | Описание | Артефакты | Ветки | |-----|----------|-----------|-------| | `build:torrent-engine` | Сборка TorrentEngine AAR | `*.aar` | dev, feature/*, MR | | `build:apk-debug` | Сборка Debug APK | `app-debug.apk` | dev, feature/*, MR | | `build:apk-release` | Сборка Release APK | `app-arm64-v8a-release.apk` | только dev | | `test:flutter-analyze` | Анализ Dart кода | - | dev, MR | | `test:android-lint` | Android Lint | HTML отчеты | dev, MR | | `deploy:release` | Публикация релиза | - | только tags (manual) | ### 2. **GitHub Actions** (`.github/workflows/build.yml`) Альтернативная конфигурация для GitHub: #### **Workflows:** | Workflow | Триггер | Описание | |----------|---------|----------| | `build-torrent-engine` | push, PR | Сборка AAR модуля | | `build-debug-apk` | push, PR | Debug APK для тестирования | | `build-release-apk` | push to dev | Release APK (split-per-abi) | | `code-quality` | push, PR | Flutter analyze + Android Lint | --- ## ⚙️ Оптимизация RAM ### **gradle.properties** ```properties # Уменьшено с 4GB до 2GB org.gradle.jvmargs=-Xmx2G -XX:MaxMetaspaceSize=1G # Kotlin daemon с ограничением kotlin.daemon.jvmargs=-Xmx1G -XX:MaxMetaspaceSize=512m # Включены оптимизации org.gradle.parallel=true org.gradle.caching=true org.gradle.configureondemand=true ``` ### **CI переменные** ```bash # В CI используется еще меньше RAM GRADLE_OPTS="-Xmx1536m -XX:MaxMetaspaceSize=512m" ``` --- ## 📦 Артефакты ### **TorrentEngine AAR:** - Путь: `android/torrentengine/build/outputs/aar/` - Файл: `torrentengine-release.aar` - Срок хранения: 7 дней - Размер: ~5-10 MB ### **Debug APK:** - Путь: `build/app/outputs/flutter-apk/` - Файл: `app-debug.apk` - Срок хранения: 7 дней - Размер: ~50-80 MB ### **Release APK:** - Путь: `build/app/outputs/flutter-apk/` - Файл: `app-arm64-v8a-release.apk` - Срок хранения: 30 дней - Размер: ~30-50 MB (split-per-abi) --- ## 🚦 Триггеры сборки ### **GitLab:** **Автоматически запускается при:** - Push в `dev` ветку - Push в `feature/torrent-engine-integration` - Создание Merge Request - Push тега (для deploy) **Ручной запуск:** - Web UI → Pipelines → Run Pipeline - Выбрать ветку и нажать "Run pipeline" ### **GitHub:** **Автоматически запускается при:** - Push в `dev` или `feature/torrent-engine-integration` - Pull Request в `dev` **Ручной запуск:** - Actions → Build NeoMovies Mobile → Run workflow --- ## 🔧 Настройка GitLab Instance Runners ### **Рекомендуется: Использовать GitLab Instance Runners (SaaS)** GitLab предоставляет 112+ бесплатных shared runners для всех проектов! **Как включить:** 1. Перейдите в **Settings → CI/CD → Runners** 2. Найдите секцию **"Instance runners"** 3. Нажмите **"Enable instance runners for this project"** 4. Готово! ✅ **Доступные теги для Instance Runners:** | Тег | RAM | CPU | Описание | |-----|-----|-----|----------| | `saas-linux-small-amd64` | 2 GB | 1 core | Легкие задачи | | `saas-linux-medium-amd64` | 4 GB | 2 cores | **Рекомендуется для Android** | | `saas-linux-large-amd64` | 8 GB | 4 cores | Тяжелые сборки | | `docker` | varies | varies | Любой Docker runner | **Наша конфигурация использует:** - TorrentEngine: `saas-linux-medium-amd64` (4GB, 2 cores) - Остальные jobs: `docker` (автоматический выбор) --- ### **Альтернатива: Локальный Runner (не требуется)** Только если нужна кастомная конфигурация: ```bash # 1. Установка GitLab Runner curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash sudo apt-get install gitlab-runner # 2. Регистрация Runner sudo gitlab-runner register \ --url https://gitlab.com/ \ --registration-token YOUR_TOKEN \ --executor docker \ --docker-image mingc/android-build-box:latest \ --tag-list docker,android # 3. Запуск sudo gitlab-runner start ``` --- ## 📊 Время сборки (примерно) | Job | Время | RAM | CPU | |-----|-------|-----|-----| | TorrentEngine | ~5-10 мин | 1.5GB | 2 cores | | Debug APK | ~15-20 мин | 2GB | 2 cores | | Release APK | ~20-30 мин | 2GB | 2 cores | | Flutter Analyze | ~2-3 мин | 512MB | 1 core | | Android Lint | ~5-8 мин | 1GB | 2 cores | --- ## 🐳 Docker образы ### **mingc/android-build-box:latest** Включает: - Android SDK (latest) - Flutter SDK - Java 17 - Gradle - Git, curl, wget Размер: ~8GB --- ## 🔍 Кэширование Для ускорения сборок используется кэширование: ```yaml cache: paths: - .gradle/ # Gradle dependencies - .pub-cache/ # Flutter packages - android/.gradle/ # Android build cache - build/ # Flutter build cache ``` **Эффект:** - Первая сборка: ~25 минут - Последующие: ~10-15 минут (с кэшем) --- ## 📝 Логи и отладка ### **Просмотр логов GitLab:** 1. Перейти в **CI/CD → Pipelines** 2. Выбрать pipeline 3. Кликнуть на job для просмотра логов ### **Отладка локально:** ```bash # Тестирование сборки TorrentEngine cd android ./gradlew :torrentengine:assembleRelease \ --no-daemon \ --parallel \ --stacktrace # Тестирование Flutter APK flutter build apk --debug --verbose ``` --- ## 🚨 Troubleshooting ### **Gradle daemon crashed:** **Проблема:** `Gradle build daemon disappeared unexpectedly` **Решение:** ```bash # Увеличить RAM в gradle.properties org.gradle.jvmargs=-Xmx3G # Или отключить daemon ./gradlew --no-daemon ``` ### **Out of memory:** **Проблема:** `OutOfMemoryError: Java heap space` **Решение:** ```bash # Увеличить heap в CI GRADLE_OPTS="-Xmx2048m -XX:MaxMetaspaceSize=768m" ``` ### **LibTorrent4j native libraries not found:** **Проблема:** Нативные библиотеки не найдены **Решение:** - Убедиться что все архитектуры включены в `build.gradle.kts` - Проверить `splits.abi` конфигурацию --- ## 📚 Дополнительные ресурсы - [GitLab CI/CD Docs](https://docs.gitlab.com/ee/ci/) - [GitHub Actions Docs](https://docs.github.com/actions) - [Flutter CI/CD Guide](https://docs.flutter.dev/deployment/cd) - [Gradle Performance](https://docs.gradle.org/current/userguide/performance.html) --- ## 🎯 Следующие шаги 1. **Настроить GitLab Runner** (если еще не настроен) 2. **Запушить изменения** в dev ветку 3. **Проверить Pipeline** в GitLab CI/CD 4. **Скачать артефакты** после успешной сборки 5. **Протестировать APK** на реальном устройстве --- ## 📞 Поддержка При проблемах с CI/CD: 1. Проверьте логи pipeline 2. Убедитесь что Runner активен 3. Проверьте доступность Docker образа 4. Создайте issue с логами ошибки --- **Создано с ❤️ для NeoMovies Mobile**