mirror of
https://gitlab.com/foxixus/neomovies_mobile.git
synced 2025-10-28 03:18:49 +05:00
better
This commit is contained in:
222
.gitlab-ci.yml
222
.gitlab-ci.yml
@@ -2,14 +2,50 @@ stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
build:apk:
|
||||
variables:
|
||||
FLUTTER_VERSION: "stable"
|
||||
|
||||
build:apk:arm64:
|
||||
stage: build
|
||||
image: cirrusci/flutter:latest
|
||||
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
script:
|
||||
- flutter build apk --release
|
||||
- flutter pub get
|
||||
- flutter build apk --release --target-platform android-arm64 --split-per-abi
|
||||
artifacts:
|
||||
paths:
|
||||
- build/app/outputs/flutter-apk/*.apk
|
||||
- build/app/outputs/flutter-apk/app-arm64-v8a-release.apk
|
||||
expire_in: 30 days
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
when: always
|
||||
- if: $CI_COMMIT_BRANCH =~ /^dev|main/
|
||||
when: on_success
|
||||
|
||||
build:apk:arm:
|
||||
stage: build
|
||||
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
script:
|
||||
- flutter pub get
|
||||
- flutter build apk --release --target-platform android-arm --split-per-abi
|
||||
artifacts:
|
||||
paths:
|
||||
- build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk
|
||||
expire_in: 30 days
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
when: always
|
||||
- if: $CI_COMMIT_BRANCH =~ /^dev|main/
|
||||
when: on_success
|
||||
|
||||
build:apk:x64:
|
||||
stage: build
|
||||
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
|
||||
script:
|
||||
- flutter pub get
|
||||
- flutter build apk --release --target-platform android-x64 --split-per-abi
|
||||
artifacts:
|
||||
paths:
|
||||
- build/app/outputs/flutter-apk/app-x86_64-release.apk
|
||||
expire_in: 30 days
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
@@ -21,52 +57,162 @@ deploy:release:
|
||||
stage: deploy
|
||||
image: alpine:latest
|
||||
needs:
|
||||
- build:apk
|
||||
- build:apk:arm64
|
||||
- build:apk:arm
|
||||
- build:apk:x64
|
||||
before_script:
|
||||
- apk add --no-cache curl jq
|
||||
- apk add --no-cache curl jq coreutils
|
||||
script:
|
||||
- |
|
||||
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!"
|
||||
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_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"
|
||||
|
||||
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
|
||||
|
||||
if [ -f "$APK_ARM64" ]; then
|
||||
FILE_COUNT=$((FILE_COUNT+1))
|
||||
SIZE_ARM64=$(du -h "$APK_ARM64" | cut -f1)
|
||||
RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- ARM64 (arm64-v8a): \`app-arm64-v8a-release.apk\` (${SIZE_ARM64}) - Recommended for modern devices"
|
||||
fi
|
||||
|
||||
if [ -f "$APK_ARM32" ]; then
|
||||
FILE_COUNT=$((FILE_COUNT+1))
|
||||
SIZE_ARM32=$(du -h "$APK_ARM32" | cut -f1)
|
||||
RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- ARM32 (armeabi-v7a): \`app-armeabi-v7a-release.apk\` (${SIZE_ARM32}) - For older devices"
|
||||
fi
|
||||
|
||||
if [ -f "$APK_X86" ]; then
|
||||
FILE_COUNT=$((FILE_COUNT+1))
|
||||
SIZE_X86=$(du -h "$APK_X86" | cut -f1)
|
||||
RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}\n- x86_64: \`app-x86_64-release.apk\` (${SIZE_X86}) - For emulators"
|
||||
fi
|
||||
|
||||
if [ $FILE_COUNT -eq 0 ]; then
|
||||
echo "No release artifacts found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DESCRIPTION="NeoMovies Mobile ${VERSION}
|
||||
|
||||
Commit: ${CI_COMMIT_SHORT_SHA}
|
||||
Branch: ${CI_COMMIT_BRANCH}
|
||||
Pipeline: [#${CI_PIPELINE_ID}](${CI_PIPELINE_URL})
|
||||
|
||||
APK: \`$(basename $APK_FILE)\`"
|
||||
|
||||
RELEASE_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"name": "NeoMovies ${VERSION}",
|
||||
"tag_name": "${VERSION}",
|
||||
"description": "${DESCRIPTION}",
|
||||
"ref": "${CI_COMMIT_SHA}"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
curl -s --fail -X POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \
|
||||
|
||||
echo "Found $FILE_COUNT artifact(s) to release"
|
||||
|
||||
RELEASE_DATA=$(jq -n \
|
||||
--arg name "NeoMovies ${VERSION}" \
|
||||
--arg tag "${VERSION}" \
|
||||
--arg desc "$RELEASE_DESCRIPTION" \
|
||||
--arg ref "${CI_COMMIT_SHA}" \
|
||||
'{name: $name, tag_name: $tag, description: $desc, ref: $ref}')
|
||||
|
||||
echo "Creating release via GitLab API..."
|
||||
|
||||
curl --fail-with-body -s -X POST \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "$RELEASE_PAYLOAD" || \
|
||||
curl -s -X PUT "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}" \
|
||||
--data "$RELEASE_DATA" || \
|
||||
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"
|
||||
|
||||
echo "Release created/updated: ${CI_PROJECT_URL}/-/releases/${VERSION}"
|
||||
echo "APK artifact: ${CI_JOB_URL}/artifacts/browse"
|
||||
|
||||
--data "$RELEASE_DATA"
|
||||
|
||||
echo ""
|
||||
echo "Uploading APK files to Package Registry..."
|
||||
|
||||
if [ -f "$APK_ARM64" ]; then
|
||||
echo "Uploading app-arm64-v8a-release.apk..."
|
||||
curl --fail -s --request PUT \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--upload-file "$APK_ARM64" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-arm64-v8a-release.apk"
|
||||
|
||||
LINK_DATA=$(jq -n \
|
||||
--arg name "app-arm64-v8a-release.apk" \
|
||||
--arg url "${CI_PROJECT_URL}/-/package_files/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-arm64-v8a-release.apk" \
|
||||
--arg type "package" \
|
||||
'{name: $name, url: $url, link_type: $type}')
|
||||
|
||||
curl -s --request POST \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "$LINK_DATA" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}/assets/links"
|
||||
|
||||
echo "ARM64 APK uploaded"
|
||||
fi
|
||||
|
||||
if [ -f "$APK_ARM32" ]; then
|
||||
echo "Uploading app-armeabi-v7a-release.apk..."
|
||||
curl --fail -s --request PUT \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--upload-file "$APK_ARM32" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-armeabi-v7a-release.apk"
|
||||
|
||||
LINK_DATA=$(jq -n \
|
||||
--arg name "app-armeabi-v7a-release.apk" \
|
||||
--arg url "${CI_PROJECT_URL}/-/package_files/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-armeabi-v7a-release.apk" \
|
||||
--arg type "package" \
|
||||
'{name: $name, url: $url, link_type: $type}')
|
||||
|
||||
curl -s --request POST \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "$LINK_DATA" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}/assets/links"
|
||||
|
||||
echo "ARM32 APK uploaded"
|
||||
fi
|
||||
|
||||
if [ -f "$APK_X86" ]; then
|
||||
echo "Uploading app-x86_64-release.apk..."
|
||||
curl --fail -s --request PUT \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--upload-file "$APK_X86" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-x86_64-release.apk"
|
||||
|
||||
LINK_DATA=$(jq -n \
|
||||
--arg name "app-x86_64-release.apk" \
|
||||
--arg url "${CI_PROJECT_URL}/-/package_files/${CI_PROJECT_ID}/packages/generic/neomovies/${VERSION}/app-x86_64-release.apk" \
|
||||
--arg type "package" \
|
||||
'{name: $name, url: $url, link_type: $type}')
|
||||
|
||||
curl -s --request POST \
|
||||
--header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "$LINK_DATA" \
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}/assets/links"
|
||||
|
||||
echo "x86_64 APK uploaded"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo "Release created successfully!"
|
||||
echo "View release: ${CI_PROJECT_URL}/-/releases/${VERSION}"
|
||||
echo "Pipeline artifacts: ${CI_JOB_URL}/artifacts/browse"
|
||||
echo "================================================"
|
||||
artifacts:
|
||||
paths:
|
||||
- build/app/outputs/flutter-apk/*.apk
|
||||
expire_in: 30 days
|
||||
expire_in: 90 days
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
when: always
|
||||
|
||||
Reference in New Issue
Block a user