mirror of
https://gitlab.com/foxixus/neomovies_mobile.git
synced 2025-10-28 04:38:49 +05:00
Compare commits
3 Commits
545b5e0d68
...
1e4b2f00ba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e4b2f00ba | ||
|
|
82850b4556 | ||
|
|
a48f947d65 |
185
.gitlab-ci.yml
185
.gitlab-ci.yml
@@ -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"
|
|
||||||
|
|
||||||
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
|
when: always
|
||||||
rules:
|
- if: $CI_COMMIT_BRANCH =~ /^dev|main/
|
||||||
- if: $CI_COMMIT_BRANCH == "dev"
|
when: on_success
|
||||||
- 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}" \
|
||||||
if [ "$RESPONSE" = "FAILED" ]; then
|
|
||||||
echo "⚠️ Release API call failed, trying alternative method..."
|
|
||||||
# Если релиз уже существует, пробуем обновить
|
|
||||||
curl -s -X PUT \
|
|
||||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}" \
|
|
||||||
--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}"
|
--data "$RELEASE_PAYLOAD"
|
||||||
fi
|
|
||||||
|
echo "Release created/updated: ${CI_PROJECT_URL}/-/releases/${VERSION}"
|
||||||
|
echo "APK artifact: ${CI_JOB_URL}/artifacts/browse"
|
||||||
|
|
||||||
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
|
||||||
Reference in New Issue
Block a user