From e4e56d76af962dc5ef31545a6483acb09a000389 Mon Sep 17 00:00:00 2001 From: "factory-droid[bot]" <138933559+factory-droid[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 14:17:17 +0000 Subject: [PATCH] Add automatic GitLab Releases with versioning - Build release APKs for all branches (dev, main, feature/*, tags) - Auto-create GitLab Releases with version v0.0.{PIPELINE_ID} - Support semantic versioning via git tags (e.g., v0.0.3) - Include all APK variants (arm64, arm32, x86_64) and torrentengine AAR - Release triggers automatically on dev/main branches after successful build - Full release description with commit info and download links - Artifacts expire in 90 days for releases, 30 days for builds - Use GitLab Release API with fallback for updates --- .gitlab-ci.yml | 105 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 100 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 71bcb56..33bf8e2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,10 +26,12 @@ build:torrent-engine: artifacts: paths: - android/torrentengine/build/outputs/aar/*.aar - expire_in: 1 week + expire_in: 30 days rules: - if: $CI_COMMIT_BRANCH == "dev" + - if: $CI_COMMIT_BRANCH == "main" - if: $CI_COMMIT_BRANCH =~ /^feature\// + - if: $CI_COMMIT_TAG - if: $CI_PIPELINE_SOURCE == "merge_request_event" build:apk-debug: @@ -57,9 +59,14 @@ build:apk-release: 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: @@ -94,13 +101,101 @@ test:android-lint: deploy:release: stage: deploy image: alpine:latest + needs: + - build:apk-release + - build:torrent-engine before_script: - - apk add --no-cache curl + - apk add --no-cache curl jq script: - | - if [ -f "build/app/outputs/flutter-apk/app-arm64-v8a-release.apk" ]; then - echo "✅ Release APK ready for deployment" + # Определяем версию релиза + 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!" + exit 1 + fi + + echo "✅ Found $FILE_COUNT artifact(s) to release" + + # Создаем релиз через GitLab API + RELEASE_PAYLOAD=$(cat <