Compare commits

...

3 Commits

Author SHA1 Message Date
root
1e4b2f00ba Fix 2025-10-02 17:49:43 +00:00
root
82850b4556 fix gitlab ci 2025-10-02 17:43:34 +00:00
root
a48f947d65 better 2025-10-02 17:15:01 +00:00

View File

@@ -1,201 +1,74 @@
stages: stages:
- build - build
- test
- deploy - deploy
variables: build:apk:
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs='-Xmx2048m' -Dorg.gradle.parallel=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/
- build/
build:torrent-engine:
stage: build stage: build
image: mingc/android-build-box:latest image: cirrusci/flutter:latest
script: script:
- cd android - flutter build apk --release
- chmod +x gradlew
- ./gradlew :torrentengine:assembleRelease --no-daemon --stacktrace
artifacts: artifacts:
paths: paths:
- android/torrentengine/build/outputs/aar/*.aar - build/app/outputs/flutter-apk/*.apk
expire_in: 30 days expire_in: 30 days
rules: rules:
- if: $CI_COMMIT_BRANCH == "dev"
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH =~ /^feature\//
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
- if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always
- if: $CI_COMMIT_BRANCH =~ /^dev|main/
build:apk-debug: when: on_success
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
deploy:release: deploy:release:
stage: deploy stage: deploy
image: alpine:latest image: alpine:latest
needs: needs:
- build:apk-release - build:apk
- build:torrent-engine
before_script: before_script:
- apk add --no-cache curl jq - apk add --no-cache curl jq
script: script:
- | - |
# Определяем версию релиза VERSION="${CI_COMMIT_TAG:-v0.0.${CI_PIPELINE_ID}}"
if [ -n "$CI_COMMIT_TAG" ]; then APK_FILE=$(ls build/app/outputs/flutter-apk/*.apk | head -n1)
VERSION="$CI_COMMIT_TAG" if [ -z "$APK_FILE" ]; then
else echo "No APK found!"
# Автоматическая версия из коммита
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 exit 1
fi fi
echo "✅ Found $FILE_COUNT artifact(s) to release" DESCRIPTION="NeoMovies Mobile ${VERSION}
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 <<EOF RELEASE_PAYLOAD=$(cat <<EOF
{ {
"name": "NeoMovies ${VERSION}", "name": "NeoMovies ${VERSION}",
"tag_name": "${VERSION}", "tag_name": "${VERSION}",
"description": "${RELEASE_DESCRIPTION}", "description": "${DESCRIPTION}",
"ref": "${CI_COMMIT_SHA}", "ref": "${CI_COMMIT_SHA}"
"assets": {
"links": []
}
} }
EOF EOF
) )
echo "🚀 Creating release via GitLab API..." curl -s --fail -X POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \
RESPONSE=$(curl --fail-with-body -s -X POST \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \ --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
--header "Content-Type: application/json" \ --header "Content-Type: application/json" \
--data "${RELEASE_PAYLOAD}" || echo "FAILED") --data "$RELEASE_PAYLOAD" || \
curl -s -X PUT "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}" \
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
--header "Content-Type: application/json" \
--data "$RELEASE_PAYLOAD"
if [ "$RESPONSE" = "FAILED" ]; then echo "Release created/updated: ${CI_PROJECT_URL}/-/releases/${VERSION}"
echo "⚠️ Release API call failed, trying alternative method..." echo "APK artifact: ${CI_JOB_URL}/artifacts/browse"
# Если релиз уже существует, пробуем обновить
curl -s -X PUT \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}" \
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
--header "Content-Type: application/json" \
--data "${RELEASE_PAYLOAD}"
fi
echo ""
echo "✅ Release created successfully!"
echo "🔗 View release: ${CI_PROJECT_URL}/-/releases/${VERSION}"
echo "📦 Pipeline artifacts: ${CI_JOB_URL}/artifacts/browse"
artifacts: artifacts:
paths: paths:
- build/app/outputs/flutter-apk/*.apk - build/app/outputs/flutter-apk/*.apk
- android/torrentengine/build/outputs/aar/*.aar expire_in: 30 days
expire_in: 90 days
rules: rules:
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: always when: always
- if: $CI_COMMIT_BRANCH == "dev" - if: $CI_COMMIT_BRANCH =~ /^dev|main/
when: on_success
- if: $CI_COMMIT_BRANCH == "main"
when: on_success when: on_success