diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 33bf8e2..5d9d0f8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,10 +1,9 @@ stages: - build - - test - deploy variables: - GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs='-Xmx2048m' -Dorg.gradle.parallel=true" + GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs='-Xmx1536m' -Dorg.gradle.parallel=true" GRADLE_USER_HOME: "${CI_PROJECT_DIR}/.gradle" PUB_CACHE: "${CI_PROJECT_DIR}/.pub-cache" @@ -16,186 +15,65 @@ cache: - android/.gradle/ - build/ -build:torrent-engine: +build:apk: stage: build - image: mingc/android-build-box:latest + image: ghcr.io/cirruslabs/flutter:stable script: - - cd android - - chmod +x gradlew - - ./gradlew :torrentengine:assembleRelease --no-daemon --stacktrace + - flutter pub get + - flutter build apk --release --no-shrink artifacts: paths: - - android/torrentengine/build/outputs/aar/*.aar + - build/app/outputs/flutter-apk/*.apk expire_in: 30 days rules: - - if: $CI_COMMIT_BRANCH == "dev" - - if: $CI_COMMIT_BRANCH == "main" - - if: $CI_COMMIT_BRANCH =~ /^feature\// + - if: $CI_COMMIT_BRANCH =~ /^dev|main|feature\// - if: $CI_COMMIT_TAG - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - -build:apk-debug: - stage: build - image: ghcr.io/cirruslabs/flutter:stable - script: - - flutter pub get - - flutter build apk --debug - artifacts: - paths: - - build/app/outputs/flutter-apk/app-debug.apk - expire_in: 1 week - rules: - - if: $CI_COMMIT_BRANCH == "dev" - - if: $CI_COMMIT_BRANCH =~ /^feature\// - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - allow_failure: true - -build:apk-release: - stage: build - image: ghcr.io/cirruslabs/flutter:stable - script: - - flutter pub get - - flutter build apk --release --split-per-abi - artifacts: - paths: - - build/app/outputs/flutter-apk/app-arm64-v8a-release.apk - - build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk - - build/app/outputs/flutter-apk/app-x86_64-release.apk - expire_in: 30 days - rules: - - if: $CI_COMMIT_BRANCH == "dev" - - if: $CI_COMMIT_BRANCH == "main" - - if: $CI_COMMIT_BRANCH =~ /^feature\// - - if: $CI_COMMIT_TAG - allow_failure: true - -test:flutter-analyze: - stage: test - image: ghcr.io/cirruslabs/flutter:stable - script: - - flutter pub get - - flutter analyze - rules: - - if: $CI_COMMIT_BRANCH == "dev" - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - allow_failure: true - -test:android-lint: - stage: test - image: mingc/android-build-box:latest - script: - - cd android - - chmod +x gradlew - - ./gradlew lint --no-daemon - artifacts: - paths: - - android/app/build/reports/lint-*.html - - android/torrentengine/build/reports/lint-*.html - expire_in: 1 week - when: always - rules: - - if: $CI_COMMIT_BRANCH == "dev" - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - allow_failure: true + allow_failure: false deploy:release: stage: deploy image: alpine:latest needs: - - build:apk-release - - build:torrent-engine + - build:apk before_script: - apk add --no-cache curl jq script: - | - # Определяем версию релиза - if [ -n "$CI_COMMIT_TAG" ]; then - VERSION="$CI_COMMIT_TAG" - else - # Автоматическая версия из коммита - VERSION="v0.0.${CI_PIPELINE_ID}" - fi - - echo "📦 Creating GitLab Release: $VERSION" - echo "📝 Commit: ${CI_COMMIT_SHORT_SHA}" - echo "🔗 Branch: ${CI_COMMIT_BRANCH}" - - # Проверяем наличие APK файлов - APK_ARM64="build/app/outputs/flutter-apk/app-arm64-v8a-release.apk" - APK_ARM32="build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk" - APK_X86="build/app/outputs/flutter-apk/app-x86_64-release.apk" - AAR_TORRENT="android/torrentengine/build/outputs/aar/torrentengine-release.aar" - - # Создаем описание релиза - RELEASE_DESCRIPTION="## NeoMovies Mobile ${VERSION} - - **Build Info:** - - Commit: \`${CI_COMMIT_SHORT_SHA}\` - - Branch: \`${CI_COMMIT_BRANCH}\` - - Pipeline: [#${CI_PIPELINE_ID}](${CI_PIPELINE_URL}) - - **Downloads:** - " - - # Подсчитываем файлы - FILE_COUNT=0 - [ -f "$APK_ARM64" ] && FILE_COUNT=$((FILE_COUNT+1)) && RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- ARM64 APK: \`app-arm64-v8a-release.apk\`" - [ -f "$APK_ARM32" ] && FILE_COUNT=$((FILE_COUNT+1)) && RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- ARM32 APK: \`app-armeabi-v7a-release.apk\`" - [ -f "$APK_X86" ] && FILE_COUNT=$((FILE_COUNT+1)) && RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- x86_64 APK: \`app-x86_64-release.apk\`" - [ -f "$AAR_TORRENT" ] && FILE_COUNT=$((FILE_COUNT+1)) && RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- TorrentEngine Library: \`torrentengine-release.aar\`" - - if [ $FILE_COUNT -eq 0 ]; then - echo "❌ No release artifacts found!" + # Версия релиза + VERSION="${CI_COMMIT_TAG:-v0.0.${CI_PIPELINE_ID}}" + APK_FILE=$(ls build/app/outputs/flutter-apk/*.apk | head -n1) + if [ -z "$APK_FILE" ]; then + echo "No APK found!" exit 1 fi + + # Создаем описание релиза + DESCRIPTION="NeoMovies Mobile ${VERSION} - echo "✅ Found $FILE_COUNT artifact(s) to release" - +Commit: ${CI_COMMIT_SHORT_SHA} +Branch: ${CI_COMMIT_BRANCH} +Pipeline: [#${CI_PIPELINE_ID}](${CI_PIPELINE_URL}) + +APK: \`$(basename $APK_FILE)\`" + # Создаем релиз через GitLab API - RELEASE_PAYLOAD=$(cat <