Files
neomovies-mobile/CI_CD_README.md
factory-droid[bot] db192b3c76 ci: configure for GitLab Instance Runners
- Use saas-linux-medium-amd64 tag for TorrentEngine build (4GB RAM, 2 cores)
- Update documentation with Instance Runner setup guide
- Add comparison table for different runner sizes
- Keep docker tag for other jobs as fallback
2025-10-02 11:26:05 +00:00

305 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 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**