Files
neomovies-mobile/.gitlab-ci.yml
factory-droid[bot] 83842efb68 ci: optimize RAM usage and add CI/CD pipelines
- Reduce Gradle RAM from 4GB to 2GB with optimizations
- Add GitLab CI/CD with separate jobs for TorrentEngine and APK
- Add GitHub Actions workflow as alternative
- Enable parallel builds and caching
- Configure automated artifact uploads
- Add comprehensive CI/CD documentation
2025-10-02 11:14:54 +00:00

188 lines
5.5 KiB
YAML
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.

# 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:
- docker
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"