Files
neomovies-mobile/.gitlab-ci.yml
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

188 lines
5.6 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:
- 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"